阅读:1514回复:0
ZT---关于PE可执行文件的修改(4)
关于PE可执行文件的修改(4)
[ 作者: ilsy 添加时间: 2001-9-24 9:25:08 ] //更改返回地址,用jpm返回原程序入口地址,其它的二进制代码在writeline[15]处 if(retf==-1) { printf(\"error seek\\n\"); return; } address=0-(newentryaddress-oldentryaddress+4+15); //返回地址计算的方法是新的入口地址减去老的入口地址加4(地址长度)加15(二进制代码相对偏移)后取反 tmp=address>>24; waddress[3]=tmp; tmp=address<<8; tmp=tmp>>24; waddress[2]=tmp; tmp=address<<16; tmp=tmp>>24; waddress[1]=tmp; tmp=address<<24; tmp=tmp>>24; waddress[0]=tmp; retf=_write(ret,waddress,4); //写入返回地址 if(retf==-1) { printf(\"error write: %d\\n\",GetLastError()); return; } _close(ret); printf(\"\\nall done...\\n\"); return; } //end 由于在PE格式的文件中,所有的地址都使用RVA地址,所以一些函数调用和返回地址都要经过计算才可以得到,以上是我在实践中的心得,如果你有更好的办法,真心的希望你能告诉我。 如果存在错误,请告诉我,以免误导看这篇文章的人。 写的较乱,请原谅。 ilsy@netguard.com.cn |
|
|