三千论坛
标题: 初步了解tgs插件的写法(一) [打印本页]
作者: 快要发癫啦 时间: 2023-1-4 09:08
标题: 初步了解tgs插件的写法(一)
编写需求条件:
6 M7 |7 }. j4 u `/ D( ?2 Y- i' j0 i# h; R! d
od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)$ t3 \- C- q. D- @8 |5 \
3 H. N1 U9 Q' A$ ^
; W& M) p/ k8 R8 U编写过程! o) t9 f" E9 e/ q, |
3 w' O* m9 a) U: R3 i3 X+ z
第1步:; z" \4 l5 H: P$ x' j0 L
+ _6 p y+ ]- g2 t8 K) Z! i" k 用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面
: o8 `$ H; z9 j1 X; P7 k5 L6 m" m8 R1 f
5 d e; s; t* o& v$ k第2步:! b: F3 S! Y ^- L- t' w
7 w7 @8 n! |0 P' M% A7 I! y 打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序# ^9 a7 l2 x& R& R2 w# Y
, j, i( `! J! E0 g' a; b
启动客户端进入游戏(后面要用客户端)% o `8 W* r& x5 t0 e& P
+ G& ~2 g4 L/ X0 x 调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe1 t- l) E9 q2 E7 M( C
6 t5 _( R* y6 f6 o/ F4 x
在出现的界面上右键 菜单->查找->所有参考文本字符串 od 会扫描程序 1 X# @4 g+ F4 P" K8 X' k! l
* U0 S, p; s% d1 M! S 提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到
- Z% V# _3 S8 q$ ~- r# A \7 Y, _% m. e) g- e6 S( E) }' ^
od停在. l$ H' D/ v- J( N% q" N8 ?$ A7 J
$ A* k0 e9 D) ]" E+ t% N T
0052A0C7 mov edx, 0052FDD0 ASCII "<SYSTEM>: "
) P$ X# z- G1 q* E# c$ ^3 @
" w8 ?+ G4 B" r$ r1 {, W 双击这一行 再次看到od定位在汇编代码显示页面
$ _( x7 G& y+ @! l/ j8 R( s' f' f! A0 C+ E5 P
. f4 w7 e, I1 J" p. }) k 0052A0C7 . BA D0FD5200 mov edx, 0052FDD0 ; ASCII "<SYSTEM>: " " ^% V$ s( H# e* Z1 P ]
0052A0CC . E8 C7A5EDFF call 00404698 5 I! ?$ j6 m9 x! |+ r8 Q* f. ?% S: V
0052A0D1 . 8B95 ACDEFFFF mov edx, dword ptr [ebp-2154] ; 赋值edx 为中间屏幕显示的内容# P; Y/ p( F' `4 x" P$ }$ E6 S5 i
0052A0D7 . B9 03000000 mov ecx, 3 ; 这里是色彩的选项 后面会调用
+ d! {7 Z6 H. I7 i- \ 0052A0DC . A1 70855600 mov eax, dword ptr [568570] ; 这个是UserList地址 参考侠中道代码可以知道 3 W9 g7 j' D* u
0052A0E1 . E8 D21A0100 call 0053BBB8 ; 屏幕中间喊话的call 0053BBB83 e5 v0 m/ M5 z3 V) ? L
$ w+ C# t2 X4 E6 V6 Z
定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM喊# ?????% ~" r: M6 l% O0 r& a
6 `$ z$ m' D0 Q0 f u 这时od会被中断, 断在刚才下的断点处, 这时按下F8 3 g, W A7 r$ }/ g# N- Y
4 D+ \& G2 f) O* c' b 到call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩
0 K" r* d2 V) c L5 D4 [ \
. x3 q% p! r2 [$ e6 m! T1 E 同时发送数据给客户端 s k9 u% k6 @, m* _5 S' o" {
- G# p: @9 |& m( f/ I . S/ Y$ a: r0 T& Y: m r; @9 c+ Q5 M
进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过
0 g& E; Z( H, g3 `3 L k# F( j- G 7 l# V, Z5 u ~9 `0 a5 c9 Z; s
0053BBFC |. 83F8 0F cmp eax, 0F ; Switch (cases 0..F)
" h$ H8 e. j* J! v+ Z: K9 q 0053BBFF |. 0F87 41020000 ja 0053BE46+ w: J0 B, d' u) N3 N" S# S
" K2 m- X. c( F1 D eax 这里是3 一路F8比较下去到下面这里
6 Y2 D" H0 b7 i6 W& p
* {0 {& |- Q8 o0 T* u 0053BCD9 |> \66:B9 1F00 mov cx, 1F ; Case 3 of switch 0053BBFC
9 o' C3 s) J* ?) F/ u3 o4 @9 |5 R 0053BCDD |. 66:BA 1F00 mov dx, 1F
0 X2 H3 a$ w. T8 A; Q! [2 g K( N 0053BCE1 |. 66:B8 1F00 mov ax, 1F
/ k, T/ A+ W6 Y4 p 0053BCE5 |. E8 EA54F2FF call 004611D42 R( |8 G8 l0 b, E0 D
2 u; \# F) D+ |& V; K" l6 |
这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 的3个参数
* E/ ^4 A: Y3 P# J3 ?
* f: P' T9 [" B; k call 004611D4 就是调用 winrgb
6 j/ E9 C6 D) ?
欢迎光临 三千论坛 (http://www.3000y.vip/) |
Powered by Discuz! X3.4 |