逆向工程核心原理之调试UPX压缩的notepad程序

    notepad_upx第一个节区的RawDataSize为0,即第一个节区在磁盘文件中是不存在的,但是其Virtual Size值为0xF000,意味着,UPX压缩后的PE文件在运行瞬间将压缩的代码解压到(内存中的)第一个节区。


    notepad_upx的EP,第一个节区的起始地址0x01001000,存入edi,第二个节区的起始地址0x01010000,存入esi。


    把esi中的字节写入edi中,这里有个大循环,直到把该写的数据写完。然后跳出来到了pop esi处。



    又有一个循环,判断第一个节区中的数据减去0xE8后是不是小于等于1,也就是判断数据是否为0xE8/0xE9(call/jmp),找到之后还要判断数据后面的那个数据是否为0x1。(ja,大于跳)如果是0x1就执行下面这段代码,恢复call/jmp的地址。


    设置IAT。用GetProcAddress获取函数地址,然后将函数地址存储到EBX寄存器所指的原notepad.exe的IAT区域。


    下图为EDI所指的第二个节区。


    下图为第一节区


    IAT设置好之后会跳到下图断点所在的地方。


    往下单步执行几步就到了跳去OEP的地方。


    真正的OEP










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值