The project's README from github.com/xdreizein666/getcontact-cli. As one markdown file: README.md.
GetContact CLI adalah project Python untuk melakukan komunikasi dengan API GetContact melalui command-line interface (CLI), tanpa menggunakan aplikasi Android maupun browser.
Project ini dibuat sebagai research dan learning project untuk memahami bagaimana aplikasi mobile berkomunikasi dengan backend service serta bagaimana proses autentikasi dan request API bekerja.
Yang bisa dilakukan:
Setiap output perintah otomatis tersimpan ke folder results/.
Project ini adalah independent research project dan tidak berafiliasi, didukung, maupun berhubungan secara resmi dengan GetContact.
Tool ini dibuat untuk tujuan:
Pengguna bertanggung jawab penuh terhadap penggunaan tool ini.
Harap gunakan secara bertanggung jawab dan selalu menghormati:
Project ini tidak ditujukan untuk:
Secara sederhana, flow kerja tool ini:
User Input
|
v
GetContact CLI
|
v
Authenticated API Request
|
v
GetContact Service
|
v
CLI Output
Semua proses dilakukan dari sisi client dan hasil response diproses secara lokal.
Project ini tidak menyediakan server pihak ketiga, database terpusat, maupun shared account.
Tool ini membutuhkan kredensial akun milik pengguna sendiri.
Beberapa hal yang perlu diperhatikan:
Credential adalah tanggung jawab masing-masing pengguna.
Project ini tidak secara sengaja mengumpulkan atau menyimpan data pengguna pada server eksternal.
Namun, pengguna tetap perlu memperhatikan bahwa:
results/ dapat berisi informasi sensitifJangan mendistribusikan informasi pribadi tanpa izin.
Perlu dipahami bahwa:
Pull request dan feedback sangat diterima.
Jika menemukan masalah security, harap jangan langsung mempublikasikan detail sensitif pada issue.
Silakan gunakan responsible disclosure agar masalah dapat ditinjau terlebih dahulu.
Python 3.9 atau lebih baru, dan dua paket:
pip install requests cryptography
Sudah diuji di Windows (git-bash) dan Linux. Tidak ada langkah build, tidak ada file konfigurasi yang perlu diedit.
python gtc.py
Tanpa argumen apa pun, program menampilkan daftar fitur bernomor:
Pilih fitur:
1. Cari profil nomor (nama pemilik)
2. Cari tag nomor (nama tersimpan orang lain)
3. Sisa kuota akun
4. Cari banyak nomor dari file CSV
5. Buka blokir / captcha
6. Lihat akun tersimpan
7. Tambah akun baru (butuh WhatsApp)
0. Keluar
Pilih nomornya, masukkan nomor HP target, hasil langsung tampil. Setelah selesai program kembali ke menu, jadi bisa melakukan beberapa pencarian berturut-turut tanpa mengetik ulang perintah. Kalau satu pencarian gagal — nomor salah format, kuota habis, jaringan putus — pesan errornya ditampilkan dan menu tetap hidup.
python gtc.py search 08123456789 # profil
python gtc.py search 08123456789 -t tags # daftar tag
python gtc.py search 08123456789 --json # respons mentah
python gtc.py quota
python gtc.py batch nomor.csv --delay 2
python gtc.py cred list
Semua nomor dinormalkan ke format E.164 dengan asumsi Indonesia: 08… menjadi +628…, 62…
menjadi +62…, dan nomor yang sudah diawali + dibiarkan apa adanya.
| Perintah | Kegunaan |
|---|---|
search <nomor> |
Lookup satu nomor. -t profile (default) atau -t tags, --json untuk respons mentah. |
batch <file.csv> |
Lookup semua nomor dalam CSV. -o untuk path keluaran, --delay jeda antar-permintaan (default 1.5 detik). |
quota |
Sisa kuota search dan numberDetail, plus tanggal reset. |
captcha |
Menampilkan captcha dan mengirim jawabannya. Dipakai saat akun diblokir sementara. |
generate <nomor> |
Mendaftarkan perangkat baru dan memverifikasinya lewat WhatsApp. Menyimpan hasilnya sebagai kredensial. |
cred list | add | use | remove |
Mengelola kredensial tersimpan. |
Flag -a/--account berlaku untuk semua perintah dan memilih kredensial selain yang aktif.
batchSatu nomor per baris. Jika baris pertama mengandung header bernama phone, phone_number,
phonenumber, atau nomor, kolom itu yang dipakai; selain itu kolom pertama yang dibaca.
phone,nama
08123456789,Budi
081298765432,Siti
Hasilnya CSV dengan kolom phone,status,displayName,tagCount,tags,error. Satu nomor yang gagal tidak
menghentikan proses — barisnya ditandai error dan sisanya tetap jalan.
Kredensial disimpan di ~/.config/gtc/credentials.json dengan permission 600 di sistem POSIX.
Isinya token, finalKey hasil pertukaran Diffie-Hellman, dan clientDeviceId — tiga hal yang cukup
untuk memakai akun GetContact, jadi perlakukan file ini seperti password.
Menambahkan kredensial yang sudah dimiliki:
python gtc.py cred add akun1 --final-key <hex> --token <token> --phone +628...
python gtc.py cred use akun1
Membuat yang baru dari nol:
python gtc.py generate 08123456789
Perintah ini mendaftarkan perangkat palsu, menegosiasikan kunci enkripsi lewat Diffie-Hellman, lalu meminta verifikasi kepemilikan nomor melalui VerifyKit. Di tengah proses akan muncul sebuah link WhatsApp beserta kode; kirim pesan tersebut dari nomor yang bersangkutan, tunggu centang dua, baru tekan Enter. Kredensial hasilnya langsung tersimpan.
Lokasi penyimpanan bisa dipindah lewat GTC_CONFIG_DIR.
Setiap kali sebuah perintah dijalankan, apa yang tampil di layar juga ditulis ke results/ dengan nama berpola waktu:
results/20260820-101307-search-08123456789.txt
results/20260820-100248-quota.txt
results/20260820-101512-batch.csv
Ekstensinya .json bila memakai --json. Perintah batch tanpa -o otomatis menulis CSV-nya ke sini juga. Path file yang tersimpan dicetak ke stderr, sehingga stdout tetap bersih dan aman di-pipe. Folder ini ada di .gitignore karena isinya data nomor telepon orang.
Ganti lokasinya dengan GTC_RESULTS_DIR. Belum ada rotasi atau penghapusan otomatis jika
foldernya membesar, bersihkan manual.
| Variabel | Fungsi |
|---|---|
GTC_CONFIG_DIR |
Lokasi credentials.json. Default ~/.config/gtc. |
GTC_RESULTS_DIR |
Lokasi keluaran. Default results/ di samping gtc.py. |
GTC_NO_BANNER |
Diisi apa saja untuk menyembunyikan banner dan log startup. |
Klien ini meniru aplikasi Android GetContact 8.4.0. Setiap permintaan:
finalKey milik akun, lalu dikirim sebagai
{"data": "<base64>"}.x-req-signature berisi HMAC-SHA256 dari <timestamp>-<payload mentah> dengan kunci
aplikasi yang tetap.data didekripsi dengan kunci yang sama sebelum di-parse.finalKey sendiri lahir dari pertukaran Diffie-Hellman saat registrasi: klien mengirim kunci
publiknya, server membalas dengan miliknya, dan SHA-256 dari shared secret menjadi kunci AES-nya.
Parameter DH (p = 900719898367, g = 7) sudah tertanam di kode dan terverifikasi.
Dua endpoint dipakai untuk lookup, dan penamaannya menyesatkan: /v2.8/search mengembalikan profil, sementara /v2.8/number-detail mengembalikan daftar tag. Pemetaan ini pernah tertukar dan sekarang sudah diluruskan di api_search().
Registrasi memakai VerifyKit (api.verifykit.com) sebagai penyedia verifikasi, dengan skema HMAC dan AES yang serupa tapi memakai kunci berbeda.
COUNTRY = "id"). Nomor luar negeri harus ditulis lengkap dengan
+kode negara, dan sebagian respons mungkin tidak sesuai.--delay pada batch, dan pakai perintah
captcha bila terlanjur kena.gtc.py harus diperbarui.Alat ini mengakses API privat GetContact dengan menyamar sebagai klien resminya, yang hampir melanggar syarat layanan mereka. Data yang dikembalikan juga data pribadi orang lain. Pakai untuk nomor yang memang berhak Anda periksa, patuhi aturan perlindungan data yang berlaku, dan tanggung sendiri resikonya. Tidak ada afiliasi dengan GetContact dan pihak manapun. #DWYOR