爱内涵易语言

 找回密码
 立即注册

在线
客服

会员永久免费学习服务时间: 9:00-24:00

选择下列客服马上在线沟通:

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

关注微信二维码
顶部
查看: 1705|回复: 2

游戏Call技术-绑定主线程调用CALL技术(反游戏检测call)

[复制链接]

1025

主题

1097

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

金币
9845
巨币
7975
积分
37830
发表于 2020-5-27 20:18:50 | 显示全部楼层 |阅读模式
我们在写call调用游戏进程里call时候,经常外挂运行工作一段时间后,游戏就会断线或崩溃掉,但是经过检查,/ P- |6 }; b2 E/ ?$ m) K
发现自己调用CALL的代码又没发现写错误,这到底是怎么呢?{:100_162:}7 J2 v& G: _/ ?6 J$ N% `
其实这些是现在游戏的一些游戏反外挂检测导致的,并不是我们调用call的代码没写对,
/ G  L+ j; d# A! `) x! W6 H现在的游戏调用自己游戏进程里的各种CALL,都是游戏自己的主线程来执行的,如果不是游戏的主线程调用CALL,
' m6 ^4 J* @8 p. {/ t# r' u就会奔溃或游戏掉线,$ `  \9 ~' _6 i2 A" k! }: ]" l

4 X3 \" G3 x' t4 s1 u! ^$ r, O所以我们的外挂程序都是在游戏进程里创建新的线程来执行我们的代码的,创建来线程不是游戏的主线程,4 z! t3 r7 @# p: R( c
只是游戏进程里的子线程,如果游戏会对CALL调用时候检测是不是自己进程的主线程来执行的,; v2 ]/ ]/ t9 G5 @2 b" x. `$ B3 i
就会认为是非法调用CALL的外挂程序,所以就会断掉自己的网络,来阻止我们外挂操作游戏!{:100_172:}
. f0 V, T5 U1 x+ _
0 z$ Z. e' S* O+ F下面为了生动点让大家了解这里面的道理,我们来设计一个模拟游戏程序.exe* y- p6 Q: z  C- q5 t; N
模拟游戏程序.exe 的代码如下:
+ d9 M6 r9 y% @1 p* }$ I. f
0 |# a: D( Q; z5 S
- X5 Z  W4 k& `7 D里面设置一个测试函数,这个函数在被调用时候  [6 Z$ A. H, s: V
会判断是自己进程里的主线程执行的,还是外界其他程序创建线程(非自己主线程)来执行调用的。然后做出相关提示
9 k: W: Y: q% G) i% K8 ^, y来真实模拟游戏以自身主线程来执行自己进程内函数的效果,2 b' m$ c7 ~  i* O& M; o
如发现不是自己进程主线程调用函数,就弹出警告(相当于游戏崩溃或掉线)
+ `% @, ^9 n" w. m再贴上调用模拟游戏程序.exe 里面的测试函数,的调用函数.exe代码:
5 R$ q8 x- O8 z. i$ i3 a, ]$ [0 F, E7 |0 i5 T4 ^0 U9 A: X
" v  ]8 R  [1 ~& s8 ]( v: O( ]
调用函数.exe 就相当于我们的外挂程序,调用指定进程里的函数CALL功能,这里我演示了2种调试方式
. j5 u* F, f; ?- ~  T0 w一种是普通调用我们的代码,一种是绑定游戏(模拟游戏程序.exe)主线程来调用我们的代码。5 D5 b5 i4 W# g- L+ K7 r. S
好了,我们来看测试效果:
, H* D4 N. N- a1 I3 {2 b  Q9 m: Q5 F& h! M* W0 [
运行后,我们发现,当我们的外挂(调用函数.exe)以普通方式调用游戏(模拟游戏程序.exe)进程里的CALL时候,, ]4 O& {' j' i" j5 Z' E
游戏发现不是自己进程主线程去执行的,就弹出了警告信息框(相当于游戏自动掉线或崩溃),
3 T( D# s; \4 y$ \# B( U5 U  z而发现是自己主线程来去执行的,就正常运行!
8 {& N+ S. Y% s1 V8 y4 G# U6 V9 Y& K( y
.子程序 调用函数E, 整数型, 公开, 执行指定进程中某个函数入口,返回函数执行后的EAX值.
" s$ G5 K1 c  e  N: J8 b7 Q.参数 进程句柄, 整数型, , -1=自身进程.欲调用的函数所在进程句柄
; l! b* \& f- E) C.参数 函数地址, 整数型, ,. Z+ l* M" f8 j+ K/ A
.参数 函数参数, 整数型, 可空 数组, 空=无参数,可以提供多参数.OD分析CALL指令往上推算,离CALL最近为参数[1].再往上是 参数[2]…* q* S# L6 ^, T, A  c
.参数 寄存器, 类型_寄存器, 可空, 可以设置各个CPU寄存器的值,注意 不支持设置 EBP,ESP,ST浮点数 这些寄存器.: a! S! w  }+ G2 W: ?: w6 e
.参数 绑定线程, 整数型, 可空, 提供绑定线程的线程句柄,代码将在该线程环境执行.空=0=自进程时在现线程下执行,跨进程将创建远线程执行
7 ^& U3 X5 O6 ?* }.参数 取消保护, 逻辑型, 可空, 默认=假=采用SEH异常保护机制,真=不使用异常保护.若保护后CALL无效,再试试取消保护.
& }/ ?- g# b# Z2 \0 o3 j) G
. h- Y1 N9 Y+ ^4 F7 g8 K调用函数E/ Q" D& X( C7 y, w) D7 i+ J
命令可以绑定目标进程里指定的线程ID,来执行我们的代码,这样就可以有效的躲避对CALL调用的线程检测了,
  G+ Y$ Y; R- ]% _1 @但是如果游戏有Lua的话,使用时候要避免与游戏本身中的lua事件岔开调用时间,否则游戏自己主线程执行lua时候,; t: |& ]: L7 \* ^! H
你再这个时候进行抢占游戏主线程去执行你的call代码,就会导致游戏崩溃,所以每次CALL的时候,最好间隔时间调用!1 X+ S+ u9 \! U9 o0 b2 }; Y9 Q
, f6 H6 R& Y4 O3 w( p( ~* }% Z3 a
如果是外挂是DLL,那么在DLL里要绑定线程执行代码的话,可以使用 模块6.5里面的 线程_调用 ()命令即可!
# Z* c* a% L. P3 b3 L+ J: ?& }% R5 x* t" ]: |( B
最后说一句:
% u1 t; A' d- J, n9 {9 A不是我军不够强大,只怪游戏太狡诈,以各种手段来阻止我们外挂,但是道高一尺魔高一丈,
) l. q) I: v* d3 G! @9 {只要知道了游戏的检测把戏.我们就有方法来对待( b. P; G: g. V$ ~5 T; C
. G: A3 U& I; t4 \/ W5 `  k: U

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
爱内涵论坛关注易语言与按键精灵的脚本辅助软件开发领域。                     VIP视频目录            VIP会员介绍            联系客服加入会员            爱内涵免费①群            爱内涵免费②群            爱内涵免费③群            自助加入会员
回复

使用道具 举报

0

主题

2

帖子

1

积分

程序员

Rank: 1

金币
0
巨币
4
积分
1
发表于 2021-1-21 16:34:32 | 显示全部楼层
模块呢~~~~~~~~~~~~~~
爱内涵论坛关注易语言与按键精灵的脚本辅助软件开发领域。                     VIP视频目录            VIP会员介绍            联系客服加入会员            爱内涵免费①群            爱内涵免费②群            爱内涵免费③群            自助加入会员
回复

使用道具 举报

0

主题

32

帖子

28

积分

终身VIP+

Rank: 5Rank: 5

金币
0
巨币
112
积分
28
发表于 2021-1-22 06:03:22 | 显示全部楼层
模块呢~~~~~~~~~~~~~~
爱内涵论坛关注易语言与按键精灵的脚本辅助软件开发领域。                     VIP视频目录            VIP会员介绍            联系客服加入会员            爱内涵免费①群            爱内涵免费②群            爱内涵免费③群            自助加入会员
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【加入会员,永久免费学习】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|爱内涵易语言 ( 浙ICP备19016710号-3 )|网站地图

GMT+8, 2021-2-25 01:39 , Processed in 0.130115 second(s), 12 queries , Gzip On, File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表