逆向工程核心原理之第20章之扩展最后节区设置
节区的基本分析同上两篇文章。
第一步,扩展文件800h字节大小
那么文件从原来的5,120 字节 扩展成为 7,168 字节 7168-5120 = 2048 = 1000 0000 0000
扩展节区的大小,同时也针对文件的第四个节区(最后一个节区的size of raw data 大小设置为1000)
2.将文件拖入到ollydbg中,调试代码
将代码设置在404fa0处
mov ecx,10
mov esi,404fe0
mov edi,401123
rep movs byte ptr es:[edi], byte ptr ds:[esi]
mov ecx,8
mov esi,404ff0
mov edi,40110a
rep movs byte ptr es:[edi], byte ptr ds:[esi]
jmp 40121e
字符串设置如下位置
404fe0 ascii "use null text!",0
404ff0 ascii "this is test",0
这样我们需要401083出的跳转地址为 404fa0
将404fa0替换跳转地址40121e,得到如下所示:
Address Hex dump Command
00401083 E9 183F0000 JMP 00404FA0
由183F 和07 xor 得到 1f38
401083的内存地址等同于文件地址的483
401083 - 401000 + 400 = 483
如果在文件后面再增加16个字节,那么总文件大小为7,184 字节
把字符串 this is test 延长为this is test123456789ab。。。
那么这个时候最后一个节区的
virtual size 设置为1010 size of raw data 也设置为1010
NT 可选头的字段sizeofimage 设置为5010大小即可
结果如下:
因为没有终止符号,所以把后面的字符都显示出来了。
如果我们把最后一个字符b修改为0,
那么最后我们得到的结果为: