PEfile with Capstone
Next, we use the capstone
disassembler to disassemble the code we extracted with pefile
to get the assemble code.
As usual, we start by importing the required modules. Here, these are capstone
and pefile
:
from capstone import * import pefile pe = pefile.PE('md5sum.exe') entryPoint = pe.OPTIONAL_HEADER.AddressOfEntryPoint data = pe.get_memory_mapped_image()[entryPoint:] cs = Cs(CS_ARCH_X86, CS_MODE_32) for i in cs.disasm(data, 0x1000): print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))
The AddressofEntryPoint
value within the IMAGE_OPTIONAL_HEADER
is the pointer to the entry point function relative to the image base address. In the case of executable files, this is the exact point where the code of the application begins. So, we get the starting of the code with the help of pefile
as pe.OPTIONAL_HEADER.AddressOfEntryPoint
and pass this to the disassembler.