一款游戏的喊话CALL的解决新思路

最近在研究一款网络游戏的喊话CALL,记录如下

找call非常容易

 

喊话CALL :
 
特征码:83 C4 10 8D 44 24 14 50 56 8B CD
 
-- cpu --
006F6A9F      |. 8D4424 14         LEA EAX,DWORD PTR SS:[ESP+14]
006F6AA3      |. 50                PUSH EAX                                  ; /Arg2
006F6AA4      |. 56                PUSH ESI                                   ; |Arg1
006F6AA5      |. 8BCD              MOV ECX,EBP                         ; |
006F6AA7      |. E8 64FAFFFF       CALL Moon.006F6510        ; \Moon.006F6510
 
0018EDE0   00000001  ...  |Arg1 = 00000001
0018EDE4   0018EDFC  .   \Arg2 = 0018EDFC ASCII "123456"
-- register --
EAX 0018EDFC ASCII "123456"
ECX 1FA1A7C4
ESI 00000001
 
mov ecx,1FA1A7C4     ;ecx平衡值
push 0018EDFC          ;喊话内容内存地址
push 00000001          ;喊话类型
call 006F6510
或者:
push 04FE0000     ;喊话内容内存地址
mov ecx,158C469C;ecx平衡值
call 006f69b0
 

一款游戏的喊话CALL的解决新思路_第1张图片

 

 

 

这里找ecx平衡值就比较麻烦了,各种方法都找不到【ce、od组合查找】(可能水平还不够就是找不到,求大神指点)

找不到这个平横值,那就郁闷了。。。。

最后想到一个比较笨的方法,就是仿照CE搜索内存数据,依据如下:

在“喊话”过程中发现,虽然平衡值地址[1FA1A7C4] 是一个变值,但是,其对应的数据内容是不变的,所以就是根据数值内容去搜索游戏进程的内存数据,多次试验发现会

搜索到三个地址: 数组:3{7224874,7304364,474235804} ,把其前两条过滤掉,其实用ce搜索的话只能搜索到第三条;

所以这样就可以完美解决喊话了。

哈哈!方法虽然很笨,但很适用,算是一种写call的方法吧,分享给需要的同学。

另把结果贴一下:

一款游戏的喊话CALL的解决新思路_第2张图片

一开始写的时候,用的自带模块申请内存,不好使,总是乱码,并且申请的内存是WG的内存而不是游戏的远程内存,

换超级模块的也是不成功,最后内存申请换成“清风”模块的就好了。如果不用模块就得自己引入DLL了,麻烦。。。。

执行结果是这样的:

总结:

变换思考,值不变,地址变化,不好搜索基址,就得另辟蹊径了。

你可能感兴趣的:(逆向工程,call,基址重定位)