一般情况下 按照以下处理方式就可以避免了

例如 龙OL 这样处理就不会被检测到非法调用call了

在游戏地址空间找到一处空位置 写入如下机器码

004014D9 58 pop eax ; 弹出返回地址

004014DA A3 E8144000 mov dword ptr ds:[4014E8],eax ; 保存返回地址

004014DF 58 pop eax ; 弹出选怪call地址

004014E0 FFD0 call eax ; 在游戏空间内调用了选怪call

004014E2 - FF25 E8144000 jmp dword ptr ds:[4014E8] ; 返回调用处

004014E8 90 nop ; 004014E8下面4个字节用来保存返回地址

004014E9 90 nop

004014EA 90 nop

004014EB 90 nop

004014EC 90 nop

004014ED 90 nop

004014EE 90 nop

下来我们看看 怎么调用他 (004014D9)

004014D4 90 nop

004014D5 C2 0400 ret 4 ; 比如这里是有一个参数的选怪call 所以是 ret 4

004014D8 90 nop

push 1 ;压入选怪参数

push Spy4Win.004014D5 ; 压入选怪call地址 比如这个地址是选怪call

mov eax,Spy4Win.004014D9 ; 这里是我们在exe地址空间内找到的可用地址

call eax

这样 到选怪call以后 调用选怪call的就是游戏自己了

另外还有一种检测方式就是游戏检测是否是游戏窗口主线程在调用游戏的call

这种方式就通过hook游戏窗口过程 也就是窗口子类化

子类化以后通过发送自定义消息给游戏窗口来实现在游戏窗口主线程中调用游戏call

感谢您的阅读,本文由 smallwhite's Blog 版权所有。如若转载,请注明出处:smallwhite's Blog(https://smallwhite.ml/pub/uncategorized/jian-dan-tan-xia-zen-me-bi-mian-you-xi-jian-ce-fei-fa-diao-yong-call.html
剽窃核心编程 共享区段共享数据 另外还有一个不太明白的 RegisterWindowMessage
一个简单的纤程演示... 还有核心编程上的 纤程 例程