Unicorn引擎内存读取无效(UC_ERR_READ_UNMAPPED)

时间:2017-03-01 13:53:12

标签: exception assembly memory-management reverse-engineering

我正在进行picoCTF练习并且进行了基本的RE /汇编练习,其目的是在程序结束时基本告诉EAX的价值。我认为这是尝试Unicorn / Keystone引擎的好机会,所以我做到了。我用keystone引擎组装了两个代码变体(以摆脱跳转指令)并试图用独角兽模拟它。但是,我得到“无效内存读取(UC_ERR_READ_UNMAPPED)”异常。我收集的其中一个片段(考虑到AT& T语法):

MOV $19388,%ebx
MOV $28571,%eax
MOV $19079,%ecx
IMUL %eax,%ebx
ADD %eax,%ebx
MOV %ebx,%eax
SUB %ecx,%eax

导致以下字符串(保存在文件“assembleopt1.txt”中):

\xbb\xbc\x4b\x0\x0\xb8\x9b\x6f\x0\x0\xb9\x87\x4a\x0\x0\xf\xaf\xd8\x1\xc3\x89\xd8\x29\xc8

并尝试使用此代码运行它:

#!/usr/bin/python3

from unicorn import *
from unicorn.x86_const import *

with open("assembledopt1.txt", "rb") as file:
    code = file.read()

addr = 0x1000000

print("Emulate x86")

try:
    mu = Uc(UC_ARCH_X86, UC_MODE_32)

    mu.mem_map(addr, 1024*1024)

    mu.mem_write(addr,code)

    mu.reg_write(UC_X86_REG_ECX, 0x0)
    mu.reg_write(UC_X86_REG_EAX, 0x0)
    mu.reg_write(UC_X86_REG_EBX, 0x0)

    mu.emu_start(addr, addr+len(code))


    print("Done")

    r_eax = mu.reg_read(UC_X86_REG_EAX)
    print("Eax: " + r_eax)

except Exception as e:
    print("Err: %s" % e)

这导致前面提到的异常 我不知道我做错了什么,因为我的代码与教程非常相似,希望你能帮助我。非常感谢任何关注我的问题的人!

0 个答案:

没有答案