三千论坛

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

作者: 快要发癫啦    时间: 2023-1-4 09:08
标题: 初步了解tgs插件的写法(一)
编写需求条件:
' J3 t* L  P  q( N

/ ?; d7 G+ a  ^" u+ Y: H
    od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)
: L* T2 j  [# G0 C# @" o

& C, T' I3 p( t! ?, ~+ l  Y+ d

: n/ p  T% j; D3 x, }7 a3 A
编写过程
5 |( a- V) Z" j# G

) j5 @% U9 k3 Q3 F  l
第1步:
4 r1 p4 N' n0 @. ~/ ?

1 A' D) s& M+ x8 P0 u4 W2 J* z, |
    用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面# J, o4 o( `$ s3 j4 y% r2 L
) R" \8 V! G) a9 H

% X. }& J0 ?0 x$ d
第2步:
5 H4 d. L7 n$ D8 H: I4 C, s
' p2 ]# @, V6 P+ Y0 E
    打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序
; b' J2 i0 M, f/ P- a3 h$ B, s5 ?
* k6 c4 G2 ?0 \* p1 Q
    启动客户端进入游戏(后面要用客户端)
: r: {8 ^% S' I) j
* Q; b; M* {/ f0 b* H" s. a" C
    调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe
% }/ }$ \# x$ D5 b  q# n" u

$ E2 Q  j* O9 L5 Q$ b7 q4 u9 S
    在出现的界面上右键 菜单->查找->所有参考文本字符串  od 会扫描程序 $ J* K# @) v) Q; t$ O8 B
. C9 q9 ~3 B( r4 B  B% _
    提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到( o5 X9 D6 i2 D

% v4 Z% Q6 i& j! ~* R1 k. A
    od停在3 y* S6 _# b; @5 |2 s
- W" a1 u4 ]! q3 g2 r
    0052A0C7 mov     edx, 0052FDD0   ASCII "<SYSTEM>: "
) s% F: k7 W: {& [

8 o% D" W$ V& {6 k" M8 X
    双击这一行 再次看到od定位在汇编代码显示页面
+ b+ K& {& }- W

8 ?9 w% g( g* O+ c6 D) P" x  y' L9 ~

( v/ s2 n1 N1 x8 W, l4 T( D
        0052A0C7   .  BA D0FD5200   mov     edx, 0052FDD0                    ;  ASCII "<SYSTEM>: " 2 u4 Y. k" `7 C
        0052A0CC   .  E8 C7A5EDFF   call    00404698                                
  U# ^+ @6 L5 b( U+ C, S4 ?: f( P
        0052A0D1   .  8B95 ACDEFFFF mov     edx, dword ptr [ebp-2154]        ;  赋值edx 为中间屏幕显示的内容% \3 \7 W! `$ U7 Z
        0052A0D7   .  B9 03000000   mov     ecx, 3                             ;  这里是色彩的选项 后面会调用) X/ p) M- }" w  N0 F1 F
        0052A0DC   .  A1 70855600   mov     eax, dword ptr [568570]             ;  这个是UserList地址 参考侠中道代码可以知道        
) [2 M  i' d6 ]( M" |% |9 z4 Q! D
        0052A0E1   .  E8 D21A0100   call    0053BBB8                         ;  屏幕中间喊话的call 0053BBB8; u8 ~& F( T7 B/ o

$ W. @% y, G/ O- K) ]
    定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM喊# ?????0 A8 F# ^9 D$ p/ G+ V% _
    4 R+ C( e" J( ~3 ?& C- G
    这时od会被中断, 断在刚才下的断点处, 这时按下F8
  ~7 D6 y' `+ a) [  y

! x. a$ ~# N2 ^9 @. m$ s) q
    到call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩
, i. x' y& t1 O% i. q- H5 ^0 T$ @
: P' S! I8 h- U- _
    同时发送数据给客户端8 z3 }, T/ Y1 _, m" K  k& S" ~

& I, L6 y0 \. e9 [
   
" o) L$ Y. H9 @% ]( j
    进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过
8 Z* W6 O3 f- Y' G$ E# E! X6 X
  3 \# ~1 w4 }" j& b9 S/ M: i
        0053BBFC  |.  83F8 0F       cmp     eax, 0F                          ;  Switch (cases 0..F)" B2 b5 v9 p, U* i6 g
        0053BBFF  |.  0F87 41020000 ja      0053BE46
3 l% \3 ~. J! k9 G

. o5 x7 Q4 j9 f
    eax 这里是3 一路F8比较下去到下面这里
6 S, [7 a: W, L3 E

- P- R0 Z3 t" O4 {, t" }; S: T' p- ]
        0053BCD9  |> \66:B9 1F00    mov     cx, 1F                           ;  Case 3 of switch 0053BBFC) _- |" l% l+ C+ N
        0053BCDD  |.  66:BA 1F00    mov     dx, 1F  a" O0 h$ }9 C3 z6 t6 U
        0053BCE1  |.  66:B8 1F00    mov     ax, 1F
5 I3 R7 L# v1 z2 k% ]2 V6 ]
        0053BCE5  |.  E8 EA54F2FF   call    004611D4
7 o% g. c6 a! j

* e9 H# N  W+ n' ^+ Y. e
    这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 的3个参数
& x- s, I% g% t$ g" O
    3 R7 r8 ?( m0 e
    call    004611D4  就是调用 winrgb
, ~: }* A( f5 ~) V) A. p! X





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