能力值:
( LV3,RANK:20 )
|
-
-
2 楼
CRC,MD5,HASH...
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
CRC,MD5,HASH... ----------------
可是我没改变DLL代码段的内容, 只是在OD中用原来的内容写了一下, 游戏是怎么检测出来的, 我实在弄不明白?
|
能力值:
( LV9,RANK:160 )
|
-
-
4 楼
有内存校验啊
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
有内存校验啊 ---------
可是我没有改变DLL代码段的内容, 只是用原本的内容写一下也会被检测到, 什么样的内存校验能做到这样的效果?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
代码段是可读可执行,你写入,则需要改为可写,程序即可判断被修改
|
能力值:
( 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);
|
能力值:
( LV6,RANK:90 )
|
-
-
8 楼
从你的代码来看是修改进程内的内存内容。
我觉得原因可能有两个:
一、游戏hook了自己进程内的api,检查是不是对关键数据区域做修改,
例如hook进程的VirtualProtect函数判别地址。
二、游戏一般都是多线程的,你修改前更改代码段的VirtualProtect调用有问题,
应该保持代码段的可执行标记,如果在你修改过程中那段代码被执行则会发生错误,
从而被系统识别到。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢您的解答, 但是还是解决不了我的问题:
一、经检查, 游戏没有hook你说的api, 而且如果是用hook api的方式检测, 那么会一写内存, 直接就会被检测, 现在的情况不是这样, 写代码段后5秒以后被检测然后退出的;
二、我改的代码的位置不会被游戏调用到(起码我改的时候不会调用, 我确信), 另外我也试过用PAGE_EXECUTE_READWRITE也一样会被检测到。
现在据我的判断, 是游戏有一段代码会检测到这种修改, 但是有两个问题:
1.检测代码加了VM, 所以没办法知道里面内容是什么;
2.我的操作没有改变DLL代码段的内容, 保护属性也还原了, 那游戏是怎样检测到的?
现在有一个疑点就是用VirtualProtect把DLL要修改的代码段改为PAGE_READWRITE后, 调用
VirtualQuery查询, 发现DLL代码段的保护属性变成PAGE_WRITECOPY了, 不知道是不是因为这个引起的?
|
能力值:
( LV6,RANK:90 )
|
-
-
10 楼
建议发出游戏程序看下,
不会访问驱动的吧。
|
|
|