首页
社区
课程
招聘
[求助]11平台检测通杀 修改所有线程EIP到新的GAME DLL区域
发表于: 2014-5-3 19:16 36976

[求助]11平台检测通杀 修改所有线程EIP到新的GAME DLL区域

2014-5-3 19:16
36976
11平台检测通杀:Reload Game.dll到其他地址,遍历线程,suspend自己之外的全部线程,然后修改所有eip在game.dll里的线程的Eip到新的game.dll区域,然后修改新的game.dll内存区域的代码。然后激活线程,继续走起。

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

收藏
免费 0
支持
分享
最新回复 (105)
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
嘿嘿,v大的方法,刚去测试下。对好多游戏都秒杀就是兼容性不太妙
2014-5-3 19:20
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你这肯定不行。旧的game.dll,里面有很多运算了一半的局部变量了。你新reload一个game.dll,里面的局部变量都是初始值,然后你再修改eip到新的game.dll,那很多变量数值是不同的,会出错误的。
2014-5-3 19:27
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那就把变量都复制到新的啊
2014-5-3 19:31
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
所有变量你都能搞定啊?不可能的。你都分不清哪些有影响,哪些无影响,哪些地址是有用的变量,哪些是可执行代码。
2014-5-3 19:35
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
6
其实没那么难~
2014-5-3 21:42
0
雪    币: 294
活跃值: (119)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
V大求指点- -
2014-5-3 23:44
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
局部变量是在堆栈上面的,不修改ESP就不会变
至少我的API hook就是用全模块复制的方法,省去分析原函数汇编代码的麻烦
2014-5-4 00:05
0
雪    币: 66
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
三楼别说空话,自己实现就知道行不行。
我觉的方法可行,以前实现过创建进程入口时复制整个镜像在有壳的情况下行不通
这个方法会好用很多,学到一招
2014-5-4 04:11
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
堆栈中的变量当然可以搞定,问题是还有一些变量时占用固定内存单元的,比如假设某个函数有个计数器,
你第一次调用,他计算为1,你第二次调用,他计数为2,这个计数器地址肯定不会在堆栈中,而是某个固定地址。你的 reload 新的  game.dll,那么计数器值肯定为0。那样就会错误。
2014-5-4 08:12
0
雪    币: 148
活跃值: (298)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
各种实时校验搞掉你,什么是实时知道吗?
2014-5-4 19:25
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
其实reload game.dll就是把game.dll所占的内存直接复制一份(这里根本就不涉及重定位。)
然后切换EIP~

哪里会触发什么问题~~
呵呵~
2014-5-4 22:15
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
那玩意不叫局部变量好吧?明明就是全局变量
如果直接复制DLL内容到其他区域,并保证原DLL仍然存在于内存中,那么对于全局变量的操作还是指向原DLL的区域,因为全局变量一般都是绝对寻址

好吧,看到#12才发现讲的不是一回事.这里的Reload不是手动模拟加载,只是内存复制而已
2014-5-5 08:14
0
雪    币: 6344
活跃值: (4492)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
果断不匹配。
2014-5-5 08:30
0
雪    币: 7860
活跃值: (4734)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
现在复制一份副本GAMEDLL在11早不行了,特征码查一下就知道有副本DLL了,妥妥的被T出游戏
2014-5-5 10:28
0
雪    币: 896
活跃值: (4939)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
复制一份内存 修改EIP 会跳回去的,太多地方要修了~
2014-5-5 14:08
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
反正就是不规范代码你就搞不定。当然如果现在都用c++编译器编译出来的代码,数据分开放,那这样就可以。不规范代码里面的数据是到处存在的,我任意汇编出来的,你能搞定?
2014-5-5 18:47
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
而且这中间存在一个问题,你说修改eip,那有些线程,还没有执行到你的game.dll区域,你检测是不修改eip的,等完了,过一段时间,你这个没检测到的线程就按原来的执行过程,call到原来的game.dll区域了。

再说你检测了修改 eip 的线程,人家执行完你修改的game.dll,ret回去了,下次再call的时候,仍然call到原来的 game.dll去了,因为你没有修改call xxxxxx的指令。所以你这次修改eip仅仅对这一次调用有效,等人家返回return,然后再call的时候,仍然是call原来的指令。
2014-5-5 18:52
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
叫局部还是全局变量不重要,就说吧,game.dll里面就没有数据段吗,数据段的数据,你复制到新的game.dll是不是为0? 你说全局,是game.exe的数据段是全局变量。然后局部变量是调用某个函数的时候,存放在堆栈中的。可是,game.dll,还有其他的模块,一样可以有自己的数据存放在自己的数据段中,而不是堆栈中,也不是game.exe中。game.exe的数据段里面的数据才叫全局变量好吧。
2014-5-5 18:56
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
20
不会的啊,特征码扫的时候,是要判断内存有效性的。

多思考一下吧,少年~
2014-5-5 20:46
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
21
这个东西实现思路的问题。

反正我没suspend线程,也没改线程eip,我有另一种方式。

贴个图,能看懂的就看懂了,不懂就不懂吧~

上传的附件:
2014-5-5 20:52
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
你就算是正常x86汇编都是相对寻址的,你要用绝对寻址反而要自己手写汇编代码,汇编器不会生成这样的代码,因为代码长度会增加



卧槽,你都知道是复制了,你还问我是不是为0,当然不是0了.是0也无所谓,反正也调用不到
game.dll加载的其他模块有数据没错,所以?我都没复制他们啊!那些模块该咋样咋样

我不会再回复你了,反正我自己的hook库就是用这个方法的,没有看到任何问题
你就知道说说说,你有自己试过么?
2014-5-5 21:39
0
雪    币: 217
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
对于调用频繁的代码,效率低得一塌糊涂。。。
2014-5-5 23:06
0
雪    币: 294
活跃值: (119)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
24
同上
2014-5-5 23:46
0
雪    币: 7860
活跃值: (4734)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
[QUOTE=cvcvxk;1281234]这个东西实现思路的问题。

反正我没suspend线程,也没改线程eip,我有另一种方式。

贴个图,能看懂的就看懂了,不懂就不懂吧~

[/QUOTE]

懂了,有空试试看,确实改内存页属性后不能扫特征码了,忘记这茬了。
2014-5-6 08:13
0
游客
登录 | 注册 方可回帖
返回