三千论坛
标题: 初步了解tgs插件的写法(一) [打印本页]
作者: 快要发癫啦 时间: 2023-1-4 09:08
标题: 初步了解tgs插件的写法(一)
编写需求条件:) u: v2 P; m- F
2 G* p4 W" O# R Q( O
od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)
) L# R/ }2 i- [2 c4 ~; `" {4 l
% n; f; Z! V# Q/ |( J5 i7 w& y) y$ i) T4 X. O. p0 r
编写过程
3 e. } d8 V0 c, L5 O4 X+ k
Q4 a3 j% V7 W8 y$ t" w第1步:
" \' f9 A1 c, s+ b' ~& y' }/ Q
5 {$ U7 |/ L P X! t 用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面
' Q U& q2 v! R B- O
' Y! z+ v: w! H! t0 e Y: P
( l3 [- p$ f1 |5 \4 r# [第2步:
3 E4 o& b/ ~: h. t4 [) d* P% Q+ s
a3 f, C C9 r7 m 打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序
0 }5 D) |$ D; a9 N4 M8 h. z M4 u% `
启动客户端进入游戏(后面要用客户端)
8 U. r. z( R$ S* l4 y K; S) u6 j4 ^! H& z) H" c" p
调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe" L+ s4 E4 L* T1 f- s
& `; ~0 w, _6 ?' _7 F+ J. e 在出现的界面上右键 菜单->查找->所有参考文本字符串 od 会扫描程序
) U' _! z" {7 E9 e
+ ], `9 T7 L5 j7 X9 } 提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到
) @( \" J& r0 L4 D6 \% D2 P. H. [4 ~" o+ b6 L5 @
od停在0 U( i7 q& T/ {) i& F; P* N% f! C
* \% |5 B. r, s# t I: P* R 0052A0C7 mov edx, 0052FDD0 ASCII "<SYSTEM>: "
3 I1 {# a+ A7 E& l' t
, P2 T+ |! g2 m 双击这一行 再次看到od定位在汇编代码显示页面
8 d7 C2 ~( N( @# g# t* A$ B6 s& ^3 W7 j: ?3 a
% F1 O, G- Y* T! l 0052A0C7 . BA D0FD5200 mov edx, 0052FDD0 ; ASCII "<SYSTEM>: " % X" L8 v6 Y2 h3 f* Q
0052A0CC . E8 C7A5EDFF call 00404698
& G# m% o- `; b. _4 T. W/ `( b5 M; n; M 0052A0D1 . 8B95 ACDEFFFF mov edx, dword ptr [ebp-2154] ; 赋值edx 为中间屏幕显示的内容+ k- R+ p. @% C' F) L& v& k; K
0052A0D7 . B9 03000000 mov ecx, 3 ; 这里是色彩的选项 后面会调用
: ?& { H5 b+ |# q 0052A0DC . A1 70855600 mov eax, dword ptr [568570] ; 这个是UserList地址 参考侠中道代码可以知道 2 @( h( [' E H* e9 R, T6 W
0052A0E1 . E8 D21A0100 call 0053BBB8 ; 屏幕中间喊话的call 0053BBB8
) P% A* [; [: g. F6 ]1 A( D' V* X6 m7 [& \
定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM喊# ?????( f4 z9 N$ D' v' H( F
( D! {# U: c% K) B1 @ 这时od会被中断, 断在刚才下的断点处, 这时按下F8
6 b- K& N) |( ^: m4 E1 y
7 E8 ~) G! u( R, O/ d! b8 X 到call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩
3 t9 u+ v4 b. n- {1 [7 n
+ B0 V; U% m& T. N# W- X 同时发送数据给客户端
2 J1 a+ D2 m1 E3 `; j M
4 J$ r% h" |7 f6 ~ i7 d 2 w! ]; h: I% O2 l6 h! \, O
进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过4 I* o7 u8 k% @! K N! P
@3 ]8 ?$ H# g R C8 B
0053BBFC |. 83F8 0F cmp eax, 0F ; Switch (cases 0..F)4 G) T' n: h+ K0 X- @
0053BBFF |. 0F87 41020000 ja 0053BE46
$ {; Q8 g/ T; E* {: r+ v# M$ C! Z
( S6 c# q0 o! {' w7 Q: a: I: w eax 这里是3 一路F8比较下去到下面这里- a1 |& _: K( f, Q% [2 a
* g3 H* w: m' e7 z 0053BCD9 |> \66:B9 1F00 mov cx, 1F ; Case 3 of switch 0053BBFC
5 q& ]9 v. @, \" n9 i- _, w1 i 0053BCDD |. 66:BA 1F00 mov dx, 1F6 f9 K: [. T' \3 B6 l( F
0053BCE1 |. 66:B8 1F00 mov ax, 1F
+ ^; ^0 d, l O) G, b 0053BCE5 |. E8 EA54F2FF call 004611D4
* j( B8 ~+ O! S- q
, D7 Z# G1 i, {( O h 这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 的3个参数
N+ e7 Q1 F, U7 b2 F* E7 H1 r
% U" l* Y& f, [5 R5 D& I call 004611D4 就是调用 winrgb
) s- m/ M( M! y- A, X
欢迎光临 三千论坛 (http://www.3000y.vip/) |
Powered by Discuz! X3.4 |