首页
社区
课程
招聘
如何检测程序内存是否被修改?
发表于: 2017-5-29 10:50 18063

如何检测程序内存是否被修改?

2017-5-29 10:50
18063
        游戏是基于客户端同步的,现在出现了一种修改内存的挂,初步断定是通过ce或者逆向二进制文件获取了核心数据的内存基址,并在此基础上制作出了内存挂,        目前s端能做的很少,只能客户端加强监控。
      疑问:
1、游戏能检测到自身被openprocess或者writememory操作吗?  看了很多文献,这个貌似需要在Ring0下面才能做到,Ring3下面可以吗?
2、游戏端数据加密已经试过了,貌似效果不明显,还有什么其他的方法进行对抗吗?  我现在的思路尽量搜集信息,断定进程被修改  、或者被注入,
然后s端通过历史数据进行对抗。希望大家能帮忙想想其他的idea                                                                                                        

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

收藏
免费 0
支持
分享
最新回复 (34)
雪    币: 5270
活跃值: (3505)
能力值: ( LV7,RANK:117 )
在线值:
发帖
回帖
粉丝
2
1.在功能上加入检测,可以前面加个用于校验的变量,后面调用的时候验证一下这个变量
2.加入crc检测,看游戏内存是否被修改(可以做个心跳包,没有心跳就说明crc线程被结束了,就让客户端强制下线)
3.可以r0hook一些关键函数,防止游戏内存被修改
2017-5-29 12:40
0
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
鬼才zxy 1.在功能上加入检测,可以前面加个用于校验的变量,后面调用的时候验证一下这个变量 2.加入crc检测,看游戏内存是否被修改(可以做个心跳包,没有心跳就说明crc线程被结束了,就让客户端强制下线) ...
谢谢,  方案1跟数据加密是异曲同工的啊,有什么特别的作用吗?
方案2,我会尝试下;
方案3,有游戏这么做吗?  Ring0下的hook,感觉很变态啊
2017-5-29 16:23
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Ring0下的hook,感觉很变态啊  ,
有驱动保护的都这样。
2017-5-29 17:40
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5

1、不行
2、一天更新一个版本(加大辅助作者的工作量),每次更新都把引用了那几个关键变量的函数重新加花/混淆/vm一下(防止特征码),然后在该变量所在结构中里插各种reserved各种无用变量来改变关键变量的offset(防止硬编码offset)。如果条件允许的话最好出个一键自动混淆+构建的脚本,每个版本出100个bin(防止无脑搜内存地址),每个电脑只可能拿到唯一的bin,保证辅助作者手上拿到的和普通玩家手上拿到的版本只有1%几率相同即可,记得不能让玩家随便替换bin!!!(就算辅助做出来了也不能在别的电脑跑)。
2.1、你不是TX,不要尝试去搞无意义的内核对抗。

2017-5-29 17:44
0
雪    币: 5270
活跃值: (3505)
能力值: ( LV7,RANK:117 )
在线值:
发帖
回帖
粉丝
6
laiyier [em_1]谢谢, 方案1跟数据加密是异曲同工的啊,有什么特别的作用吗? 方案2,我会尝试下; 方案3,有游戏这么做吗? Ring0下的hook,感觉很变态啊
加密的话    可以反汇编看看    关键部分是不是很容易被破解
ring0的hook  腾讯就是这么搞的
2017-5-29 20:24
0
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
鬼才zxy 加密的话 可以反汇编看看 关键部分是不是很容易被破解 ring0的hook 腾讯就是这么搞的
tp酿吗?感觉网上也有攻略绕过去的
2017-5-29 21:26
0
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
hzqst 1、不行2、一天更新一个版本(加大辅助作者的工作量),每次更新都把引用了那几个关键变量的函数重新加花/混淆/vm一下(防止特征码),然后在该变量所在结构中里插各种reserved ...
一天一个版本,qa会杀人的
2017-5-29 21:27
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
windows下有个全局挂钩,自己挂上去,这样可以防止其它软件挂上去了
2017-5-29 21:36
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
重要数据和服务器对比更新,如果出现不一致,差距太大就断定被修改了
2017-5-29 21:37
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
重要数据在内存中都要加密保存,也就是说显示到界面的都和内存存储的不一致
2017-5-29 21:39
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
12




laiyier

一天一个版本,qa会杀人的[em_17]

模块化,运行游戏之前直接即时下载

2017-5-29 22:31
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
13
hzqst laiyier 一天一个版本,qa会杀人的[em_17] 模块化,运行游戏之前直接即时下载
tx是啥
2017-5-29 22:35
0
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
Tennn tx是啥
腾讯啊
2017-5-29 23:20
0
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
张来喜 windows下有个全局挂钩,自己挂上去,这样可以防止其它软件挂上去了
能详细点吗?这种防止别人挂上去还是牛逼的
2017-5-29 23:22
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
16
laiyier 腾讯啊
没反应过来。。。。。。。。   
2017-5-29 23:22
0
雪    币: 5270
活跃值: (3505)
能力值: ( LV7,RANK:117 )
在线值:
发帖
回帖
粉丝
17
laiyier tp酿吗?感觉网上也有攻略绕过去的
你可以动手试试绕过,对于新手不简单
还有就是可以检测调试器    这样分析游戏功能就不好搞了
2017-5-29 23:28
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
都是大神呀我来吃瓜子围观
2017-5-29 23:41
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19

static  HHOOK  g_hHook;
LRESULT  CALLBACK  MessageProc(int  nCode,  WPARAM  wParam,  LPARAM  lParam)
{
    tagDEBUGHOOKINFOpMouseInfo  =  (tagDEBUGHOOKINFO)lParam;
    if  (nCode  >=  0  &&  wParam  ==  WM_LBUTTONDOWN(这条消息需要换成调试消息,原来是鼠标消息处理,具体哪条消息我不清楚))
    {

    }
    return  CallNextHookEx(g_hHook,  nCode,  wParam,  lParam);    //  钩子函数也可以通过直接返回TRUE来丢弃该消息,并阻止该消息的传递
}
g_hHook  =  SetWindowsHookEx(  WH_DEBUG,  MessageProc,  NULL,  0);

自己百度一下  WH_DEBUG这个用法,我是没用过,不过好像记得那个讨论说过,且处理函数里面的结构体tagDEBUGHOOKINFO也要随着消息不同而不同

2017-5-29 23:47
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
具体情况我不清楚,只是贴点我自己的代码,然后还没有修改全部,自己摸索试试
2017-5-29 23:52
0
雪    币: 433
活跃值: (1905)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
21
这个坑也太大了...多少大厂在上面...你一个人这样问不是办法的,建议找找hs  或者np的源码读一下...
2017-5-30 00:37
0
雪    币: 3741
活跃值: (1792)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22

内存CRC  就是读取自己程序的内存效验下值跟发布时候的程序内存比较下,如果不一样  就认为被修改了。你可以效验,人家可以OD  下个读取断点定位你的效验代码  PATH你的效验代码。最好还是服务端效验他修改的游戏功能。还有小公司没必要搞内核对抗。最后都是你的内核还没搞好游戏就死了。内核就是个坑。最好把关键代码全部VM  ,再加些猥琐的动作,例如收集窗口标题,QQ信息,动态从服务器下载指令  加载检测DLL,枚举自己的模块等等,然后把信息发送服务器保存,大数据分析封号,随便把作者也逮了,第一出现外挂DLL,EXE信息的记录IP一般就是作者,然后把获取的QQ,窗口标题等等有用信息,百度社工,密码撞库,社会工程学能把他老底都挖出来,利用客户端动态执行命令,重点特殊照顾下作者,最后给他发个律师函,肯定把他吓的不要必要的,猥琐方法很多。把这些代码全部VM一下。你敢开,你就封!

2017-5-30 16:25
0
雪    币: 120
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
如果是注入的dll修改的内存,可以Hook自身的WriteMemory、VirtualProtect等  api进行检测,也可以检测注入的dll模块。注入的检测方法很多
如果不是注入修改内存的、游戏也没有驱动进程保护,建议加入CRC检测
最好把检测模块化放在服务器以便及时更新到客户端,反外挂建议参考下网上的外挂源码。
2017-5-30 16:38
0
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
张来喜 static  HHOOK  g_hHook;LRESULT  CALLBACK  MessageProc ...
我明白了,你想做的就是反注入ba
2017-5-30 22:12
0
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
萌克力 这个坑也太大了...多少大厂在上面...你一个人这样问不是办法的,建议找找hs 或者np的源码读一下...
np  hs是什么?壳吗?
2017-5-30 22:13
0
游客
登录 | 注册 方可回帖
返回
//