
اعرض معلومات عن الملفات في صيغ مختلفة وابحث عن الأدوات (gadgets) لبناء سلاسل ROP لمعماريات مختلفة (x86/x86_64, ARM/ARM64, MIPS, PowerPC, SPARC64). لفك التجميع، يستخدم روبر (ropper) إطار Capstone Framework الرائع.
يمكنك استخدام ropper لعرض معلومات حول ملفات ثنائية بتنسيقات ملفات مختلفة، ويمكنك البحث عن أدوات (gadgets) لبناء سلاسل ROP لبنى مختلفة (x86/X86_64، ARM/ARM64، MIPS/MIPS64، PowerPC/PowerPC64، SPARC64). لفك التجميع يستخدم ropper إطار العمل الرائع Capstone Framework.
قم بتثبيت Capstone باستخدام PyPi:
$ sudo pip install capstone
قم بتثبيت filebytes باستخدام PyPi:
$ sudo pip install filebytes
اختياري (ليس ضروريًا لتشغيل ropper، فقط للبحث عن الأدوات):
قم بتثبيت Keystone:
$ sudo pip install keystone-engine
قم بتثبيت وتشغيل Ropper
$ python setup.py install
$ ropper
يمكنك أيضًا تثبيت Ropper باستخدام pip
$ pip install ropper
إذا أردت، يمكنك استخدام Ropper بدون تثبيت
$ ./Ropper.py
إذا كنت لا ترغب في تثبيت filebytes، فإن filebytes هو وحدة فرعية لمستودع ropper. هذا يعني أنك لست بحاجة لتثبيت filebytes و ropper.
$ git clone https://github.com/sashs/ropper.git
$ cd ropper
$ git submodule init
$ git submodule update
$ ./Ropper.py
هذه الميزة لا تزال قيد التطوير! يحتوي Ropper على أمر بحث دلالي، يتيح إمكانية البحث عن الأدوات.
$ ropper --file <afile> --semantic "<any constraint>"
التبعيات الاختيارية التالية مطلوبة لاستخدام البحث الدلالي:
قم بتثبيت pyvex
$ sudo pip install pyvex
قم بتثبيت z3py
$ python scripts/mk_make.py
$ cd build
$ make
$ sudo make install
reg == reg - تعيين سجل لآخر
reg == number - تعيين رقم لسجل
reg == [reg] - تعيين ذاكرة لسجل
reg += number/reg/[reg]
reg -= number/reg/[reg]
reg *= number/reg/[reg]
reg /= number/reg/[reg]
eax==1 !ebx - تعيين eax إلى 1 والبحث عن أدوات لا تغير ebx

usage: Ropper.py [-h] [--help-examples] [-v] [--console]
[-f <file> [<file> ...]] [-r] [-a <arch>]
[--section <section>] [--string [<string>]] [--hex]
[--asm [<asm> [H|S|R] ...]] [--disasm <opcode>]
[--disassemble-address <address:length>] [-i] [-e]
[--imagebase] [-c] [-s] [-S] [--imports] [--symbols]
[--set <option>] [--unset <option>] [-I <imagebase>] [-p]
[-j <reg>] [--stack-pivot] [--inst-count <n bytes>]
[--search <regex>] [--quality <quality>] [--opcode <opcode>]
[--instructions <instructions>] [--type <type>] [--detailed]
[--all] [--cfg-only] [--chain <generator>] [-b <badbytes>]
[--nocolor] [--clear-cache] [--no-load] [--analyse <quality>]
[--semantic constraint]
[--count-of-findings <count of gadgets>] [--single]
يمكنك استخدام ropper لعرض معلومات حول ملفات ثنائية بتنسيقات ملفات مختلفة
ويمكنك البحث عن أدوات لبناء سلاسل ROP لبنى مختلفة
أنواع الملفات المدعومة:
ELF
PE
Mach-O
Raw
البنى المدعومة:
x86 [x86]
x86_64 [x86_64]
MIPS [MIPS, MIPS64]
ARM/Thumb [ARM, ARMTHUMB]
ARM64 [ARM64]
PowerPC [PPC, PPC64]
SPARC [SPARC64]
مولدات سلسلة ROP المتاحة:
execve (execve[=<cmd>], الافتراضي /bin/sh) [Linux x86, x86_64]
mprotect (mprotect=<address>:<size>) [Linux x86, x86_64]
virtualprotect (virtualprotect=<address iat vp>:<size>) [Windows x86]
الخيارات:
-h, --help عرض رسالة المساعدة هذه والخروج
--help-examples طباعة الأمثلة
-v, --version طباعة الإصدار
--console بدء سطر الأوامر التفاعلي
-f <file> [<file> ...], --file <file> [<file> ...]
الملف المطلوب تحميله
-r, --raw تحميل الملف كملف خام
-a <arch>, --arch <arch>
بنية الملف المحمل
--section <section> طباعة بيانات هذا القسم
--string [<string>] البحث عن السلسلة <string> في جميع أقسام البيانات
--hex طباعة الأقسام المحددة بصيغة سداسية عشرية
--asm [<asm> [H|S|R] ...]
سلسلة لتجميعها وتنسيق الإخراج
(H=HEX, S=STRING, R=RAW, الافتراضي: H)
--disasm <opcode> Opcode لفك التجميع (مثال: ffe4, 89c8c3, ...)
--disassemble-address <address:length>
فك تجميع التعليمات عند العنوان <address>
(0x12345678:L3). يمكن تحديد عدد التعليمات لفك التجميع
(0x....:L...)
-i, --info عرض رأس الملف [ELF/PE/Mach-O]
-e عرض نقطة الدخول
--imagebase عرض قاعدة الصورة [ELF/PE/Mach-O]
-c, --dllcharacteristics
عرض خصائص DLL [PE]
-s, --sections عرض أقسام الملف [ELF/PE/Mach-O]
-S, --segments عرض أجزاء الملف [ELF/Mach-O]
--imports عرض الاستيرادات [ELF/PE]
--symbols عرض الرموز [ELF]
--set <option> تعيين خيارات. الخيارات المتاحة: aslr nx
--unset <option> إلغاء تعيين خيارات. الخيارات المتاحة: aslr nx
-I <imagebase> استخدام قاعدة الصورة هذه للأدوات
-p, --ppr البحث عن تعليمات 'pop reg; pop reg; ret'
[فقط x86/x86_64]
-j <reg>, --jmp <reg>
البحث عن تعليمات 'jmp reg' (-j reg[,reg...])
[فقط x86/x86_64]
--stack-pivot طباعة جميع أدوات stack pivot
--inst-count <n bytes>
تحديد أقصى عدد من التعليمات في الأداة
(الافتراضي: 6)
--search <regex> البحث عن الأدوات
--quality <quality> جودة الأدوات التي يتم العثور عليها عن طريق البحث (1 =
الأفضل)
--opcode <opcode> البحث عن opcodes (مثال: ffe4 أو ffe? أو ff??)
--instructions <instructions>
البحث عن تعليمات (مثال: "jmp esp", "pop eax;
ret")
--type <type> تعيين نوع الأدوات [rop, jop, sys, all]
(الافتراضي: all)
--detailed طباعة الأدوات بتفاصيل أكثر
--all عدم إزالة الأدوات المكررة
--cfg-only تصفية الأدوات التي تفشل في فحص Microsoft CFG.
فقط لملفات PE المترجمة مع تمكين فحص CFG (تحقق من DllCharachteristics) [PE]
--chain <generator> توليد سلسلة ROP [generator parameter=value[
parameter=value]]
-b <badbytes>, --badbytes <badbytes>
تعيين البايتات التي لا ينبغي أن تكون موجودة في الأدوات
--nocolor تعطيل الإخراج الملون
--clear-cache مسح الذاكرة المخبأة
--no-load عدم تحميل الأدوات تلقائيًا عند بدء وحدة التحكم (--console)
--analyse <quality> يستخدم فقط لتطبيق البحث الدلالي
--semantic constraint
البحث الدلالي عن الأدوات
--count-of-findings <count of gadgets>
أقصى عدد من الأدوات التي ستتم طباعتها باستخدام البحث الدلالي (0 = غير محدد، الافتراضي: 5)
--single لا يتم استخدام عمليات متعددة لمسح الأدوات
أمثلة على الاستخدام:
[عام]
./Ropper.py
./Ropper.py --file /bin/ls --console