| 对于DLL通过增加重定位项直接调用引入表函数 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:58:20
|
| 对于DLL文件,还有一种比较简单的方法,通过在冲定位表中增加IAT的重定位项实现。 先看下面补丁程序: . 0167:01077228 PUSH EBX ;函数名字 0167:01077229 PUSH EDX ;Kernel32的hModule 0167:0107722A NOP 0167:0107722B NOP 0167:0107722C NOP 0167:0107722D NOP 0167:0107722E NOP 0167:0107722F NOP 0167:01077230 CALL [KERNEL32!GetProcAddress] 0167:01077236 TEST EAX,EAX 0167:01077238 JZ 010772AC . . 在SoftIce中写补丁时候就像上面一样写,完成后,0167:01077230处的指令代码将为:FF 15 xx xx xx xx,我们需要做的就是将xx xx xx xx处写入冲定位表。在本例子中,基地址为1040000,所以1077230处的RAV为37230,由于重定位表都是1000对齐的,所以要在重定位表中RVA为37000的索引中增加。 1、找到重定位表中索引为37000的地方,如果没有这个索引,就给 它加上,并将它的长度字段(第2个双字)加2 2、计算重定位项目值:37230 - 37000 + 2 = 232,加2是跳过指令 字FF 15,指令字之后才是要重定位的地址。 3、加上属性:232 or 3000 = 3232,项目值是字单位,高4位是属 性。 4、将项目值3232按照内存存放规律--低地址放低字节,高地址放高 字节加到这个索引(37000)中,在这个例子中,高低一样了。 5、将重定表最后为0的字节删掉2个。同理,你要增加2个项目,就 要删掉4个0;增加了索引,最好删掉同样长度的0字节。否则如 果.reloc节不是最后一个节的话,这个节后面的数据或程序就出 错了。若是最后一个节,可以不删,但要注意对齐 [1] [2] 下一页
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: netPAL1.2C注册码破解 下一篇文章: windowsXP下的向量化异常处理 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |