三千论坛

标题: 初步了解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/ |( J
5 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; a
9 N4 M8 h. z  M4 u% `
    启动客户端进入游戏(后面要用客户端)
8 U. r. z( R$ S* l4 y  K; S) u
6 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 D
6 \% 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$ B
6 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