دراسة حالة · Aegis الموثق

كيف يمكن للمصادق
إنشاء رمز تسجيل الدخول?

يتغير الرمز المكون من ستة أرقام كل 30 ثانية. استخدام REA للعثور على الحساب في Android APK، ثم إعادة بنائه مع ساعة يمكنك التحكم.

Aegis 3.4.3 · أندرويد * الإصدار الرسمي APK * 6.9 ميغابايت

عرض Aegis على GitHub

من APK إلى رمز يمكنك إعادة إنتاجه

  1. 01 * حدد موقع الميزة3 ، 077 الطبقات generating طرق توليدREA يبحث في الحزمة ويتتبع التعليمات البرمجية المستخدمة من قبل إجراءات العرض والنسخ.
  2. 02 * قراءة الحسابالوقت + مفتاح الحساب - ستة أرقامREA إرجاع الأساليب والافتراضات. يشرح الوكيل كيف يتناسبون معا.
  3. 03 * إعادة البناء والتحققتغيير الساعة. مشاهدة رمز.يستنسخ العرض التوضيحي الجديد للمتصفح القاعدة ويتحقق منها مقابل الحالات المرجعية العامة.

اسأل وكيلك

يعرض التطبيق رمز تسجيل دخول متغير. نريد أن نجد ما الذي يجعلها تتغير وإعادة إنتاج هذا السلوك.

مساعدك البرمجي

استخدم REA لتحليل aegis-v3.4.3.apk. اشرح كيف يُنشأ رمز تسجيل الدخول المكوّن من ستة أرقام ولماذا يتغير كل 30 ثانية. أنشئ عرضًا صغيرًا أستطيع فيه تغيير الوقت.

هذا طلب نموذجي لتحليل ملف APK الذي نزّلته. اضبط تحليل Android في REA أولًا. تنزيل APK وإعداد التحليل ↓

جرب مولد الكود

يقسّم التطبيق الوقت إلى فترات من 30 ثانية. يجمع رقم الفترة مع مفتاح الحساب لإنشاء الرمز. يعطي المفتاح نفسه والفترة نفسها الرمز نفسه.

حرك الساعة عبر 60 ثانية

  1. الوقت59 ثوانيلدينا مثال قابل للتعديل على مدار الساعة
  2. كتلة 30 ثانيةبلوك 1floor(59 / 30)
    30-59 ثانية
  3. كود تم إنشاؤه287082مفتاح الحساب + كتلة - ستة أرقام

في 59 ثانية: 287082. في 60 ثانية: 359152. الانتقال داخل كتلة واحدة يترك الرمز دون تغيير.

المفتاح ثابت ، عام رك 6238 بيانات الاختبار. يقوم العرض التوضيحي بتنفيذ الحساب المسترد من APK.

العثور على رمز مع REA

  1. تضييق APK إلى ثلاث فئات

    وكيل → REA
    inspect_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.TotpAuthenticatorImporter

    TotpInfo هو مرشح الحساب ؛ يتعلق الاثنان الآخران بشريط التقدم والحسابات المستوردة. TOTP تعني كلمة مرور لمرة واحدة تستند إلى الوقت.

  2. قم بتوصيل المولد بشاشة التطبيق

    وكيل → REA
    inspect_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.copyEntryCode

    REA يحدد الحمل الزائد للطابع الزمني ويجد الدوال المستدعية بالطريقة الأساسية. التفتيش EntryHolder.getOtp ثم يظهر استدعاء العرض TotpInfo.getOtp(timestamp).

تظهر الطلبات مسار إدخال مختصر. أسماء فئة النتيجة حذف المشترك com.beemdevelopment.aegis بادئة.

قراءة الحساب

REA المرتجعات تحويل الساعة والإعدادات الافتراضية وطرق التوليد. قام المنشئون بتعيين فاصل زمني مدته 30 ثانية وستة أرقام ؛ تحول طريقة الطابع الزمني الثواني إلى رقم كتلة.

REA * جافا مفككة مختارة
// 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 الرمز هو غل-3.0.

داخل المولد

المفرج عنهم APK يضع generateOTP في kotlin.ExceptionsKt. REA يتبع الاستدعاء دالة من TotpInfo ويعيد هذا الجسم ؛ المصدر الأصلي يدعو المساعد HOTP.

REA * جينيراتوتب ، كامل الجسم
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);
}

يحدد بايت التجزئة الأخير موضعا. توفر أربعة بايت في هذا الموضع رقما موجبا 31 بت ؛ التنسيق يقللها إلى العدد المطلوب من الأرقام. تحدد الوسيطة الأخيرة للمنشئ فرع تنسيق التعليمات البرمجية الذي تم تقديمه بواسطة التجميع.

قارن مع مصدر الإصدار المطابق.

تحقق من إعادة الإعمار

قمنا بتجميع المحدد REA- عاد أساليب جافا في برنامج اختبار صغير. تطابق إنتاجهم مع إعادة بناء مستقلة على 133 حالة اختبار، بما في ذلك حدود كتلة الوقت والرموز التي تبدأ بالصفر.

مثال الوقت بلوك رمز مكون من ستة أرقام
30 ثانية 1 287082
59 ثانية 1 287082
60 ثانية 2 359152
1,111,111,109 ثواني 37,037,036 081804

يتطابق المولد أيضا مع الستة المنشورة SHA-1 الحالات المرجعية في رك 6238. تحقق من تنفيذ المتصفح ضدهم:

اقرأ حساب العرض التوضيحي

تستخدم الحالات المرجعية ثمانية أرقام. يتحقق الشيك أيضا من نتائجهم المكونة من ستة أرقام.

يعمل التحقق استخراج أساليب جافا والتجريبي الجديد. Android APK تم تفتيشه بشكل ثابت.

فحص APK نفسك

إعداد REA على macOS أو Linux، ثم قم بتنزيل هذين الملفين في نفس المجلد. على Windows، استخدم أ Linux البيئة مثل وسل.

تحليل Android يحتاج جدك الكامل 17 أو في وقت لاحق. حدده مع JAVA_HOME أو PATH. هذه الحالة تستخدم جدك 21.

نقطة REA في ملف الموفر وفحص APK:

macOS / Linux
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 بيئة الخادم وإعادة توصيله.

السؤال التالي: ماذا يحدث عندما يستخدم الحساب ثمانية أرقام أو فاصل زمني مختلف?

المصادر

تفتيشها مع REA 6.1.0 في 9 أكتوبر 2026. يتم إضافة مقتطفات غير مجمعة إلى Aegis; الرسم التخطيطي والملخص المقروء وإعادة بناء المتصفح هي مواد تعليمية جديدة.

أعلى