逆向工程核心原理之第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,

那么最后我们得到的结果为: