三千论坛

标题: 初步了解tgs插件的写法(一) [打印本页]

作者: 快要发癫啦    时间: 2023-1-4 09:08
标题: 初步了解tgs插件的写法(一)
编写需求条件:0 @  y9 S& J% y* F
) j1 W$ t: z: A- l  X0 _
    od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)
2 X9 i- f3 O4 D3 `$ u1 K2 y% c( I
! E! K$ A2 v: L8 j
# Z* z+ d( {( g' Y  Y+ T
编写过程; C5 f/ {* ?' d: W

' A4 O" Q5 ]" g: J* f3 P' e
第1步:" H- f8 K. R  e9 d2 F4 F. d! J$ b

7 Q: o. n) s$ @$ g; O3 o* t3 J
    用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面( @: k8 q% j, S# f+ Z7 V

* [' ^: T+ `- e
- I# j5 l8 D8 i; X" \7 b4 P' c
第2步:
* O  ~4 u: P; o$ V

( N' y# Q5 S+ I
    打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序
* n) ]+ r$ |, o0 a( g3 c9 M, B2 |
5 E: p4 B, N+ r5 j
    启动客户端进入游戏(后面要用客户端)# G. A! f$ C4 z) c
! v! L! \: X+ m2 A: w: a3 u2 [
    调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe
5 U. ^$ ]' a  f0 a
, ]9 k6 D/ u7 {. r1 o& U% W0 u
    在出现的界面上右键 菜单->查找->所有参考文本字符串  od 会扫描程序 / a7 j  b9 N+ a# V0 p+ e' }

  `5 o- X- U/ F6 o
    提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到: \9 V& N" Y. A* c$ X! L6 K4 `

" M( P5 E' x7 b6 S
    od停在! t/ [% q- w- k4 n3 L
4 Q4 z) C9 t: E) z5 ]2 h) d6 e
    0052A0C7 mov     edx, 0052FDD0   ASCII "<SYSTEM>: "
$ J6 r, q1 q7 K2 I2 R9 w' F
  U" d+ m7 Q: t' _) _
    双击这一行 再次看到od定位在汇编代码显示页面
; r! m: g$ m" Y; e2 e( _4 \! p3 M% l
: u7 Q$ N. ]! t9 W* ^! O& ~+ `0 _2 L
$ R  s! f% Y5 n2 P8 }; A" a$ h" ^
        0052A0C7   .  BA D0FD5200   mov     edx, 0052FDD0                    ;  ASCII "<SYSTEM>: " 9 m- E6 }2 n8 R, d& s5 |  U( d
        0052A0CC   .  E8 C7A5EDFF   call    00404698                                
9 a: |4 ?. d3 ~2 z( A
        0052A0D1   .  8B95 ACDEFFFF mov     edx, dword ptr [ebp-2154]        ;  赋值edx 为中间屏幕显示的内容
: z* L4 ~$ L4 a5 t; ^& Z& T
        0052A0D7   .  B9 03000000   mov     ecx, 3                             ;  这里是色彩的选项 后面会调用  |  m; h+ Y5 k  O* x0 f% Z
        0052A0DC   .  A1 70855600   mov     eax, dword ptr [568570]             ;  这个是UserList地址 参考侠中道代码可以知道        
! Q5 L" m% l/ Q  f
        0052A0E1   .  E8 D21A0100   call    0053BBB8                         ;  屏幕中间喊话的call 0053BBB8
7 U* X* G  R$ w1 d1 q* J) A

9 ^# {3 {0 _: x, c2 {/ {2 f4 @' o
    定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM喊# ?????
$ c( f" I$ p4 O; d2 t
    1 @' e: Q. P/ c5 r* m1 M- z( `
    这时od会被中断, 断在刚才下的断点处, 这时按下F8 : D" d+ f- B9 Q. Y( A' n
+ B# A+ Z; E* O6 c4 E4 W9 i: F
    到call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩( u6 }2 r, q0 Z) b

2 O& j, M& D* n6 J; z& M! h& }
    同时发送数据给客户端1 D1 ^2 z* T& v: X. S; P, h

7 Y6 X3 Y7 X9 @8 g* C
    : W2 g( M% [$ i! e
    进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过. H1 o3 J# F  x
  
+ E/ A9 ~( {. L6 v
        0053BBFC  |.  83F8 0F       cmp     eax, 0F                          ;  Switch (cases 0..F)' w% A3 ^; V5 v8 ~
        0053BBFF  |.  0F87 41020000 ja      0053BE46
7 ^" \! ]( Z$ c: `
1 O& ~" h8 r: J
    eax 这里是3 一路F8比较下去到下面这里
6 T0 r3 ~: L5 r" C* U1 c% r' x. Y
6 l) Y& n- V5 e# g8 w  }  j1 y
        0053BCD9  |> \66:B9 1F00    mov     cx, 1F                           ;  Case 3 of switch 0053BBFC* G. O: {8 ?  k9 _! y& t0 h; D$ x
        0053BCDD  |.  66:BA 1F00    mov     dx, 1F
9 R/ `5 O: l2 a# c+ D
        0053BCE1  |.  66:B8 1F00    mov     ax, 1F
' v( x  l- h- c
        0053BCE5  |.  E8 EA54F2FF   call    004611D4
) I$ }! b9 F3 Z- A! E% V& i" G) M
6 B5 a4 r/ q. n! R
    这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 的3个参数
  V/ n* ~, C8 A  k0 w3 s5 }; x4 g
   
9 Y5 _4 V3 u; S" Q5 q( r$ S6 t
    call    004611D4  就是调用 winrgb

- ]4 t! D+ r$ W3 F




欢迎光临 三千论坛 (http://bbs.3000y.com.cn/) Powered by Discuz! X3.4