首页
社区
课程
招聘
搜索游戏DLL内存地址的问题
发表于: 2013-1-2 00:48 5164

搜索游戏DLL内存地址的问题

2013-1-2 00:48
5164
我要搜索一个游戏的内存地址,可是这个地址我发现在一个DLL文件里,比如地址为1115CC93,我用OD加载这个游戏的exe文件后,可以搜索到这个内存地址,里面的代码也是我要找的,但是我用别人的内存搜索工具搜索,只能搜索00400000开头的地址,并没有11开头的地址,请问我要如何换算地址,或是我的方法不对?请各位指教。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Windbg中有个lm命令,可以看到模块加载的基址,可以用这个基址加上相对便宜量应该可以搜索到。这里仅仅说了windbg的调试,DLL加载近内存也应该有迹可循
2013-1-2 00:57
0
雪    币: 102
活跃值: (2180)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
我用OD可以看到模块加载的基址,可是我困惑的是用内存搜索工具,只能搜索0040开头的地址,一直到00FFFF,不能搜索11这一段地址。
2013-1-2 08:45
0
雪    币: 69
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
一般設計Memory Scanner時,搜尋範圍都是從0000 0000到7FFF FFFF吧?
我記得這個範圍是從SYSTEM_INFO裡拿到的
http://msdn.microsoft.com/zh-tw/library/windows/desktop/ms724958(v=vs.85).aspx

lpMinimumApplicationAddress
A pointer to the lowest memory address accessible to applications and dynamic-link libraries (DLLs).

lpMaximumApplicationAddress
A pointer to the highest memory address accessible to applications and DLLs.
2013-1-2 08:56
0
雪    币: 902
活跃值: (3586)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
5
dll加载地址并不是一成不变的。你机器上的1115CC93地址,应该减去dll的基址得到一个相对偏移,然后在别的机器上获取到dll的基址,加上这个偏移才是你要的地址。OD能看到模块基址,主要不清楚你是什么需求所以没办法给建议
2013-1-2 09:52
0
雪    币: 102
活跃值: (2180)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
是这样的,我在做一个特征码搜索的工具,因为一个游戏经常更新,每次更新后,我那个1115CC93的内存地址的代码都会变,然后我看网上很多人写了这种程序,就是记录一段机器码做为特征码,这段机器码在游戏更新后不会变,然后每次游戏更新后,在游戏里搜索这段机器码,搜到后就实现了自动更新地址的功能。
2013-1-2 10:08
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
先找模块基值
2013-1-2 10:26
0
雪    币: 102
活跃值: (2180)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
模块基址在OD里可以看到,但请问下我如何才能搜索到呢?
2013-1-2 11:32
0
雪    币: 102
活跃值: (2180)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
今天没人上班?
2013-1-2 16:40
0
雪    币: 902
活跃值: (3586)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
10
GetModuleHandle就可以获取基址。但是你的问题似乎不是不同机器的问题,而是更新之后地址可能变动的问题。说到底,获取基址还是必须的,取得基址和模块的大小之后,就可以取得这块内存,远程复制内存的话效率略低,建议直接注入dll来搜索。搜索就很简单了,如果是对齐的就以对齐粒度来递进搜索,非对齐的话就逐字节对比。
2013-1-2 21:50
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
用快照好了CreateToolhelp32Snapshot( TH32CS_SNAPMODULE,  ),再从 modBaseAddr 获得基址。
如果是注入线程的话,直接可以用GetModuleHandle 得到基址。
再找各版本相对不变的十六进制串来定位。
2013-1-4 10:28
0
游客
登录 | 注册 方可回帖
返回
//