
مجموعة أدوات اختبار الاختراق والتدقيق لتطبيقات أندرويد.
أداة جافا تساعد في اختبار اختراق تطبيقات أندرويد بشكل أسرع وأسهل وأكثر فعالية. يقدم أندروتيكلر العديد من ميزات جمع المعلومات والفحوصات الثابتة والديناميكية التي تغطي معظم جوانب اختبار اختراق تطبيقات أندرويد. كما يقدم العديد من الميزات التي يحتاجها مختبرو الاختراق أثناء اختباراتهم. يتكامل أندروتيكلر أيضًا مع فريدا لتوفير تتبع ومعالجة الدوال. تم نشر الأداة سابقًا تحت اسم تيكلر.
يتطلب أندروتيكلر مضيف لينكس وجهاز أندرويد متجذر متصل بمنفذ USB. لا تقوم الأداة بتثبيت أي شيء على جهاز أندرويد، فهي تنشئ فقط دليلاً باسم Tickler على /sdcard. يعتمد أندروتيكلر على Android SDK لتشغيل الأوامر على الجهاز ونسخ بيانات التطبيق إلى دليل TicklerWorkspace على المضيف لمزيد من التحليل. TicklerWorkspace هو دليل العمل الخاص بأندروتيكلر، ولكل تطبيق دليل فرعي منفصل في TicklerWorkspace يمكن أن يحتوي على ما يلي (اعتمادًا على إجراءات المستخدم):
يوجد دليل libs وملف الإعدادات Tickler.conf في نفس دليل ملف jar. يحدد ملف الإعدادات موقع دليل TicklerDir على المضيف ودليل Tickler على /sdcard لجهاز أندرويد. إذا لم يكن ملف الإعدادات موجودًا أو لم يتم تعيين هذين الدليلين، فسيتم استخدام القيم الافتراضية (Tickler_workspace في الدليل الحالي و /sdcard/Tickler على التوالي). يحتوي دليل Tickler_lib على بعض مكتبات جافا والأدوات الخارجية التي يستخدمها أندروتيكلر مثل apktool و dex2jar.
يعتمد أندروتيكلر بشدة على الأدوات التالية، لذا يجب أن تكون موجودة على جهازك قبل استخدامها:
هناك أدوات أخرى مطلوبة لبعض الميزات، لكن أندروتيكلر يمكنه العمل بدونها:
بناء الأداة من الكود
gradle build
انقل AndroTickler.jar إلى نفس دليل Tickler_lib وملف Tickler.conf (يتم إنشاؤها تلقائيًا في build/libs)
اجعل dex2jar قابلاً للتنفيذ (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh و libs/notJars//dex2jar-2.1/d2j_invoke.sh)
قم بتوصيل جهاز أندرويد الخاص بك مع التطبيق المراد اختباره مثبتًا عليه
ملاحظة: إذا فشل بناء الكود المصدري، يمكنك تنزيل أحدث إصدار مترجم من علامة التبويب الإصدارات
الإصدار الحالي يقوم بما يلي:
java -jar AndroTickler.jar -h
سرد التطبيقات المثبتة على الجهاز:
java -jar AndroTickler.jar -pkgs
البحث عن تطبيق (حزمة) مثبت على الجهاز، بحيث يحتوي اسم الحزمة على مفتاح البحث
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [other options]
أي أمر يحتوي على الخيار -pkg (سواء تم استخدامه مع أي من الخيارات التالية أم لا)، يقوم بالإجراءات التالية إذا لم تكن قد تمت من قبل:
java -jar AndroTickler.jar -pkg <package> -info
يعيد المعلومات التالية:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
يجلب ما يلي من كود جافا الذي تم فك ترجمته للتطبيق:
ليس من المستغرب أن يكون مخرجاته ضخمة عادة، لذلك يُنصح بتوجيه مخرجات الأمر إلى ملف
short يضغط فقط الكود الذي تم فك ترجمته والذي ينتمي إلى المطور. على سبيل المثال، إذا كان للتطبيق اسم حزمة com.notEnaf.myapp، فإن squeeze short يضغط فقط الكود في دليل com/notEnaf.
يضغط الكود فقط في دليل codeLocation. مفيد لتحديد نطاق بحثك أو ضغط الكود المصدري إذا كان متاحًا.
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
يسرد جميع مكونات التطبيق
-exp يعرض المكونات المصدرة فقط
-v يعطي معلومات أكثر تفصيلاً لكل مكون:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
بشكل افتراضي، تقوم جميع أوامر -db بتحديث دليل تخزين بيانات التطبيق على المضيف قبل تشغيل الفحص.
بدون سمة أو e يختبر ما إذا كانت قواعد بيانات التطبيق مشفرة. هذا هو الإجراء الافتراضي في حالة عدم إعطاء أي خيار بعد علامة -db. l يسرد جميع قواعد بيانات التطبيق. قد لا يتم الكشف عن قواعد البيانات المشفرة. d يأخذ تفريغ sqlite لأي من قواعد البيانات غير المشفرة. nu noUpdate: يقوم بتشغيل أي من الخيارات أعلاه دون تحديث دليل بيانات التطبيق على المضيف.
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
ينسخ دليل تخزين بيانات التطبيق (إلى DataDirOld) ثم يطلب من المستخدم القيام بالإجراء الذي يريده والضغط على Enter عند الانتهاء. ثم ينسخ دليل تخزين البيانات مرة أخرى (إلى DataDir) ويقوم بتشغيل diff بينهما لإظهار الملفات التي تم إضافتها أو حذفها أو تعديلها.
d|detailed يقوم بنفس الأمر -diff العادي، كما يعرض بالضبط ما تغير في الملفات النصية وقواعد البيانات غير المشفرة.
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
يبحث عن المفتاح في المواقع التالية:
البحث غير حساس لحالة الأحرف.
يستبدل موقع كود جافا الذي تم فك ترجمته بموقع مخصص.
java -jar AndroTickler.jar -pkg <package> -sd <key>
يبحث في دليل تخزين بيانات التطبيق عن المفتاح المعطى
يقوم بتشغيل مكونات التطبيق، بجميع التوافيق الممكنة من النوايا (intents). على سبيل المثال، إذا كان للنشاط عامل تصفية نية يحتوي على إجراءين محتملين وثلاثة مخططات URI للبيانات، فسيقوم أندروتيكلر بتشغيل هذا النشاط مع جميع التوافيق الممكنة لهذه النية. بالإضافة إلى ذلك، يلتقط أندروتيكلر إضافات النية (intent extras) المذكورة في فئة جافا المقابلة للمكون، ويخصص لها قيمًا وهمية ويضيفها إلى توافيق النية الممكنة. يتم دعم الإضافات من النوع boolean و string و int و float فقط.
إذا تم استخدام الخيار -exp، فسيتم تشغيل المكونات بدون صلاحيات الجذر أو أي أذونات خاصة. إذا لم يتم استخدامه، فسيتم تشغيل المكونات بصلاحيات الجذر. يساعد هذا في اختبار التطبيق في سيناريوهين مختلفين: ضد المهاجمين بصلاحيات عادية أو عالية.
قبل تشغيل المكونات، يقوم أندروتيكلر بطباعة جميع الأوامر التي سيتم تنفيذها. ثم لكل أمر، يقوم بتشغيل المكون، ويطبع الأمر ثم ينتظر المستخدم. وهذا يمنح المستخدم وقتًا كافيًا للقيام بأي فحوصات إضافية بعد تنفيذ الأمر. قبل أن ينتقل المستخدم إلى الأمر التالي، يُعطى خيار التقاط لقطة شاشة للجهاز لتوثيق إثبات المفهوم (PoC).
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
الهدف كما هو موضح مع أمر القائمة، يمكن أن يكون:
إذا لم يتم تحديد قيمة، فالهدف هو جميع ما سبق
[-comp] <اسم_المكون> يحدد مكونًا واحدًا فقط. يمكنك أيضًا استخدام اسم المكون مباشرة بدون علامة -comp. -exp يستخدم أندروتيكلر صلاحيات عادية لتشغيل الأهداف المصدرة فقط. -all الخيار الافتراضي. يستخدم أندروتيكلر صلاحيات الجذر لتشغيل الأهداف المصدرة. -log يلتقط جميع رسائل logcat التي تم إنشاؤها أثناء جلسة التشغيل. يتم حفظ ملف السجل في الدليل الفرعي logs.
يجب تثبيت فريدا على جهاز المضيف. كما يجب إضافة موقع خادم فريدا على جهاز أندرويد إلى ملف Tickler.conf في الإدخال Frida_server_path
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
يعرض الوسائط وقيمة الإرجاع لهذه الدالة (فقط أنواع البيانات الأولية و String)
reuse في حالة خيارات vals و set، يقوم فريدا بإنشاء/تحديث سكريبت فريدا لتلك الوظيفة. يمكنك تعديل السكريبت الذي تم إنشاؤه كما تريد، ثم إذا كنت تريد تشغيله عبر أندروتيكلر، فاستخدم الخيار -reuse حتى لا يتم استبداله.
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
يضبط رقم الوسيطة NumberOfArgToModify إلى newValue (فقط أنواع البيانات الأولية و String). يبدأ NumberOfArgToModify من 0: الوسيطة الأولى --> NumberOfArgToModify = 0، ... إلخ لتعديل قيمة الإرجاع --> اضبط NumberOfArgToModify على ret
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
تشغيل سكريبت فريدا بلغة JS الموجود في scriptPath على المضيف
سرد الفئات المحملة:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
ينشئ نسخة قابلة للتصحيح من التطبيق، يمكن تثبيتها على الجهاز وتصحيحها باستخدام أي أداة خارجية. يأتي أندروتيكلر مع مخزن مفاتيح (keystore) لتوقيع ملف apk القابل للتصحيح، ولكنه يتطلب أداة jarsigner على المضيف.
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
يبني ملف apk من دليل، ويوقعه ويقوم بتثبيته.
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
ينسخ لقطات الخلفية التي التقطها الجهاز (يعمل مع وبدون خيار -pkg) إلى الدليل الفرعي bgSnapshots.
نسخ دليل تخزين البيانات:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
ينسخ دليل تخزين البيانات إلى DataDir dest اسم اختياري للدليل الوجهة، والذي سيكون موجودًا في الدليل الفرعي transfers على أي حال.
نسخ أي ملف / دليل:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
ينسخ الملفات / الأدلة من جهاز أندرويد.
إذا لم يتم إعطاء خيار dest، فسيكون اسم الدليل هو الطابع الزمني للمعاملة.
java -jar AndroTickler.jar [-pkg <package>] -screen
بالنسبة للخيارات التي لا تتطلب خيار -pkg، سيتم حفظ بياناتها في Tickler_Dir/NoPackage
java -jar AndroTickler.jar -pkg <package> -t -act -exp
يقوم بتشغيل الأنشطة المصدرة
java -jar AndroTickler.jar -pkg <package> -t -prov -log
يستعلم من جميع موفري المحتوى ويحفظ رسائل logcat حتى تتوقف الأداة عن التنفيذ
java -jar AndroTickler.jar -pkg <package> -t <component_name>
يقوم بتشغيل المكون، ونوع التشغيل يعتمد على نوع المكون
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
يعلق على الدالة "myMethod" التي تحتوي على وسيطين ويغير قيمة الوسيطة الأولى (args[0]) إلى "newValue"
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
يعلق على الدالة "myMethod" التي تحتوي على وسيطين ويغير قيمة الإرجاع إلى boolean false