三千论坛
标题: 初步了解tgs插件的写法(一) [打印本页]
作者: 快要发癫啦 时间: 2023-1-4 09:08
标题: 初步了解tgs插件的写法(一)
编写需求条件:0 @ y9 S& J% y* F
) j1 W$ t: z: A- l X0 _
od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)
2 X9 i- f3 O4 D3 `$ u1 K2 y% c( I! E! K$ A2 v: L8 j
# Z* z+ d( {( g' Y Y+ T
编写过程; C5 f/ {* ?' d: W
' A4 O" Q5 ]" g: J* f3 P' e第1步:" H- f8 K. R e9 d2 F4 F. d! J$ b
7 Q: o. n) s$ @$ g; O3 o* t3 J 用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面( @: k8 q% j, S# f+ Z7 V
* [' ^: T+ `- e- I# j5 l8 D8 i; X" \7 b4 P' c
第2步:
* O ~4 u: P; o$ V
( N' y# Q5 S+ I 打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序
* n) ]+ r$ |, o0 a( g3 c9 M, B2 |5 E: p4 B, N+ r5 j
启动客户端进入游戏(后面要用客户端)# G. A! f$ C4 z) c
! v! L! \: X+ m2 A: w: a3 u2 [
调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe
5 U. ^$ ]' a f0 a, ]9 k6 D/ u7 {. r1 o& U% W0 u
在出现的界面上右键 菜单->查找->所有参考文本字符串 od 会扫描程序 / a7 j b9 N+ a# V0 p+ e' }
`5 o- X- U/ F6 o 提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到: \9 V& N" Y. A* c$ X! L6 K4 `
" M( P5 E' x7 b6 S od停在! t/ [% q- w- k4 n3 L
4 Q4 z) C9 t: E) z5 ]2 h) d6 e
0052A0C7 mov edx, 0052FDD0 ASCII "<SYSTEM>: "
$ J6 r, q1 q7 K2 I2 R9 w' F U" d+ m7 Q: t' _) _
双击这一行 再次看到od定位在汇编代码显示页面
; r! m: g$ m" Y; e2 e( _4 \! p3 M% l: u7 Q$ N. ]! t9 W* ^! O& ~+ `0 _2 L
$ R s! f% Y5 n2 P8 }; A" a$ h" ^
0052A0C7 . BA D0FD5200 mov edx, 0052FDD0 ; ASCII "<SYSTEM>: " 9 m- E6 }2 n8 R, d& s5 | U( d
0052A0CC . E8 C7A5EDFF call 00404698
9 a: |4 ?. d3 ~2 z( A 0052A0D1 . 8B95 ACDEFFFF mov edx, dword ptr [ebp-2154] ; 赋值edx 为中间屏幕显示的内容
: z* L4 ~$ L4 a5 t; ^& Z& T 0052A0D7 . B9 03000000 mov ecx, 3 ; 这里是色彩的选项 后面会调用 | m; h+ Y5 k O* x0 f% Z
0052A0DC . A1 70855600 mov eax, dword ptr [568570] ; 这个是UserList地址 参考侠中道代码可以知道
! Q5 L" m% l/ Q f 0052A0E1 . E8 D21A0100 call 0053BBB8 ; 屏幕中间喊话的call 0053BBB8
7 U* X* G R$ w1 d1 q* J) A
9 ^# {3 {0 _: x, c2 {/ {2 f4 @' o 定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM喊# ?????
$ c( f" I$ p4 O; d2 t 1 @' e: Q. P/ c5 r* m1 M- z( `
这时od会被中断, 断在刚才下的断点处, 这时按下F8 : D" d+ f- B9 Q. Y( A' n
+ B# A+ Z; E* O6 c4 E4 W9 i: F
到call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩( u6 }2 r, q0 Z) b
2 O& j, M& D* n6 J; z& M! h& } 同时发送数据给客户端1 D1 ^2 z* T& v: X. S; P, h
7 Y6 X3 Y7 X9 @8 g* C : W2 g( M% [$ i! e
进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过. H1 o3 J# F x
+ E/ A9 ~( {. L6 v 0053BBFC |. 83F8 0F cmp eax, 0F ; Switch (cases 0..F)' w% A3 ^; V5 v8 ~
0053BBFF |. 0F87 41020000 ja 0053BE46
7 ^" \! ]( Z$ c: `1 O& ~" h8 r: J
eax 这里是3 一路F8比较下去到下面这里
6 T0 r3 ~: L5 r" C* U1 c% r' x. Y6 l) Y& n- V5 e# g8 w } j1 y
0053BCD9 |> \66:B9 1F00 mov cx, 1F ; Case 3 of switch 0053BBFC* G. O: {8 ? k9 _! y& t0 h; D$ x
0053BCDD |. 66:BA 1F00 mov dx, 1F
9 R/ `5 O: l2 a# c+ D 0053BCE1 |. 66:B8 1F00 mov ax, 1F
' v( x l- h- c 0053BCE5 |. E8 EA54F2FF call 004611D4
) I$ }! b9 F3 Z- A! E% V& i" G) M6 B5 a4 r/ q. n! R
这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 的3个参数
V/ n* ~, C8 A k0 w3 s5 }; x4 g
9 Y5 _4 V3 u; S" Q5 q( r$ S6 t call 004611D4 就是调用 winrgb
- ]4 t! D+ r$ W3 F
欢迎光临 三千论坛 (http://bbs.3000y.com.cn/) |
Powered by Discuz! X3.4 |