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

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

游戏外挂制作技术分析

[复制链接]

859

主题

914

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

金币
9855
巨币
5965
积分
37252

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

发表于 2020-6-2 22:13:18 | 显示全部楼层 |阅读模式
最近在学习逆向分析和外挂编程,总结了外挂开发的基本思路和一些初级的技巧和经验。1 E. z( _8 J# e/ f' [5 p: H/ W' `
首先说说基本思路,我觉得外挂开发主要分为两部分:
0 ]/ l6 a$ d7 x7 s7 q- D. v/ v
  • 对游戏的分析调试,主要是找基址和call地址等游戏信息。
  • 使用编程工具进行外挂功能开发,比如用delphi或者VB、VC等自己熟悉的一种开发工具进行开发。+ ^0 v3 m- r! p
% q0 X' @! H+ x& F. F* D; {1 H2 U
6 Z' C9 J$ x5 W) L8 R
开发中使用的技巧一般包括:) n! d' e1 }. j; T6 h6 S
  • 窗口查找
  • 获得窗口句柄
  • 获得进程句柄
  • 读取游戏进程内存
  • 修改游戏进程内存
  • 远程call调用等
    ; B6 _' ?% r/ b0 \5 L: g8 m
3 _/ g( w8 }  g3 n) B2 V

9 r7 p% P5 ?& p% \( K" M通过学习和交流发现用简单的小游戏入门还是很容易的,下面我就以QQ挖金子游戏为例与大家分享我的入门经历吧。* i3 S& j' V: }; N5 f/ R+ t& s
* e2 b7 t3 y* b# O1 }
工欲善其事必先利其器,首先说说我们要使用的工具吧.对于刚入门的一来说首先掌握几款常用的工具即可,对于简单的游戏分析,调试工具使用CE即可,编程工具我们使用DELPHI7(当然也可以使用delphi2010,不过推荐使用delphi7,因为delphi7的绿色U盘版很好用、很方便哈),需要一个辅助工具SPY++,不过delphi7的绿色版已经集成了很多辅助工具。
& m/ |) \3 p; T6 f( j4 ?如果感觉delphi难上手,我们可以使用易语言。2 r! k0 v- ~( \* N; h6 `1 {
: Y7 S3 s3 R. Q. j' e" v
第一部分:游戏调试篇
" x& ?7 A: w4 O! D
9 ~: l" A7 Q- g7 ], E6 U4 x7 Y6 U在开始编程之前,首先是对游戏进行分析,获得游戏窗口基本信息和数据内存基址,这一步需要有一定的逆向工程能力和耐心。' R+ q) l4 k. a

+ c0 j$ x- R$ A1 e  h第一步:游戏窗口信息的获取
4 b* G9 o9 [$ X, C* |! q
/ c' B- x! F% q' [( ~首先是获得窗口标题信息,我们可以用SPY++这类工具进行分析,不过在分析的过程中发现SPY++是无法查到挖金子游戏窗口标题的(看来腾讯是把微软的这个窗口分析工具给屏蔽了),因此我们使用delphi7绿色版自带的工具Spy4Win来进行查找,方法比较简单:
# s4 _# h! A! G4 G- g6 ]
  t7 F3 g+ S3 P& l在delphi7的“Tools”菜单下找到工具“Spy4Win”,如图一所示
& G  w9 r9 p0 o6 b. f6 ]$ A9 X8 U1 I- g2 r9 m" }

; q# r3 a5 R, v3 w: N2 Q, p然后拖动Spy4Win界面上的小狗图标到QQ挖金子游戏窗口,就可以查看窗口信息了。查找到的信息如图2所示:8 E! Q, I  j; [1 I
% _8 G4 Q2 [0 P( m" L! X, h+ ]6 k
在工具的“代码”页可以看到关于窗口句柄查找的api函数,而且还有vc、vb、delphi三个版本的说明,这对编程是有一定帮助的。如图3所示:
; |4 ?* L! s  p$ `7 v) y- d1 P8 U5 h: D; Q4 ]! b& R7 o
记录这些信息,我们继续下一步的分析。其实只要记住图3中的代码即可。; g8 Y# C8 S0 c/ g2 _, k* x
第二步:游戏内存地址的获取& s) Y( t/ G( M, b. k
分析游戏数据在内存中的地址是比较重要的,因为外挂的原理一般都是通过对游戏数据的操作来实现外挂功能的。首先我们确定要查找的数据:座位号、时间、踩雷数据等。9 V6 C; v) T. x1 {
打开CE,附加游戏进程,如图4所示:
; c/ L5 [: b  |' m4 q: P5 N8 L. s. m# W/ \1 q% E- K2 k+ w9 A
然后变换座位号,用CE查找变化的数据。操作方法如下:首先设置扫描类型为“未知初始化数值”、数值类型为“字节”,然后点击“首次扫描”进行数据获取。如图5所示:
) s, a) F5 R$ \# V  K: M4 a/ W, q8 _1 a( Q. k: k
这样会找到很多结果,然后在QQ游戏大厅中,换座位,再在CE窗口中设置扫描类型为“更改的数值”,点击“再次扫描”进行数据的筛选。如图6所示:! F$ s) r$ H3 r% @
% ], e' `5 J1 @
如上步骤反复筛选,在结果栏中绿色数据就是我们要找的座位号基址了。然后双击这个基址将其保存在下面的数据监视窗口进行实时查看。如图7所示:
, I# z2 H9 i7 n: M0 ]9 n. D/ W! ^2 A( d2 _. Y) Z5 T; s. k
那么座位号基址就是:0043E1F4。下面我们来查找其他数据了,查找其他数据的方法与此类似,游戏开局以后,时间的值会逐渐减少,那我们就可以用CE查找“减少的数值”进行筛选。如图8所示:: x8 N2 b7 c- C6 p

3 f& S+ \( P- c" X0 X) R1 L时间的基址是:0043E0A9。下面再查踩雷的数据地址,一开始找这个地址的时候有点麻烦:在没有踩雷时在CE中扫描“未知初始化数值”,踩雷后在CE中扫描“更改的数值”,然后在挖金子中点击“取消”后,回到CE中扫描“更改的数值”,多次踩雷后扫描后发现三个基址。也发现一个规律:踩雷后这三个地址的数据变为1,未踩雷或者点击“取消”后者三个数据都为0,因此大家在找这三个基址的时候可以使用这个规律进行快速查找,如图9所示:% A! v3 Z1 I* U( Q, j+ j
" L  ?# E; z3 g9 C0 l  Q
踩雷的基址是:0043C698、0043C788、0043E06C。只要让这3个地址的数据一直为0就可以实现踩雷不死了。得到了这些游戏数据在内存中的地址后,我们就可以通过编写代码来实现外挂功能了。
8 M( K$ ?2 X# ~
) [$ K: b% n" q, n) L第二部分:外挂编程篇1 M+ [4 I1 Q4 A2 w6 W" ]* ]( j
编程我们主要使用delphi来实现,你也可以用易语言来实现。基本原理都是一样的,调用的API函数基本也是一样的。界面可以如图10设计:
6 p) M. k* ^4 O: V, o
: V& Q0 S  r! n' R# [下面就是编写功能代码了,主要介绍核心代码,完整工程及外挂程序关注5ecurity公众号领取。* x+ j2 R' y9 i0 \7 |  |/ }
4 p8 i. H+ [# B% H

# f; i# s9 k) J- L+ X# x1 k第一步:进程句柄获取
8 e: @; i( j5 y5 N获得了游戏的基本信息就可以通过编程来实现几个简单的功能了。关于api函数的说明MSDN中说的很详细了,这里就不多说了,核心代码如下:
) j/ m+ a7 h+ }, B' e! K5 X" z2 T3 q2 V! q
begin
* m. g2 f! Y5 s- P$ o3 o- g5 Z3 }+ W" t5 {# t; a" p- ~
  //获取挖金子游戏窗口句柄8 j/ ?7 k9 ?% B' U% |  C* @3 Y4 m( w
( ]  x2 G0 U+ t; k
  Gameh:=findwindow('#32770','挖金子');" E$ r: B. J! E7 p/ R8 z
- n' W! d4 n  m& W! m
  //通过窗口句柄获取进程ID4 j+ j* a- M4 n) o

$ i. s; k+ G6 `) R  GetWindowThreadprocessID(Gameh,GamePid);
; v7 Y; _$ y2 L' w0 a, f
  C: \* ~6 s2 H* R& o; }  //获取进程句柄( J/ b; u8 h* F# I0 p5 k

' T& R, h! g2 i$ `; w+ v% K gamehProcess:=OpenProcess(windows.PROCESS_ALL_ACCESS,false,GamePid);/ l% Q4 e1 s6 H6 q

7 z* l2 o9 X, dend;+ T& B; L; s6 O& W9 L8 Z* v
5 S3 `2 I+ ~# a  i5 W3 v
第二步:修改内存数据
7 C4 w/ N" g: U. o1 \首先是时间无限功能的实现,这个功能可以通过定时修改时间基址的数据实现,我用的是时间控件实现的,时间间隔为每秒。
6 M' q7 T6 ], ~6 r/ Z; S$ b: }: Q  s$ w' R& ]/ Z1 `7 N6 d7 d
  timestop:=30000;4 C: _* N. }" ]* @+ H

; h* {: O  Q5 y; j2 l$ j  Writeprocessmemory(gamehProcess,pointer($0043e0a8),@timestop,4 ,WriteByte);
$ L4 X' P: i1 j% k; o$ }5 E; e8 s" Z5 u
秒杀功能可以通过修改座位号的方法实现,在调试时发现座位号是这样分布的0、1、2、3代表上、右、下、左四个座位,如果将座位号复制为其他不存在的数据,则可实现秒杀的效果,这应该是游戏的一个bug吧。具体功能实现代码很简单,如下编写即可:; }% v/ z9 Q/ g* j. g
$ Q- W  o0 U9 Z# Z
  seckill:=4;* ^; [0 q/ t+ E( y7 N/ ^% y& N! @$ |
# q: p$ o) c$ m0 I8 R! Z
  Writeprocessmemory(gamehProcess,pointer($0043E1F4),@seckill,4 ,WriteByte);
2 |) c1 b* j8 r% I! h) V$ k- ?2 g( e: W# m" G
踩雷不死功能也比较简单,通过前面分析,只要保持下面三个地址的数据一直是0就可以了,代码如下:
9 J3 p0 w, u4 `" E1 @) W. b4 F: B
5 C6 h% H# E4 r5 I) G7 W2 r  undie:=0;2 J8 ?* t' f1 K( o
) Q# |% {' r0 X9 d
  Writeprocessmemory(gamehProcess,pointer($0043C698),@undie,4 ,WriteByte);
( F  B* `; H3 s) v' Z6 O5 O$ U6 [% J% j3 A  Q. {" H: [
  Writeprocessmemory(gamehProcess,pointer($0043C788),@undie,4 ,WriteByte);& e$ a5 I4 L0 l4 h# B  s

9 {' Q$ r4 R* z9 m  S5 d  Writeprocessmemory(gamehProcess,pointer($0043E06C),@undie,4 ,WriteByte);2 n$ Y; P8 P- s9 c; I
  f5 a" e% D5 o; G* o; \
窃屏功能也很容易实现,只要座位号改为其他玩家的就可以显示其他玩家的游戏信息了。代码如下:
$ A0 A; ]7 M* {. ~  [9 V+ G8 r* b' v) e; N: e) _" \; o( ?
  seckill:=strtiint(edit1.text);4 q# s" o* J6 p
1 V3 b9 _% I+ G1 G& D0 x
  Writeprocessmemory(gamehProcess,pointer($0043E1F4),@seckill,4 ,WriteByte);* x1 I" n1 Q8 v5 B, j

: {- A8 @( D9 S6 Q2 AOk!代码写好了,下面编译一下进行测试吧,进入游戏之后再运行外挂,然后体验一下各项功能吧。我的秒杀效果如图11所示:- d' W+ b* s$ a: h. Q7 q
* r2 |. O% s$ y- c0 d" R
总结:9 v1 b# }# u6 `% q% X1 w1 r* A
这个辅助程序比较基础,主要是使用CE进行分析,获得游戏数据:座位号基址、时间基址、踩雷变化基址。这些地址都属于一级基址。如果继续开发,建议查找多级地址进行深入分析,比如道具数据和道具格子地址,以及道具使用call调用等,这样可以完成一些变态功能的开发,比如无限道具,无限加分等操作。在本文中使用修改座位号来进行秒杀的做法还是比较新颖的,利用游戏的这个bug来直接快速的实现秒杀功能。因此在外挂开发的实践中,一定要尽可能多的尝试,也许就会有意想不到的收获。2 x1 t' O. L1 I2 W2 l
2020年外挂程序基本上已经用易语言来制作了。易语言外挂学习教程:http://www.inhsoft.com/forum-49-1.html
/ r3 |1 v, A# |9 y
1 C5 C: L( ]! A6 L! f( ?& q: `# p( x

本帖子中包含更多资源

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-10-24 23:20 , Processed in 1.158397 second(s), 13 queries , Gzip On, File On.

Powered by Discuz! X3.3

© 2001-2020 爱内涵论坛

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