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

1.1       源程序分析

逆向工程核心原理之内嵌补丁_第1张图片

逆向工程核心原理之内嵌补丁_第2张图片

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

逆向工程核心原理之内嵌补丁_第3张图片

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

逆向工程核心原理之内嵌补丁_第4张图片

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

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

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

        解密代码。

1.2       内嵌补丁

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

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

设置到文件的空白区域

扩展最后节区后设置

添加新节区后设置。

打补丁过程:

逆向工程核心原理之内嵌补丁_第5张图片

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

逆向工程核心原理之内嵌补丁_第6张图片

补丁代码填充结束后,需要修改之前跳转到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。

 

打了补丁之后的程序:

逆向工程核心原理之内嵌补丁_第7张图片


你可能感兴趣的:(逆向)