simpleelf
v1.0.0
لا يعد ملف ELF قابلاً للتنفيذ فحسب ، بل وسيلة ملائمة للغاية لوصف تخطيط البرنامج في الذاكرة. تتمثل النية الأصلية لهذا المشروع في السماح للفرد بإنشاء ملف ELF الذي يصف رسم خرائط الذاكرة المستخدم لبرنامج مضمن. مفيد بشكل خاص لاستخدامه مع أدوات التحليل الأخرى ، مثل: IDA/Ghidra/etc ... يمكن أن يكون لديهم جميع المعلومات المطلوبة دون الحاجة إلى فتح ملف .bin عادي فقط وتشغيل العديد من البرامج النصية Idapython (لقد سئمت من Load additional binary file... خيار).
طلبات السحب هي بالطبع أكثر من الترحيب؟.
استخدم pip :
python3 -m pip install simpleelfأو استنساخ نفسك وبناء:
git clone [email protected]:doronz88/simpleelf.git
cd simpleelf
python -m pip install -e . -Uالآن يمكنك فقط استيراد Simpleelf والبدء في اللعب معها.
التحليل سهل باستخدام ElfStruct . جربه:
from simpleelf . elf_structs import ElfStructs
ElfStructs ( '<' ). Elf32 . parse ( elf32_buffer ) # outputs a constucts' container
ElfStructs ( '<' ). Elf64 . parse ( elf64_buffer ) # outputs a constucts' container المبنى سهل باستخدام ElfBuilder . جربه:
from simpleelf . elf_builder import ElfBuilder
from simpleelf import elf_consts
# can also be used with ELFCLASS64 to create 64bit layouts
e = ElfBuilder ( elf_consts . ELFCLASS32 )
e . set_endianity ( '<' )
e . set_machine ( elf_consts . EM_ARM )
code = b'CODECODE'
# add a segment
text_address = 0x1234
text_buffer = b'cybercyberbitimbitim' + code
e . add_segment ( text_address , text_buffer ,
elf_consts . PF_R | elf_consts . PF_W | elf_consts . PF_X )
# add a second segment
e . add_segment ( 0x88771122 , b'data in 0x88771122' ,
elf_consts . PF_R | elf_consts . PF_W | elf_consts . PF_X )
# add a code section inside the first segment
code_address = text_address + text_buffer . find ( code ) # point at CODECODE
code_size = len ( code )
e . add_code_section ( code_address , code_size , name = '.text' )
# set entry point
e . set_entry ( code_address )
# add .bss section. not requiring a loaded segment from
# file
bss_address = 0x5678
bss_size = 0x200
e . add_empty_data_section ( bss_address , bss_size , name = '.bss' )
# get raw elf
e . build ()