Ejemplo n.º 1
0
    def create_memory_from_sections(cls, sections):
        o = microx.Operations()

        m = microx.Memory(o, 32)

        mem_map = None
        for section in sections:
            start = section['start']
            size = section['size']
            flags = section['flags']
            name = section['name']
            content = section['content']
            #sys.stdout.write(f"[+] Processing section {name}\n")

            page_start = start & ~(0xFFF)
            page_end = (start + size + 0xFFF) & ~0xFFF
            if "[stack]" == name:
                sys.stdout.write(
                    f"[+] Creating stack region from 0x{page_start:x} to 0x{page_end:x}. Flags: {flags}\n"
                )
                mem_map = PolicyMemoryMap(o,
                                          page_start,
                                          page_end,
                                          flags,
                                          DefaultMemoryPolicy(),
                                          mapname=name)
                m.add_map(mem_map)
            else:
                for page in range(page_start, page_end, 0x1000):
                    if not m.can_read(page):
                        sys.stdout.write(
                            f"[+] Mapping page from 0x{page:x} to 0x{page+0x1000:x}. Flags: {flags}\n"
                        )
                        mem_map = PolicyMemoryMap(o,
                                                  page,
                                                  page + 0x1000,
                                                  flags,
                                                  DefaultMemoryPolicy(),
                                                  mapname=name)

                        m.add_map(mem_map)

            if content:
                assert mem_map is not None
                #sys.stdout.write(f"[+] Writing 0x{len(content):x} bytes at 0x{start:x}\n")
                mem_map.store_bytes_raw(start, content)

        return m
Ejemplo n.º 2
0
import traceback

if __name__ == "__main__":

    # 13 Disassembly:
    # 14 0:  55                      push   ebp
    # 15 1:  89 e5                   mov    ebp,esp
    # 16 3:  51                      push   ecx
    # 17 4:  8b 45 08                mov    eax,DWORD PTR [ebp+0x8]
    # 18 7:  8a 08                   mov    cl,BYTE PTR [eax]
    # 19 9:  88 4d ff                mov    BYTE PTR [ebp-0x1],cl
    # 20 c:  89 ec                   mov    esp,ebp
    # 21 e:  5d                      pop    ebp
    # 22 f:  c2 00 00                ret    0x0

    o = microx.Operations()

    code = microx.ArrayMemoryMap(o,
                                 0x1000,
                                 0x2000,
                                 can_write=False,
                                 can_execute=True)
    stack = microx.ArrayMemoryMap(o, 0x80000, 0x82000)

    code.store_bytes(
        0x1000,
        b"\x55\x89\xE5\x51\x8B\x45\x08\x8A\x08\x88\x4D\xFF\x89\xEC\x5D\xC2\x00\x00"
    )

    m = microx.Memory(o, 32)
    m.add_map(code)