あなたの代理店に尋ねる
アプリは変更されたログインコードを示しています。 私たちは見つけたい 何がそれを変えるのですか そしてその行動を再現します。
REA で aegis-v3.4.3.apk を調べてください。6 桁のログインコードの生成方法と、30 秒ごとに変わる理由を説明し、時刻を変更できる小さなデモを作ってください。
ダウンロードしたAPKのプロンプトの例で、REAのAndroid分析が構成されています。 APKと解析セットアップを入手↓
コードジェネレータを試してみてください
アプリは時間を次のようにグループ化します 30秒のブロック。 ブロック番号とアカウントキーを組み合わせてコードを生成します。 同じキーとブロックは同じコードを生成します。
時計を60秒に移動する
- 時間 秒私達の調節可能な例の時計
-
30秒ブロックブロック
floor(59 / 30)
30-59秒 - 生成されたコードアカウントキー+ブロック→6桁
時59秒): 287082. 60秒で: 359152. 1つのブロック内を移動すると、コードは変更されません。
REAでコードを見つける
-
APKを3つのクラスに絞り込みます
エージェント→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.TotpAuthenticatorImporterTotpInfo他の2つは、プログレスバーとインポートされたアカウントに関するものです。 TOTPは、時間ベースのワンタイムパスワードを意味します。 -
ジェネレータをアプリのディスプレイに接続します
エージェント→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→エージェント*メソッドと呼び出し元TotpInfo methods: getOtp() · overload 0 getOtp(long) · overload 1 OtpInfo.getOtp callers: ui.views.EntryHolder.getOtp ui.MainActivity.copyEntryCodeREAはタイムスタンプオーバーロードを識別し、基本メソッドの呼び出し元を検索します。 検査
EntryHolder.getOtp次に、表示呼び出しを表示しますTotpInfo.getOtp(timestamp).
要求には、入力パスが短縮されて表示されます。 結果クラス名は共通を省略します com.beemdevelopment.aegis プレフィクス...
計算を読む
REAを返します クロック変換、デフォルト設定、および生成方法。 コンストラクターは30秒の間隔と6桁を設定します。timestampメソッドは秒をブロック番号に変換します。
// 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)
時間はブロックを選択します。 秒30から59までのすべてのブロックを与えます1. 60秒で、ブロックは2になります。
重要なことも重要です。 ジェネレータは、アカウントキーとブロックを組み合わせます。 別のキーを持つアカウントは、同時に別のコードを表示できます。
六桁を維持します。 1,000,000で除算した後の残りの部分は、必要に応じてゼロで埋められるため、コードは0で始めることができます。
いくつかの検査方法からの抜粋、表示のためのラインラッピング。 右のパネルは説明的な要約です。 AegisコードはGPL-3.0です。
発電機の中
リリースされたAPKは generateOTP で kotlin.ExceptionsKt. REAはからの呼び出しに従います TotpInfo 元のソースはヘルパーを呼び出します 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);
}
最後のハッシュバイトが位置を選択します。 その位置にある4バイトは、正の31ビット数を提供します。フォーマットすると、要求された桁数に減少します。 コンストラクタの最後の引数は、コンパイルによって導入されたコード書式分岐を選択します。
再構築を確認する
選択したREA-返されたJavaメソッドを小さなテストプログラムで組み立てました。 彼らの出力は、上の独立した再構成に一致しました 133件のテストケース、タイムブロック境界とゼロで始まるコードを含みます。
| 時間例 | ブロック | 6桁のコード |
|---|---|---|
| 30秒 | 1 | 287082 |
| 59秒 | 1 | 287082 |
| 60秒 | 2 | 359152 |
| 1,111,111,109秒 | 37,037,036 | 081804 |
ジェネレータは、公開されている六つのSHA-1リファレンスケースにも一致します 6238. それらに対するブラウザの実装を確認してください:
参照ケースは8桁を使用します。 このチェックでは、6桁の結果も確認されます。
検証は、抽出されたJavaメソッドと新しいデモを実行します。 Android APKは静的に検査されました。
APKを自分で調べてください
REAのセットアップ macOSまたはLinuxで、これら2つのファイルを同じフォルダーにダウンロードします。 Windowsでは、WSLなどのLinux環境を使用します。
Android analysisには完全なJDK17以降が必要です。 で選択します。 JAVA_HOME または PATH. このケースはJDK21を使用していました。
プロバイダーファイルでREAをポイントし、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
エージェントは、上記のプロンプトを使用してREAのCLIを続行できます。 MCPのために、加えて下さい REA_JADX_MCP_JAR REAサーバーの環境に接続し、再接続します。
次の質問: アカウントが8桁または異なる時間間隔を使用するとどうなりますか?
ソース
2026年10月9日にREA6.1.0で検査されました。 逆コンパイルされた抜粋はAegisにクレジットされています;図,読みやすい要約とブラウザの再構成は、新しい教材です.