-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathELFHeaderRebuilder.py
More file actions
56 lines (50 loc) · 2.26 KB
/
ELFHeaderRebuilder.py
File metadata and controls
56 lines (50 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#Rebuild ELFHeader obj from memory of currentProgram.
#By SimonTheCoder
#@category SimonTheCoder
import ghidra.app.util.bin.MemoryByteProvider as MemoryByteProvider
from ghidra.app.util.bin.format.elf import ElfHeader
import generic.continues.RethrowContinuesFactory as RethrowContinuesFactory
import ghidra.app.util.bin.format.elf.ElfException as ElfException
import ghidra.app.util.bin.ByteArrayProvider as ByteArrayProvider
from __main__ import *
def getELFHeader():
if currentProgram.getExecutableFormat().find("ELF") <0:
print "for ELF only!"
return None
#mp = MemoryByteProvider(currentProgram.getMemory(), currentProgram.getMinAddress())
mp = MemoryByteProvider(currentProgram.getMemory(), currentProgram.getImageBase())
header = None
try:
header = ElfHeader.createElfHeader(RethrowContinuesFactory.INSTANCE, mp)
except ElfException as error:
print "No correct ELF found @ImageBase. Try to get ELF from original file."
try:
fd = open( str(getProgramFile()),"rb")
bap = ByteArrayProvider(fd.read(0x1000)) #I think 1 page is enough for ELF Header.
fd.close()
header = ElfHeader.createElfHeader(RethrowContinuesFactory.INSTANCE, bap)
except IOError as error:
print "Original file not found!. ELFHeader create failed."
header = None
except ElfException as error:
print "Can not find ELF in original file."
header = None
if header is None:
print "Let's find it manually..."
return getELFHeaderManually()
return header
def getELFHeaderManually():
if currentProgram.getExecutableFormat().find("ELF") <0:
print "for ELF only!"
return None
memory = currentProgram.getMemory()
mp = MemoryByteProvider(currentProgram.getMemory(), askAddress("Select ELF Section","ELF(ADDRESS should be '0'):"))
header = None
try:
header = ElfHeader.createElfHeader(RethrowContinuesFactory.INSTANCE, mp)
except ElfException as error:
print "No correct ELF found @SelectAddress. Try to get ELF from original file."
return None
return header
if __name__ == "__main__":
print getELFHeader()