Tanyakan pada agen Anda
Aplikasi ini menampilkan kode login yang berubah. Kami ingin menemukan apa yang membuatnya berubah dan mereproduksi perilaku itu.
Analisis aegis-v3.4.3.apk dengan REA. Jelaskan cara kode login enam digit dibuat dan mengapa berubah setiap 30 detik. Buat demo kecil yang memungkinkan saya mengubah waktu.
Contoh prompt untuk APK yang diunduh, dengan analisis Android REA dikonfigurasi. Dapatkan APK dan pengaturan analisis ↓
Coba pembuat kode
Aplikasi mengelompokkan waktu menjadi blok 30 detik. Ini menggabungkan nomor blok dengan kunci akun untuk menghasilkan kode. Kunci dan blok yang sama menghasilkan kode yang sama.
Pindahkan jam melintasi 60 detik
- Waktu detikJam contoh kami yang dapat disesuaikan
-
blok 30 detikBlok
floor(59 / 30)
30-59 detik - Kode yang dihasilkanKunci akun + blok →
Pada 59 detik: 287082. Pada 60 detik: 359152. Bergerak dalam satu blok membuat kode tidak berubah.
Temukan kodenya dengan REA
-
Persempit APK menjadi tiga kelas
Agent → REAinspect_android_package {"path": "aegis-v3.4.3.apk"} search_android_classes {"path": "aegis-v3.4.3.apk", "query": "Totp"}REA →Package: com.beemdevelopment.aegis Version: 3.4.3 Classes: 3,077 Three matches: otp.TotpInfo ui.views.TotpProgressBar importers.TotpAuthenticatorImporterTotpInfoadalah kandidat perhitungan; dua lainnya menyangkut bilah kemajuan dan akun yang diimpor. TOTP berarti kata sandi satu kali berbasis waktu. -
Hubungkan generator ke tampilan aplikasi
Agent → REAinspect_android_class {"path": "aegis-v3.4.3.apk", "class_name": "com.beemdevelopment.aegis.otp.TotpInfo"} trace_android_references {"path": "aegis-v3.4.3.apk", "class_name": "com.beemdevelopment.aegis.otp.OtpInfo", "method_name": "getOtp"}REA → agen * metode dan fungsi pemanggilTotpInfo methods: getOtp() · overload 0 getOtp(long) · overload 1 OtpInfo.getOtp callers: ui.views.EntryHolder.getOtp ui.MainActivity.copyEntryCodeREA mengidentifikasi kelebihan stempel waktu dan menemukan fungsi pemanggil metode dasar. Memeriksa
EntryHolder.getOtpkemudian menampilkan panggilan tampilanTotpInfo.getOtp(timestamp).
Permintaan menunjukkan jalur input yang dipersingkat. Hasil nama kelas menghilangkan yang umum com.beemdevelopment.aegis awalan.
Baca perhitungannya
REA kembali konversi jam, pengaturan default, dan metode pembangkitan. Konstruktor menetapkan interval 30 detik dan enam digit; metode stempel waktu mengubah detik menjadi nomor blok.
// TotpInfo defaults and clock
setPeriod(30);
getOtp(System.currentTimeMillis() / 1000);
// OtpInfo default algorithm and digits
this(bArr, "SHA1", 6);
// Block passed to the generator
(long) Math.floor(j / ((double) this._period))
// generateOTP → getHash
byte[] hash = getHash(bArr, str, j);
// getHash: account key + encoded block
Mac mac = Mac.getInstance(str);
mac.init(secretKeySpec);
return mac.doFinal(bArrArray);
// OTP.toString, case 0
this._code % ((int) Math.pow(10.0d, i))
// Keep leading zeroes
while (sb.length() < i) {
sb.insert(0, "0");
}
// Group time into 30-second blocks
seconds = current_time_ms / 1000
block = floor(seconds / 30)
// Generate a number from the key and block
hash = HMAC_SHA1(account_key,
big_endian_8_bytes(block))
number = select_31_bits(hash)
// Format the default six-digit code
code = number % 1_000_000
code = pad_with_zeroes(code, 6)
Waktu memilih blok. Detik 30 hingga 59 semuanya memberikan blok 1. Pada 60 detik, blok menjadi 2.
Kuncinya juga penting. Generator menggabungkan kunci akun dengan blok. Akun dengan kunci yang berbeda dapat menampilkan kode yang berbeda secara bersamaan.
Simpan enam digit. Sisanya setelah pembagian dengan 1.000.000 diisi dengan angka nol bila diperlukan, sehingga kode dapat dimulai dengan 0.
Kutipan dari beberapa metode yang diinspeksi, dengan pembungkusan garis untuk tampilan. Panel kanan adalah ringkasan penjelasan. Kode Aegis adalah GPL-3.0.
Di dalam generator
APK yang dirilis menempatkan generateOTP dalam kotlin.ExceptionsKt. REA mengikuti panggilan dari TotpInfo dan mengembalikan badan ini; sumber aslinya memanggil helper HOTP.
public static OTP generateOTP(byte[] bArr, String str,
int i, long j)
throws NoSuchAlgorithmException, InvalidKeyException {
byte[] hash = getHash(bArr, str, j);
int i2 = hash[hash.length - 1] & 15;
return new OTP(
(hash[i2 + 3] & 255)
| ((hash[i2] & 127) << 24)
| ((hash[i2 + 1] & 255) << 16)
| ((hash[i2 + 2] & 255) << 8), i, 0);
}
Byte hash terakhir memilih posisi. Empat byte pada posisi itu memberikan angka 31-bit positif; pemformatan menguranginya menjadi jumlah digit yang diminta. Argumen terakhir konstruktor memilih cabang pemformatan kode yang diperkenalkan oleh kompilasi.
Periksa rekonstruksi
Kami mengumpulkan metode Java yang dikembalikan REA yang dipilih dalam program pengujian kecil. Hasil mereka cocok dengan rekonstruksi independen pada 133 kasus uji, termasuk batas blok waktu dan kode yang dimulai dengan nol.
| Contoh waktu | Blok | Kode enam digit |
|---|---|---|
| 30 detik | 1 | 287082 |
| 59 detik | 1 | 287082 |
| 60 detik | 2 | 359152 |
| 1.111.111.109 detik | 37,037,036 | 081804 |
Generator juga cocok dengan enam kasus referensi SHA-1 yang diterbitkan di RFC 6238. Periksa implementasi browser terhadap mereka:
Kasus referensi menggunakan delapan digit. Cek tersebut juga memverifikasi hasil enam digit mereka.
Verifikasi menjalankan metode Java yang diekstraksi dan demo baru. Android APK diperiksa secara statis.
Periksa sendiri APK
Siapkan REA di macOS atau Linux, lalu unduh kedua file ini ke dalam folder yang sama. Pada Windows, gunakan lingkungan Linux seperti WSL.
Analisis Android membutuhkan JDK 17 lengkap atau lebih baru. Pilih dengan JAVA_HOME atau PATH. Kasus ini menggunakan JDK 21.
Arahkan REA ke file penyedia dan periksa APK :
REA_JADX_MCP_JAR="$PWD/jadx-headless-mcp-0.7.1-all.jar" \
npx rea-agents@latest inspect-android-package \
./aegis-v3.4.3.apk --format json --full-output
Agen Anda dapat melanjutkan melalui REA CLI menggunakan perintah di atas. Untuk MCP, tambahkan REA_JADX_MCP_JAR ke lingkungan server REA dan sambungkan kembali.
Pertanyaan selanjutnya: apa yang terjadi jika akun menggunakan delapan digit atau interval waktu yang berbeda?
Sumber
- Rilis resmi Aegis 3.4.3 · Komit sumber yang cocok · Lisensi GPL-3.0
- Kasus referensi RFC 6238 · Data uji demo
Diinspeksi dengan REA 6.1.0 pada 9 Oktober 2026. Kutipan yang didekompilasi dikreditkan ke Aegis; diagram, ringkasan yang dapat dibaca, dan rekonstruksi browser adalah bahan ajar baru.