爱内涵论坛 - 易语言教程论坛

 找回密码
 立即注册
搜索
查看: 388|回复: 0

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

[复制链接]

859

主题

914

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

金币
9855
巨币
5965
积分
37252

2019年众筹小组s2019年众筹小组ss2019年众筹小组sss

发表于 2020-5-27 20:18:50 | 显示全部楼层 |阅读模式
我们在写call调用游戏进程里call时候,经常外挂运行工作一段时间后,游戏就会断线或崩溃掉,但是经过检查,$ |+ p% l* c$ ]0 g6 N  z+ p: a; [
发现自己调用CALL的代码又没发现写错误,这到底是怎么呢?{:100_162:}
3 [, ~% \$ D; y/ Y8 ?5 \7 D其实这些是现在游戏的一些游戏反外挂检测导致的,并不是我们调用call的代码没写对,
# j# K$ i* ~0 n7 N现在的游戏调用自己游戏进程里的各种CALL,都是游戏自己的主线程来执行的,如果不是游戏的主线程调用CALL,
, S7 [$ V+ E" m( V9 r就会奔溃或游戏掉线,
% P& a8 f' ]- h3 e; E: h* _8 s  O: L0 [- \
所以我们的外挂程序都是在游戏进程里创建新的线程来执行我们的代码的,创建来线程不是游戏的主线程,: B% v  O; ~, b, _6 n. S4 l
只是游戏进程里的子线程,如果游戏会对CALL调用时候检测是不是自己进程的主线程来执行的,# R- s- Q1 d+ v$ H* J$ R
就会认为是非法调用CALL的外挂程序,所以就会断掉自己的网络,来阻止我们外挂操作游戏!{:100_172:}' g0 i8 U, B6 S: _) M% f

8 K" G5 ^$ b+ D  T下面为了生动点让大家了解这里面的道理,我们来设计一个模拟游戏程序.exe# u2 s7 f$ Q" {
模拟游戏程序.exe 的代码如下:& p  F' f  N5 s6 v
; t/ E  [- S8 I/ }6 F% q

! M; l+ R- V% i) N2 _% v里面设置一个测试函数,这个函数在被调用时候' D- h" U& l$ `
会判断是自己进程里的主线程执行的,还是外界其他程序创建线程(非自己主线程)来执行调用的。然后做出相关提示7 x4 [6 [- [  E( s. g% R; R
来真实模拟游戏以自身主线程来执行自己进程内函数的效果,+ {6 G7 r% H! o3 H
如发现不是自己进程主线程调用函数,就弹出警告(相当于游戏崩溃或掉线)
2 f. X3 p% H. H再贴上调用模拟游戏程序.exe 里面的测试函数,的调用函数.exe代码:
" _2 |4 d! f2 N% [4 [6 e4 y  J2 k6 n
* j4 ]# V) f6 J/ l$ S
8 m: l" Y' D$ b' u$ T& r8 a调用函数.exe 就相当于我们的外挂程序,调用指定进程里的函数CALL功能,这里我演示了2种调试方式
0 B- x( S3 G  ~2 d" P  N一种是普通调用我们的代码,一种是绑定游戏(模拟游戏程序.exe)主线程来调用我们的代码。* [4 g/ V9 C3 x7 K
好了,我们来看测试效果:7 R7 @2 x! `" h2 e# U
( H3 d1 A0 f1 K8 {' U  g
运行后,我们发现,当我们的外挂(调用函数.exe)以普通方式调用游戏(模拟游戏程序.exe)进程里的CALL时候,7 i/ N) p2 |, u8 P0 t
游戏发现不是自己进程主线程去执行的,就弹出了警告信息框(相当于游戏自动掉线或崩溃),- `; n: V5 Y. q
而发现是自己主线程来去执行的,就正常运行!
1 r, i* w) w% e" N; l7 y  q, n: m: g. X8 E. |# A+ G) v! {
.子程序 调用函数E, 整数型, 公开, 执行指定进程中某个函数入口,返回函数执行后的EAX值.
/ ~5 u3 F* W  U; M7 E+ B7 @.参数 进程句柄, 整数型, , -1=自身进程.欲调用的函数所在进程句柄
; p6 g7 y) D" A  e$ h# c, c# {  B.参数 函数地址, 整数型, ,2 n9 b" Q7 h0 T4 h2 y' H5 |  e
.参数 函数参数, 整数型, 可空 数组, 空=无参数,可以提供多参数.OD分析CALL指令往上推算,离CALL最近为参数[1].再往上是 参数[2]…& Q$ b; L0 M7 }, ^, X6 C
.参数 寄存器, 类型_寄存器, 可空, 可以设置各个CPU寄存器的值,注意 不支持设置 EBP,ESP,ST浮点数 这些寄存器.
( |: f$ ~  e- H8 |6 `1 L.参数 绑定线程, 整数型, 可空, 提供绑定线程的线程句柄,代码将在该线程环境执行.空=0=自进程时在现线程下执行,跨进程将创建远线程执行$ m! m' _- Q/ f3 E$ N2 N! Y5 K
.参数 取消保护, 逻辑型, 可空, 默认=假=采用SEH异常保护机制,真=不使用异常保护.若保护后CALL无效,再试试取消保护.
& G6 F# e! q$ G. V! S
( s" F; K5 w$ Q/ Z+ V调用函数E  s# S- s) _; R% m/ r6 {
命令可以绑定目标进程里指定的线程ID,来执行我们的代码,这样就可以有效的躲避对CALL调用的线程检测了,
3 g* }4 s8 o, n) G3 j" ^但是如果游戏有Lua的话,使用时候要避免与游戏本身中的lua事件岔开调用时间,否则游戏自己主线程执行lua时候,8 \# v9 t) v) m3 }+ r
你再这个时候进行抢占游戏主线程去执行你的call代码,就会导致游戏崩溃,所以每次CALL的时候,最好间隔时间调用!
- B% X4 L& F" T6 N: M1 Y$ ]
, k% \, [  u# h& y" j, {* d( c如果是外挂是DLL,那么在DLL里要绑定线程执行代码的话,可以使用 模块6.5里面的 线程_调用 ()命令即可!
2 ~/ v% B* W$ ?! S3 r1 I- i' |
- B% E" {( ^' }% b, A  W最后说一句:
6 `8 T7 O7 z( T2 X8 q4 p不是我军不够强大,只怪游戏太狡诈,以各种手段来阻止我们外挂,但是道高一尺魔高一丈,
$ Q- A, x/ y% \/ j' Q  x" D+ m只要知道了游戏的检测把戏.我们就有方法来对待3 `3 S7 U# P. O. N

+ X8 y. I% N3 @

本帖子中包含更多资源

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

x
温馨提示:
1、本站中所有被学习和研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何视频、软件以及其他资源,仅限用于学习和研究的目的。
2、全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。
3、学习技术是为了更好的完善可能存在的不安全因素,提升自身技术水平。所以您如果喜欢某个视频、资源,请购买注册正版,获得正版优质服务!
4、不得将上述内容私自传播、销售或者其他任何非法用途!否则,一切后果请用户自负!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|爱内涵论坛 ( 浙ICP备19016710号-3

GMT+8, 2020-10-24 22:37 , Processed in 0.880226 second(s), 13 queries , Gzip On, File On.

Powered by Discuz! X3.3

© 2001-2020 爱内涵论坛

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