逆向工程核心原理之内嵌补丁

1.1       源程序分析

第一次解密4010F5,与0x44异或

解密401007,与0x7异或,一直到0x401086

第二次解密4010F5,与0x11异或。

将4010F5处的内容累加得到校验和,与0x31EB8DB0作比较,来判断代码/数据是否被改动过。

下图是我们将要修改的字符串。分别位于0x40110A和0x401123

        解密代码。

1.2       内嵌补丁

思路:解密结束后会跳到OEP,把JMP OEP改成JMP 补丁代码,补丁代码执行完成后再JMP OEP。

补丁代码有3种设置方法:

设置到文件的空白区域

扩展最后节区后设置

添加新节区后设置。

打补丁过程:

.text节区起始偏移是0x400,大小是0x280,从0x680-0x800都是NULL,这个文件偏移所对应RVA是0x1000+(0x680-0x400)+ImageBase=0x401280,在0x401280处填充补丁代码。

补丁代码填充结束后,需要修改之前跳转到OEP的代码修改成跳转到401280。

修改0x401083处的内容,内容为“E9 96 01”,这一部分到0x401086就结束了。文件偏移是0x401083-0x401000+0x400=0x483

        0x483处的内容是未解密的,和0x7异或之后得到jmp40121e。

        现在需要将JMP 40121e改成JMP 401280,“E9 F8 01”,需要将“E9 F8 01”与0x7异或后再写入0x483-0x486。

 

打了补丁之后的程序:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值