Пример #1
0
class SectionExtractor(object):

    def __init__(self, byteList):
        self.eh = Eh()
        self.eh.retrieve(byteList[0:64])

        self.byteList = byteList

    def extract(self):
        shSize  = self.eh.get('sh_size')
        shNum   = self.eh.get('sh_num')
        shOff   = self.eh.get('sh_offset')
        strTab  = self.retrieveStringTable()

        result = []
        for idx in range(1, shNum):

            if idx == self.eh.get('shstrndx'):
                continue

            shStart = shOff + shSize * idx

            sh = Sh()
            sh.retrieve(self.byteList[shStart:shStart+shSize])

            name = retrieveStr(strTab, sh.get('name_index'))
            body = self.byteList[sh.get('offset'):sh.get('offset')+sh.get('size')]

            if name == '.symtab' or name ==  '.strtab':
                continue

            result.append((name,  body,  sh))

        return result

    def retrieveStringTable(self):
        shSize  = self.eh.get('sh_size')
        shNum   = self.eh.get('sh_num')
        shOff   = self.eh.get('sh_offset')

        # get string table section header start position
        shStrStart  = shOff + shSize * self.eh.get('shstrndx')

        strSh = Sh()
        strSh.retrieve(self.byteList[shStrStart:shStrStart+shSize])

        strOff  = strSh.get('offset')
        strSize = strSh.get('size')
        strTab = ''.join(map(chr, self.byteList[strOff:strOff+strSize]))

        return strTab
Пример #2
0
from elf.components.Section import Section
from elf.components.SectionAggregator import SectionAggregator
from elf.components.SegmentMaker import SegmentMaker

import sys
from ctypes import *

# teardown ELF file
f = open('test.out')
byteList = map(lambda x: int(ord(x)), f.read())

# get ELF header
eh = Eh()
eh.retrieve(byteList[0:64])

shSize = eh.get('sh_size')
shNum = eh.get('sh_num')
shOff = eh.get('sh_offset')

# get sh string table
shStrStart = shOff + shSize * eh.get('shstrndx')

strSh = Sh()
strSh.retrieve(byteList[shStrStart:shStrStart+shSize])

strOff = strSh.get('offset')
strSize= strSh.get('size')
strTab = ''.join(map(chr, byteList[strOff:strOff+strSize]))

# get sections
secAggr = SectionAggregator()