Hỏi agent của bạn
Ứng dụng hiển thị mã đăng nhập thay đổi. Chúng tôi muốn tìm điều gì làm cho nó thay đổi và tái tạo hành vi đó.
Dùng REA phân tích aegis-v3.4.3.apk. Giải thích cách tạo mã đăng nhập gồm sáu chữ số và vì sao mã thay đổi mỗi 30 giây. Tạo một bản demo nhỏ cho phép tôi thay đổi thời gian.
Một lời nhắc ví dụ cho APK đã tải xuống , VỚI PHÂN tích Android CỦA REA được định cấu hình. Nhận APK và thiết lập phân tích nhúng vào trang web hoặc blog của bạn ↓
Hãy thử trình tạo mã
Các nhóm ứng dụng thời gian vào Khối 30 giây. Nó kết hợp số khối với khóa tài khoản để tạo mã. Cùng một khóa và khối tạo ra cùng một mã.
Di chuyển đồng hồ qua 60 giây
- Thời gian giâyĐồng hồ ví dụ có thể điều chỉnh của chúng tôi
-
Khối 30 giâyKhối
floor(59 / 30)
30-59 giây - Mã được tạoKhóa tài khoản + khối → sáu chữ số
Lúc 59 giây: 287082. Lúc 60 giây: 359152. Di chuyển trong một khối không thay đổi mã.
Tìm mã VỚI REA
-
Thu HẸP APK đến ba lớp
Agent → REAinspect_android_package {"path": "aegis-v3.4.3.apk"} search_android_classes {"path": "aegis-v3.4.3.apk", "query": "Totp"}REA → agent · kết quả đã chọnPackage: com.beemdevelopment.aegis Version: 3.4.3 Classes: 3,077 Three matches: otp.TotpInfo ui.views.TotpProgressBar importers.TotpAuthenticatorImporterTotpInfolà ứng cử viên tính toán; hai người còn lại liên quan đến thanh tiến trình và tài khoản nhập khẩu. TOTP có nghĩa là mật khẩu một lần dựa trên thời gian. -
Kết nối máy phát điện với màn hình của ứng dụng
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 → agent · phương pháp và hàm gọiTotpInfo methods: getOtp() · overload 0 getOtp(long) · overload 1 OtpInfo.getOtp callers: ui.views.EntryHolder.getOtp ui.MainActivity.copyEntryCodeREA xác định quá tải dấu thời gian và tìm hàm gọi của phương thức cơ sở. Kiểm tra
EntryHolder.getOtpsau đó hiển thị cuộc gọi hiển thịTotpInfo.getOtp(timestamp).
Yêu cầu hiển thị một đường dẫn đầu vào rút gọn. Tên lớp kết quả bỏ qua điểm chung com.beemdevelopment.aegis tiền tố.
Đọc tính toán
REA trả về chuyển đổi đồng hồ, cài đặt mặc định và phương pháp tạo. Các hàm tạo đặt khoảng thời gian 30 giây và sáu chữ số; phương thức dấu thời gian biến giây thành số khối.
// 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)
Thời gian chọn khối. Giây 30 đến 59 tất cả cho khối 1. Ở 60 giây, khối trở thành 2.
Các vấn đề chính quá. Trình tạo kết hợp khóa tài khoản với khối. Một tài khoản có khóa khác có thể hiển thị một mã khác cùng một lúc.
Giữ sáu chữ số. Phần còn lại sau khi chia cho 1.000.000 được đệm bằng số không khi cần, vì vậy mã có thể bắt đầu bằng 0.
Trích đoạn từ một số phương pháp được kiểm tra, với gói dòng để hiển thị. Bảng điều khiển bên phải là một bản tóm tắt giải thích. MÃ Aegis LÀ GPL-3.0.
Bên trong máy phát điện
APK phát hành đặt generateOTP trong kotlin.ExceptionsKt. REA thực hiện cuộc gọi từ TotpInfo và trả về cơ thể này; nguồn gốc gọi người trợ giúp 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 băm cuối cùng chọn một vị trí. Bốn byte ở vị trí đó cung cấp số 31 bit dương; định dạng giảm nó xuống số chữ số được yêu cầu. Đối số cuối cùng của hàm tạo chọn nhánh định dạng mã được giới thiệu bằng cách biên dịch.
Kiểm tra việc tái thiết
Chúng tôi đã lắp ráp CÁC phương thức Java được chọn REA-returned trong một chương trình thử nghiệm nhỏ. Đầu ra của họ phù hợp với một tái thiết độc lập trên 133 trường hợp thử nghiệm, bao gồm ranh giới khối thời gian và mã bắt đầu bằng không.
| Thời gian ví dụ | Khối | Mã sáu chữ số |
|---|---|---|
| 30 giây | 1 | 287082 |
| 59 giây | 1 | 287082 |
| 60 giây | 2 | 359152 |
| 1,111,111,109 giây | 37,037,036 | 081804 |
Trình tạo cũng khớp với sáu trường hợp tham chiếu SHA-1 đã xuất bản trong RFC 6238. Kiểm tra việc triển khai trình duyệt chống lại chúng:
Các trường hợp tham chiếu sử dụng tám chữ số. Kiểm tra cũng xác minh kết quả sáu chữ số của họ.
Xác minh chạy các phương thức Java được trích xuất và bản demo mới. Android APK đã được kiểm tra tĩnh.
Tự kiểm tra APK
Thiết LẬP REA TRÊN macOS hoặc Linux, sau đó tải hai tệp này vào cùng một thư mục. TRÊN Windows, sử dụng MÔI trường Linux như WSL.
Phân tích Android cần MỘT jdk 17 đầy đủ hoặc mới hơn. Chọn nó với JAVA_HOME hoặc PATH. Trường hợp này sử DỤNG JDK 21.
Điểm REA tại tệp nhà cung cấp và kiểm TRA 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
Agent của bạn có thể tiếp tục THÔNG qua REA 'S CLI bằng cách sử dụng lời nhắc ở trên. ĐỐI VỚI MCP, thêm REA_JADX_MCP_JAR ĐẾN MÔI trường CỦA MÁY chủ REA và kết nối lại nó.
Một câu hỏi tiếp theo: điều gì xảy ra khi một tài khoản sử dụng tám chữ số hoặc một khoảng thời gian khác nhau?
Nguồn
- PHÁT HÀNH CHÍNH THỨC Aegis 3.4.3 · Cam kết nguồn phù hợp · Giấy phép GPL-3.0
- Rfc 6238 trường hợp tham khảo · Dữ liệu thử nghiệm Demo
KIỂM tra VỚI REA 6.1.0 vào ngày 9 tháng 10 năm 2026. Các đoạn trích dịch ngược được ghi có VÀO Aegis ; sơ đồ, tóm tắt có thể đọc được và tái tạo trình duyệt là tài liệu giảng dạy mới.