检测DLL的代码拼接

我试着写一些功能来检测DLL的代码拼接。 我把DLL的代码拼接意味着在函数中加载的DLL的开始修改字节,所以,与其跳跃到DLL中的全功能的实现,将跳转到其他位置。

我的方法迄今已:
首先 - 加载的DLL信息(如加载的DLL的映像基等),我使用Toolhelp32库得到。

对于每一个加载的DLL:

  • 通过阅读导出表,在内存中时,DLL的获得每个函数的地址(RVA)
  • 在此内存地址的8个字节读
  • 从DLL的磁盘上的版本获取函数RVA
  • 分析DLL的磁盘上的PE头,要转换的RVA文件偏移 - 在这里读8个字节​​太
  • 比较这8个字节

现在我知道我没有做很正确的东西,我可能会做一个概念性的错误。

我一直在测试使用Notepad.exe,32位。 攀比为广大中加载的DLL的功能成功,但它往往找一些差异。

例如:
ntdll.dll中:序号= 00000059,RVA = 0007e098,fileoffs = 0007d498,功能VA:7c97e098
盘:00 00 00 00 00 00 00 00
纪念品:E4 04 00 00 00 00 00 00

和:
ntdll.dll中:序号= 0000003d,RVA = 0009d0d8,fileoffs = 0009c4d8功能VA:77a9d0d8
磁盘:A1 5C 81 F9 77 C3 90 90
纪念品:A1 5C 81 77广告C3 90 90

有人向我提到,它是与重定位。 我不知道这一点,但是,我还没有找到如何适用在这里的任何文件。

有没有人有一些信息,或在此链接? 或有没有人知道我在哪里失败? 提前谢谢了。

编辑:DLL它们优选图像碱被加载(比较OptionalHeader.ImageBase到在存储器中的加载模块的基地址时)。

因此,我坚持试图找出原因有可能是不同的 - 例如。 以上:为什么在NTDLL 1312的功能似乎匹配,但1313'th 1犯规。

--------------解决方案-------------

重定位是虚拟的偏移列表,其中包含绝对地址。 如果图像不是在其首选的图像加载基地,需要调整的重定位表中列出的所有偏移。 如果找你首选的图像基地是为0x400000和DLL加载在0x500000,你只需要调整在搬迁名单与提到的0x100000偏移量的数据。

例如,见在PE的格式窥视里面的“PE文件基址重定位”一节。

分类:为dllimport 时间:2015-03-14 人气:0
本文关键词: dllimport的,PE,DLL注入
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.582 (s). 10 q(s)