首页
社区
课程
招聘
[求助][求助]修改游戏内DLL的代码段的问题
发表于: 2012-8-20 11:32 6222

[求助][求助]修改游戏内DLL的代码段的问题

2012-8-20 11:32
6222
一款游戏调用的一个DLL, 一修改这个DLL的代码段, 游戏过5秒左右就会退出, 问题的关键在于这个DLL的代码段不能写, 即使用原来的内容写(就是不改变代码段的内容), 也会退出, 游戏主程序中确实有一段代码检测DLL的代码段, 不让这一段检测代码执行, DLL怎么改也不会退出, 可是我使用原来的内容写(就是不改变DLL代码段的内容)为什么也会被检测到, 实在是搞不明白, 希望各位大牛能给我点提示或者思路, 谢谢了!

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 286
活跃值: (62)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
2
CRC,MD5,HASH...
2012-8-20 11:49
0
雪    币: 712
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
CRC,MD5,HASH... ----------------

可是我没改变DLL代码段的内容, 只是在OD中用原来的内容写了一下, 游戏是怎么检测出来的, 我实在弄不明白?
2012-8-20 11:54
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
4
有内存校验啊
2012-8-20 12:51
0
雪    币: 712
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有内存校验啊 ---------

可是我没有改变DLL代码段的内容, 只是用原本的内容写一下也会被检测到, 什么样的内存校验能做到这样的效果?
2012-8-20 13:33
0
雪    币: 16
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
代码段是可读可执行,你写入,则需要改为可写,程序即可判断被修改
2012-8-20 14:14
0
雪    币: 712
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
代码段是可读可执行,你写入,则需要改为可写,程序即可判断被修改 --------------------

在写入之前已经有改保护属性了, 代码如下:

DWORD dwOldFlag;
DWORD dwAddress;
DWORD byValue;
VirtualProtect((void*)dwAddress,1,PAGE_READWRITE,&dwOldFlag);

byValue = *(BYTE*)(dwAddress);
*(BYTE*)(dwAddress) = byValue;  //加上这一句程序过5秒就会退出

VirtualProtect((void*)dwAddress,1,dwOldFlag,&dwOldFlag);
2012-8-20 16:52
0
雪    币: 1790
活跃值: (3786)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
从你的代码来看是修改进程内的内存内容。
我觉得原因可能有两个:
一、游戏hook了自己进程内的api,检查是不是对关键数据区域做修改,
例如hook进程的VirtualProtect函数判别地址。
二、游戏一般都是多线程的,你修改前更改代码段的VirtualProtect调用有问题,
应该保持代码段的可执行标记,如果在你修改过程中那段代码被执行则会发生错误,
从而被系统识别到。
2012-8-20 22:18
0
雪    币: 712
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢您的解答, 但是还是解决不了我的问题:
一、经检查, 游戏没有hook你说的api,  而且如果是用hook api的方式检测, 那么会一写内存, 直接就会被检测, 现在的情况不是这样, 写代码段后5秒以后被检测然后退出的;
二、我改的代码的位置不会被游戏调用到(起码我改的时候不会调用, 我确信), 另外我也试过用PAGE_EXECUTE_READWRITE也一样会被检测到。

现在据我的判断, 是游戏有一段代码会检测到这种修改, 但是有两个问题:
1.检测代码加了VM, 所以没办法知道里面内容是什么;
2.我的操作没有改变DLL代码段的内容, 保护属性也还原了, 那游戏是怎样检测到的?

现在有一个疑点就是用VirtualProtect把DLL要修改的代码段改为PAGE_READWRITE后, 调用
VirtualQuery查询, 发现DLL代码段的保护属性变成PAGE_WRITECOPY了, 不知道是不是因为这个引起的?
2012-8-22 17:09
0
雪    币: 1790
活跃值: (3786)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
建议发出游戏程序看下,
不会访问驱动的吧。
2012-8-23 07:19
0
游客
登录 | 注册 方可回帖
返回
//