
إطار عمل Redexer للتجهيز الثنائي لرمز Dalvik البايت
Redexer هي أداة إعادة هندسة تتعامل مع ثنائيات تطبيقات Android. هذه الأداة قادرة على تحليل ملف DEX إلى بنية بيانات في الذاكرة؛ واستنتاج المعاملات التي يستخدم بها التطبيق أذونات معينة (نسمي هذه الميزة RefineDroid)؛ وتعديل وإعادة تحويل تلك البنية لإنتاج ملف DEX ناتج (نسمي هذه الميزات Dr. Android، والتي تعني إعادة كتابة Dalvik لنظام Android).
تم اختبار هذه الأداة باستخدام OCaml 4.09.0 و Ruby 1.8.6(7)، لذا تحتاج إلى تثبيتهما (أو إصدارات أعلى).
للتعامل مع توقيع SHA-1 (تجزئة) في تنسيق DEX، نستخدم مكتبة OCaml SHA عبر ocamlfind/findlib، وهو مدير مكتبات OCaml. أسهل طريقة لتثبيت كليهما هي استخدام OPAM، مدير حزم OCaml، الذي يحتوي على كلا الحزمتين—OPAM ocamlfind و OPAM sha.
يمكنك أيضًا بناء و/أو تثبيت كليهما مباشرة. إذا كنت تستخدم جهاز لينكس، يمكنك العثور بسهولة على التوزيعات.
إذا لم يكن الأمر كذلك، على سبيل المثال باستخدام Mac، فستحتاج إلى بنائه بنفسك. يمكنك العثور على أكواد المصدر الأصلية هنا. قم ببنائه عن طريق تشغيل make، واربط الدليل الناتج في دليل site-lib الجذر لـ ocamlfind؛ أو sudo make install.
إذا كنت تستخدم جهاز كمبيوتر، فستحتاج إلى تثبيت ocamlfind/findlib و FlexDLL أولاً. يرجى التأكد من تعيين متغيرات البيئة بشكل صحيح كما يلي:
OCAMLLIB=C:\OCaml\lib
CAML_LD_LIBRARY_PATH=%OCAMLLIB%\stublibs
FLEXLINKFLAGS=-L%MinGW%\lib -L%MinGW%\lib\gcc\mingw32\N.N.N
حزم OPAM :
Android SDK (أو المصادر)
لفك وإعادة تعبئة ملفات apk، نستخدم apktool، وهي أداة إعادة هندسة مفتوحة المصدر لـ APK. نظرًا لأنها تستخدم aapt، أداة تعبئة أصول Android، فأنت بحاجة إلى تثبيت Android SDK أو المصادر. بالإضافة إلى ذلك، نستخدم zipalign، والتي تأتي أيضًا من Android SDK، لتحسين التطبيقات المعاد كتابتها.
يمكنك تعيين المسارات إلى أدوات Android الأساسية عن طريق إضافة ما يلي إلى ملف التعريف الخاص بك:
ANDROID_HOME=$HOME/android-sdk # المسار الخاص بك هنا!
export ANDROID_HOME
PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools/19.0.0 # رقم الإصدار المثبت
export PATH
النصوص الرئيسية مكتوبة بلغة Ruby وتتطلب RubyGems، مدير حزم Ruby، و Nokogiri، مكتبة XML لمعالجة ملفات البيان.
إذا كنت ترغب في رؤية الرسوم البيانية (مثل رسم بياني للاستدعاءات، رسم بياني لتدفق التحكم، شجرة الهيمنة، إلخ)، فستحتاج إلى تثبيت graphviz dot.
لبناء redexer، فقط استخدم make! يمكنك رؤية ملف redexer الثنائي في المستوى الأعلى.
$ make (clean)
قبل استخدام الأداة، يقع على عاتق المستخدم تثبيت أحدث ملف منصة لـ apktool. على سبيل المثال، تحتاج إلى القيام بما يلي
$ java -jar tools/apktool.jar if [ملف المنصة المناسب]
يمكنك أيضًا إنشاء مستندات API بتنسيق html.
$ make api
يمكنك رؤية جميع الخيارات التي توفرها الأداة:
$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
على غرار dexdump في Android SDK، يتيح لك redexer عرض البنية الداخلية لملف dex المحدد بتنسيق YAML.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd unparse [--to blah.yml]
يقوم هذا الخيار بتفريغ التعليمات لطريقة محددة.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
هذه الميزة لاختبار وحدات التحليل والتفريغ في redexer. من المحتمل أن تنشئ ملف dex مطابقًا.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd id [--to blah.dex]
يمكنك أيضًا رؤية إحصائيات أساسية حول ملف dex، مثل عدد التعليمات.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
يقوم هذا الخيار بطباعة جميع أسماء الفئات المعرفة في ملف dex.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes
قد يكون مفيدًا للبحث عن مكتبات طرف ثالث محددة، على سبيل المثال:
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes | egrep 'apache'
يقوم هذا الخيار بطباعة استخدام واجهة برمجة التطبيقات في ملف dex.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api [--sdk android.]
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api --sdk com.facebook.
ألست فضوليًا لمعرفة مدى ندرة استخدام بعض رموز العمليات في bytecodes Dalvik؟ سيعرض لك الرسم البياني التكراري لجميع رموز العمليات، أو يمكنك البحث عن مدى تكرار استخدام رمز عملية معين في التطبيق المحدد.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd opstat [--op opcode1,opcode2,...]
على سبيل المثال:
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat --op div-int/lit16,nop
يقوم هذا الخيار بإجراء تحليل حل النية القائم على الانتشار، وطباعة التحولات بين فئات النشاط.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
يقوم هذا الخيار بإنشاء ملف pdf يصور رسمًا بيانيًا للاستدعاءات للملف المحدد. إذا لم تحدد اسم pdf، فسيتم استخدام cg.pdf.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cg [--to blah.pdf] [--no-pdf]
يقوم هذا الخيار بإنشاء ملف pdf يظهر رسمًا بيانيًا لتدفق التحكم للطريقة المحددة. ألحق اسم الطريقة باسم الفئة بنقطة: class_name.method_name
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cfg --mtd cls.mtd [--to blah.pdf] [--no-pdf]
هذا الخيار مشابه للميزة أعلاه، باستثناء أنه يصور شجرة الهيمنة (المنشورة).
$ ruby scripts/cmd.rb target.(apk|dex) --cmd (p)dom --mtd cls.mtd [--to blah.pdf] [--no-pdf]
يقوم هذا الخيار بإجراء تحليل تدفق بيانات خلفي كلاسيكي.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd live --mtd cls.mtd
يقوم هذا الخيار بإجراء تحليل تدفق بيانات أمامي كلاسيكي.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd const --mtd cls.mtd
يقوم هذا الخيار بإجراء تحليل تدفق بيانات أمامي كلاسيكي.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd
يقوم هذا الخيار بإيجاد تبعيات الفئة.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dependants --mtd cls.mtd
يقوم هذا الخيار بطباعة اسم نشاط الإطلاق لملف apk المحدد.
$ ruby scripts/cmd.rb target.apk --cmd launcher
يتيح لك هذا الخيار معرفة المكونات المكشوفة للخارج.
$ ruby scripts/cmd.rb target.apk --cmd exported
تقوم هذه الخيارات بطباعة المكونات الأساسية لنظام Android المعلنة في البيان.
$ ruby scripts/cmd.rb target.apk --cmd [activity | service | provider | receiver]