三千论坛

标题: 初步了解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* V
1 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 ], R
2 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