James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1489回复:0

ZT---关于PE可执行文件的修改(4)

楼主#
更多 发布于:2002-06-07 11:56
关于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

车到山前必有路。 虽然有些土,却是我最有感触的一句话。
游客

返回顶部