Le fichier ELF est non seulement un exécutable, mais un moyen très pratique de décrire la disposition d'un programme en mémoire. L'intention initiale de ce projet est de permettre à un individu de créer un fichier ELF qui décrit le mappage de mémoire utilisé pour un programme intégré. Particulièrement utile pour utiliser avec d'autres outils d'analyse, tels que: ida / ghidra / etc ... Ils peuvent avoir toutes ses informations souhaitées sans avoir besoin d'ouvrir un fichier .bin ordinaire et d'exécuter plusieurs scripts iDapython (j'en ai assez de Load additional binary file... l'option).
Les demandes de traction sont bien sûr plus que les bienvenues ?.
Utiliser pip :
python3 -m pip install simpleelfOu clonez-vous et construisez:
git clone [email protected]:doronz88/simpleelf.git
cd simpleelf
python -m pip install -e . -UMaintenant, vous pouvez simplement importer Simpleelf et commencer à jouer avec.
L'analyse est facile à utiliser ElfStruct . Essayez-le:
from simpleelf . elf_structs import ElfStructs
ElfStructs ( '<' ). Elf32 . parse ( elf32_buffer ) # outputs a constucts' container
ElfStructs ( '<' ). Elf64 . parse ( elf64_buffer ) # outputs a constucts' container Le bâtiment est facile en utilisant ElfBuilder . Essayez-le:
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 ()