三千论坛
标题: 初步了解tgs插件的写法(一) [打印本页]
作者: 快要发癫啦 时间: 2023-1-4 09:08
标题: 初步了解tgs插件的写法(一)
编写需求条件:
7 ?6 y/ m6 m, E$ Y3 Z, M. M5 ~8 @/ a( P4 Q K* y6 j
od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)& g$ N; a& G) g- S% g5 W
( K/ `6 `' j) D! ]; o( K
+ W }7 C: I) k. q8 ~编写过程
5 C4 S5 `; u1 J1 k5 B# L3 i2 E( s* B6 A4 D- t7 q- r P$ O
第1步:7 M% b' |7 V. q# j5 j) m
8 t4 @1 n9 L! X' P! Q7 v 用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面
4 ~( W% v: u# ~$ g9 l/ X* k+ P3 l2 p, H" ]. R% f8 m. `3 }
* ~1 w, N& S7 l, s7 V; B
第2步:' A! K$ z5 j9 [3 J
5 W% F: K( Z4 R" u( y 打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序: r0 ~/ U# g. r2 k
( l2 G2 e2 S9 y0 {, m
启动客户端进入游戏(后面要用客户端)
! L- r J$ N3 i: ?. l1 L
5 H0 k8 A8 R( m 调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe9 t1 X+ B+ d5 J, ^4 _
! `$ O9 A- ~5 j6 V* ?% h$ \: l
在出现的界面上右键 菜单->查找->所有参考文本字符串 od 会扫描程序
* ?8 {1 `; s4 f6 ~
5 b1 e. k) o& ?0 y! w/ a0 d9 [ 提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到1 @/ S) T: ?3 Q
* ~/ D3 B' f! A5 g( _/ l: g3 v od停在
) V$ {. e+ G# G8 ]9 B
# _9 C( N1 A/ }0 j/ N 0052A0C7 mov edx, 0052FDD0 ASCII "<SYSTEM>: "
4 W1 u! I& Y3 C8 `; T8 S H2 w6 s8 |$ |
双击这一行 再次看到od定位在汇编代码显示页面& m8 Q; N o" \3 \2 d
& u7 G& v6 Q9 L$ ?, G1 u$ `7 l
0 C4 W. G4 [) l- q% v 0052A0C7 . BA D0FD5200 mov edx, 0052FDD0 ; ASCII "<SYSTEM>: " 0 D0 ?3 |, Q( v7 [2 Q/ [) v1 Y
0052A0CC . E8 C7A5EDFF call 00404698 " f% ^) B4 m- r" e: Z. u
0052A0D1 . 8B95 ACDEFFFF mov edx, dword ptr [ebp-2154] ; 赋值edx 为中间屏幕显示的内容
# E6 \0 y" q* J; y f& Y+ q2 j 0052A0D7 . B9 03000000 mov ecx, 3 ; 这里是色彩的选项 后面会调用# H! K) ^7 ^; x$ Q8 W& q
0052A0DC . A1 70855600 mov eax, dword ptr [568570] ; 这个是UserList地址 参考侠中道代码可以知道
3 ]; u6 M4 z8 ?3 d 0052A0E1 . E8 D21A0100 call 0053BBB8 ; 屏幕中间喊话的call 0053BBB8, {% \/ q g% E( T$ E1 D
! U$ F+ `& b `: C% n4 y 定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM喊# ?????: Z3 c& N( g; D) r
9 N, l+ u3 H# ^
这时od会被中断, 断在刚才下的断点处, 这时按下F8
% |' p' \$ m h+ L% b3 n8 h& v' B( j. X# R* z" K! V4 q
到call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩0 b8 K( f h/ z
+ t- V* S6 j" e- t# o+ w3 O
同时发送数据给客户端
. h3 A2 c* j8 L0 g* V1 B& X' O5 i7 F7 H) i& @
+ ~8 W- v) o8 ]2 w
进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过
8 \9 Y( o4 o+ Z! }% n& T
, g3 N/ D; ^; m; ` 0053BBFC |. 83F8 0F cmp eax, 0F ; Switch (cases 0..F)
. |2 w& L4 l$ R* t1 c3 p! Q 0053BBFF |. 0F87 41020000 ja 0053BE46
- L9 M6 N' O! s7 ], R2 M; k5 p0 l) o3 ?- T
eax 这里是3 一路F8比较下去到下面这里0 X; O8 X# V- q' R, ^( H
* B7 } [& j1 Y4 w
0053BCD9 |> \66:B9 1F00 mov cx, 1F ; Case 3 of switch 0053BBFC
. s3 `0 d9 H R) B1 K: _" i 0053BCDD |. 66:BA 1F00 mov dx, 1F a7 W% S9 n* ^# I8 R5 k
0053BCE1 |. 66:B8 1F00 mov ax, 1F, A8 W; q! f; {: q
0053BCE5 |. E8 EA54F2FF call 004611D4) s9 }: ]8 G$ K0 v
g3 G2 s8 h) n- ?
这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 的3个参数 * d0 ]: k5 C: w* p; {% o2 y
% h+ Z$ {! r( E* e( q call 004611D4 就是调用 winrgb
# d! Z/ T+ o' U9 g4 @& r6 V
欢迎光临 三千论坛 (http://3000y.com.cn/) |
Powered by Discuz! X3.4 |