首页
社区
课程
招聘
求主程序加载dll后的call位置定位的原理方法
发表于: 2012-1-6 02:20 5916

求主程序加载dll后的call位置定位的原理方法

2012-1-6 02:20
5916
标题可能说不清楚,,,,大概问题是

主程序a.exe 运行后加载了 模块 b.dll
我所要找call 的汇编特征码在b.dll 里

如果我通过od直接加载 b.dll 定位到特征码所在位置的call 是 call 01234567
如果我通过od加载主程序a.exe 后进入模块b.dll中通过特征码定位到call位置
此时call 转跳的地址变了, 不是OD直接打开b.dll 时的 call 01234567

这个call所转跳的是内存地址 程序加载模块dll后会分配内存 所以这个call 是动态地址。

如何获得这个call 的基址呢  偏移是怎么找的噢。。求助高手指点一二。

我自己用的方法是:
用CE附加主程序a.exe  
然后读模块b.dll  call特征码所在的内存地址,,
最后通过这个地址找到基址  - -

方法行不通。。。。。唉。。虚心等待高手指点一二。先谢过了

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 34
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
PE文件头中有文件的默认加载基址,如果加载的pe文件不在默认的加载基址,windows加载器就要对pe文件中需要重定位的数据重定位。本例中,dll函数中的首地址是需要重定位的(如果加载dll不是其默认基址),用od直接打开dll,是默认的dll加载基址,用exe来load进来的dll就不是其默认的基址了。你可以用工具例如LoadPE来看看dll的默认基址,应该是与exe的冲突了。
在PE文件中有一个基址重定位表,所有需要重定位的信息都可以在这个表中找到,具体的你研究研究PE文件的重定位相关的内容,找不到再继续问。
我是菜鸟,写的太墨迹了~
2012-1-6 09:36
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
楼主说了是内存地址的吧。
也就是随便申请一块空间然后释放出来的代码。
可以先看看怎么申请空间和释放代码的。
2012-1-6 09:50
0
雪    币: 61
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢两位热心人士的回答。一楼的理解和给的帮助非常有效,谢谢。
2012-1-6 13:24
0
雪    币: 31
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
LoadLibrary("b.dll")的返回值就是b.dll在内存中的地址,再加上01234567就是你要用的函数的地址。
2012-1-6 17:25
0
雪    币: 61
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢你给的回答~我想追问个问题:


如图中的  SE 句柄安装是 模块所释放的句柄吗,这个是固定的吗?不是的话怎么找吖!
如图中的  Call  这个call是换电脑加载都会变  但是自身电脑就不会了

使用图中 SE 句柄安装的地址068c32a5 加上call 068A3FB0 是我要的固定函数地址吗。

寄存器中的ESI 是模块句柄安装后 所在进程的地址(这个不会变)可以不可以通过这个加偏移找到这个call 地址呢,,,

希望你还能帮我回答一下我的疑问哈,先致谢了
2012-1-6 18:20
0
游客
登录 | 注册 方可回帖
返回
//