您的位置:首页精文荟萃破解文章 → 对于DLL通过增加重定位项直接调用引入表函数

对于DLL通过增加重定位项直接调用引入表函数

时间:2004/10/15 0:49:00来源:本站整理作者:蓝点我要评论(4)

 对于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节不是最后一个节的话,这个节后面的数据或程序就出
      错了。若是最后一个节,可以不删,但要注意对齐PE文件。
  6、将导入表长度加2;若增加了n个项目,就要加n*2;若增加了索
      引,要加上同样的长度。

    现在一切ok了,程序运行时,你调用的引入表函数被PE装载器给重定位了。可以用LoadPe查看改造后的.reloc表,将会多了一项:
Index RVA  偏移  Type    Far Address  Data Interpretion
5  37232  37232  HIGHLOW(3) 1002C1A8  IAT thunk of "Kernel32"

  需要注意的事项:增加索引或项目时,要注意PE文件对齐,并要注意当.reloc不是最后一个节的特殊情况(往往是加了壳或打了补丁的才会这样)。

  EXE文件往往没有重定位表,能不能这样做呢?没有试过。 
    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程