首页
社区
课程
招聘
[求助]怎么在程序运行期间修改dll文件所在内存数据
发表于: 2008-1-11 23:01 6631

[求助]怎么在程序运行期间修改dll文件所在内存数据

2008-1-11 23:01
6631
Executable modules,
基址=084D0000
大小=0009A000 (630784.)
入口=0852F78F bug.<模块入口点>
名称=bug
文件版本=0, 10, 1, 1
路径=E:\bug\bug.dll

//双击运行程序,主程序加载这个dll时,得到以上的信息,此时我想修改的地址084fe670

Executable modules,
基址=071A0000
大小=0009A000 (630784.)
入口=071FF78F bug.<模块入口点>
名称=bug
文件版本=0, 10, 1, 1
路径=E:\bug\bug.dll

//关闭主程序,重启,这时主程序加载这个dll时,dll基址变化了,我怎么定位这个地址呢,用基址+偏移?我得用程序写,我该利用什么函数找这个dll的基址呢?论坛搜索到一帖子http://bbs.pediy.com/showthread.php?t=15497,和我想法一样。但还是不会,怎么在主程序里找到存储dll的基址呢。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
这个dll是怎么引入的?是动态加载就在loadlibrary后,
2008-1-11 23:15
0
雪    币: 22
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
程序启动就加载dll,但是每次启动,dll基地址都变化
2008-1-11 23:20
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
4
不论是LoadLibrary还是通过导入表使用dll,
主程序中均不存储此dll的基址.
基址是存储在dll里面的, 载入时候, 由PELoader确定实际装入地址.
主程序里面拿到自己的Handle, 建立自己modules列表, 枚举文件名确定bug.dll吧, 嗷.
2008-1-12 02:23
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
5
GetModuleInformation 可以获取模块信息
2008-1-12 07:08
0
雪    币: 5
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
DLL的入口地址是不精确的 你可以加载DLL后得到入口地址 然后就一切都好办了 或者找到一段特征搜索
2008-1-12 12:24
0
雪    币: 22
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
dll基址在他本身内部,是不会变的。那OD里那个描述dll文件的基地址是什么意思呢。貌似就是被主程序安排的位置,怪不得会变化。
咬下OD
2008-1-12 12:34
0
雪    币: 206
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
注入一个自己的dll,这个dll里面用GetModuleHandle("bug.dll")
这样好像可以..
2008-1-12 12:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
枚举下DLL模块,基址会跟着出来了.
2008-1-24 14:19
0
游客
登录 | 注册 方可回帖
返回
//