能力值:
( LV2,RANK:10 )
|
-
-
2 楼
嘿嘿,v大的方法,刚去测试下。对好多游戏都秒杀就是兼容性不太妙
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
你这肯定不行。旧的game.dll,里面有很多运算了一半的局部变量了。你新reload一个game.dll,里面的局部变量都是初始值,然后你再修改eip到新的game.dll,那很多变量数值是不同的,会出错误的。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
那就把变量都复制到新的啊
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
所有变量你都能搞定啊?不可能的。你都分不清哪些有影响,哪些无影响,哪些地址是有用的变量,哪些是可执行代码。
|
能力值:
( LV12,RANK:760 )
|
-
-
6 楼
其实没那么难~
|
能力值:
( LV5,RANK:70 )
|
-
-
7 楼
V大求指点- -
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
局部变量是在堆栈上面的,不修改ESP就不会变
至少我的API hook就是用全模块复制的方法,省去分析原函数汇编代码的麻烦
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
三楼别说空话,自己实现就知道行不行。
我觉的方法可行,以前实现过创建进程入口时复制整个镜像在有壳的情况下行不通
这个方法会好用很多,学到一招
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
堆栈中的变量当然可以搞定,问题是还有一些变量时占用固定内存单元的,比如假设某个函数有个计数器,
你第一次调用,他计算为1,你第二次调用,他计数为2,这个计数器地址肯定不会在堆栈中,而是某个固定地址。你的 reload 新的 game.dll,那么计数器值肯定为0。那样就会错误。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
各种实时校验搞掉你,什么是实时知道吗?
|
能力值:
( LV12,RANK:760 )
|
-
-
12 楼
其实reload game.dll就是把game.dll所占的内存直接复制一份(这里根本就不涉及重定位。)
然后切换EIP~
哪里会触发什么问题~~
呵呵~
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
那玩意不叫局部变量好吧?明明就是全局变量
如果直接复制DLL内容到其他区域,并保证原DLL仍然存在于内存中,那么对于全局变量的操作还是指向原DLL的区域,因为全局变量一般都是绝对寻址
好吧,看到#12才发现讲的不是一回事.这里的Reload不是手动模拟加载,只是内存复制而已
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
果断不匹配。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
现在复制一份副本GAMEDLL在11早不行了,特征码查一下就知道有副本DLL了,妥妥的被T出游戏
|
能力值:
( LV3,RANK:20 )
|
-
-
16 楼
复制一份内存 修改EIP 会跳回去的,太多地方要修了~
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
反正就是不规范代码你就搞不定。当然如果现在都用c++编译器编译出来的代码,数据分开放,那这样就可以。不规范代码里面的数据是到处存在的,我任意汇编出来的,你能搞定?
|
能力值:
( 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原来的指令。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
叫局部还是全局变量不重要,就说吧,game.dll里面就没有数据段吗,数据段的数据,你复制到新的game.dll是不是为0? 你说全局,是game.exe的数据段是全局变量。然后局部变量是调用某个函数的时候,存放在堆栈中的。可是,game.dll,还有其他的模块,一样可以有自己的数据存放在自己的数据段中,而不是堆栈中,也不是game.exe中。game.exe的数据段里面的数据才叫全局变量好吧。
|
能力值:
( LV12,RANK:760 )
|
-
-
20 楼
不会的啊,特征码扫的时候,是要判断内存有效性的。
多思考一下吧,少年~
|
能力值:
( LV12,RANK:760 )
|
-
-
21 楼
这个东西实现思路的问题。
反正我没suspend线程,也没改线程eip,我有另一种方式。
贴个图,能看懂的就看懂了,不懂就不懂吧~
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
你就算是正常x86汇编都是相对寻址的,你要用绝对寻址反而要自己手写汇编代码,汇编器不会生成这样的代码,因为代码长度会增加
卧槽,你都知道是复制了,你还问我是不是为0,当然不是0了.是0也无所谓,反正也调用不到
game.dll加载的其他模块有数据没错,所以?我都没复制他们啊!那些模块该咋样咋样
我不会再回复你了,反正我自己的hook库就是用这个方法的,没有看到任何问题
你就知道说说说,你有自己试过么?
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
对于调用频繁的代码,效率低得一塌糊涂。。。
|
能力值:
( LV5,RANK:70 )
|
-
-
24 楼
同上 
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
[QUOTE=cvcvxk;1281234]这个东西实现思路的问题。
反正我没suspend线程,也没改线程eip,我有另一种方式。
贴个图,能看懂的就看懂了,不懂就不懂吧~
 [/QUOTE]
懂了,有空试试看,确实改内存页属性后不能扫特征码了,忘记这茬了。
|
|
|