游客您好
  • 点击联系客服

    在线时间:8:30-18:00

    客服微信

    Wkr-3000y-kf

    电子邮件

    3000y@wenkeruan.com
  • 手机版

    随时掌握游戏动态

  • 扫一扫二维码

    添加微信客服

Lv.7 版主
8号会员,9活跃值,2022.09.01 加入
  • 127发帖
  • 123主题
  • 0关注
  • 0粉丝
这个人很懒,什么也没有留下。
独家推荐 更多>

初步了解tgs插件的写法

[复制链接]
异仟年认证商人 发表于 2022-9-5 20:27:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本帖最后由 异仟年 于 2022-9-5 20:28 编辑 ) o0 N& v- |" L' d3 G  A/ U
8 \- Q% h. n  M! R. ~$ A( z
编写需求条件:" g2 `* e+ v( F" X% h4 h
; I! U9 Y6 Y6 m% h/ ?$ q( b
    od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)$ H) Y$ G- j1 k3 N

5 k( Y8 u+ j/ n9 e5 w7 G7 O- c0 s8 r- V* Q* o0 s7 Z. t
编写过程! W- V6 `9 B. Z( V4 ]
* F3 e# Z/ H$ S- s, L$ s4 C
1:
+ I% p0 @9 N; @3 @& l0 q0 e! t$ N  a; Y" }; z# i8 S, R
    用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面+ n! f  t& |4 G1 M1 n- m
" `7 Z$ ^. ~9 A3 N6 U2 j; i

+ R. Y; q( g7 n2:# ?! }$ B$ e! p! t

# @& t  F! ]) B! I8 A' f; H: U    打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序' u% Q) e! V  A" K- }# h: c8 m+ f
; A" P3 f, d- z
    启动客户端进入游戏(后面要用客户端)
$ ?9 C5 v" L( m2 q4 g6 D: R2 I4 A% r+ t! s- q
    调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe
( i# m0 t; T6 u( _# F% K0 y9 ~& L! C' \$ s. {+ A* A
    在出现的界面上右键 菜单->查找->所有参考文本字符串  od 会扫描程序
$ m; H$ y) N  S* E/ x! c& B
% B3 \$ C4 B1 B3 g8 l! [    提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到
. y: C0 Q9 p, _) k" E6 j. N7 @$ z( q9 b4 p
    od停在
* F# W0 S! q9 c" C% y
9 _6 [  c3 o6 O% d! s* F    0052A0C7 mov     edx, 0052FDD0   ASCII "<SYSTEM>: "
$ ~: b5 p. r0 M' A0 Z: g, ]& R/ a$ {/ N- m' W
    双击这一行 再次看到od定位在汇编代码显示页面
$ A5 |' D2 a  G. m4 {* w
- ]+ M1 R5 M, I
/ K' U/ m, ~: C- m- P( J8 h        0052A0C7   .  BA D0FD5200   mov     edx, 0052FDD0                    ;  ASCII "<SYSTEM>: " / M  S3 C3 c: P4 b
        0052A0CC   .  E8 C7A5EDFF   call    00404698                                
/ v9 Y7 h2 S$ N) I        0052A0D1   .  8B95 ACDEFFFF mov     edx, dword ptr [ebp-2154]        ;  赋值edx 为中间屏幕显示的内容- y0 p8 ?9 f& F( V4 W: D. r. |2 _
        0052A0D7   .  B9 03000000   mov     ecx, 3                             ;  这里是色彩的选项 后面会调用
' k5 R. ?- s5 _% I3 _        0052A0DC   .  A1 70855600   mov     eax, dword ptr [568570]             ;  这个是UserList地址 参考侠中道代码可以知道        " o1 ~' V( \7 J3 l% @/ c3 v
        0052A0E1   .  E8 D21A0100   call    0053BBB8                         ;  屏幕中间喊话的call 0053BBB8* R' L7 U. O5 t; m' n
" u9 Z7 z+ s8 T, l
    定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM# ?????
! W% e# w5 H& F- v   
: |* B/ I) M" }$ K  @    这时od会被中断, 断在刚才下的断点处, 这时按下F8
7 x! e2 u; A8 T6 L1 y1 x# w$ h, y' H; _5 P4 E- {
    call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩2 S+ u, b$ e% G# N, [
, x* Q. u6 p% t0 l7 |6 S
    同时发送数据给客户端
3 \4 x4 q1 X3 K$ ~$ G4 N# X- ^6 }) x9 j! f' Z$ X
    0 O( Y+ _3 e8 d! S; c/ J0 t- |
    进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过
# ]* d% z% C' Y9 g  Y2 }6 e  D1 |  3 j  l0 \) x3 |" t$ I
        0053BBFC  |.  83F8 0F       cmp     eax, 0F                          ;  Switch (cases 0..F)/ }1 j6 e5 D2 I+ s+ y$ I$ B/ h8 C, q
        0053BBFF  |.  0F87 41020000 ja      0053BE46) J$ h0 b2 z, `" Z2 ]0 L7 X

3 h) ^; p* ^8 k. g" C% ^! P8 y    eax 这里是3 一路F8比较下去到下面这里
% z, S& ~- |* X7 D' D: ^- u8 S9 C! F3 E( D: }( X! N- v2 |  V8 J
        0053BCD9  |> \66:B9 1F00    mov     cx, 1F                           ;  Case 3 of switch 0053BBFC
+ H$ [7 W. o/ Z4 ]" N1 H5 R+ j- _$ j        0053BCDD  |.  66:BA 1F00    mov     dx, 1F
+ P8 t1 [/ F7 s+ U( C        0053BCE1  |.  66:B8 1F00    mov     ax, 1F
( ~7 s4 o) x, S/ ^! l  \6 r        0053BCE5  |.  E8 EA54F2FF   call    004611D4
1 r# [/ N0 T1 K$ V! J# `
# ~* M0 t! i% \! Q    这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 3个参数   e) }% E1 K8 M( k. K1 g# h2 u( F7 @
   
; c- N) ]8 Y/ v. ]8 w  {( R9 ]    call    004611D4  就是调用 winrgb  R6 o  g( l+ M- K6 ~

, {! C9 \, h+ ]* K& \& ]9 E4 L- c2 U# w3 u' E4 v. z" N# X2 d
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在5 d& _( S/ }0 ^% H

( A. D* g: f9 {  L5 K2 \  J
    dll里面进行内存地址读写
! m! d& |+ |6 p1 T  u9 }4 S: d9 _
5 n, q; q, g4 i! k- j2 u$ [/ J; v- t
    我是在
6 V' S9 S: n& |- o8 j) ^8 F; w+ Z, E
   
5 x: T4 b6 k8 E* s0 X  l9 f+ a/ s
    0053BBFF  |. /0F87 41020000     ja      0053BE46
$ @! O0 N- w4 k% j! Q! E! ?
3 t) u" q' b7 P$ y
    在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
( l6 v1 K, F6 _% O+ L

5 k; w: j) Z, I: C# o* D7 o6 F
    procedure InitDll();) X; T! r% k5 [" y
    var" ~1 Y" D) z& R( |
      p: Dword;, K0 H' V: x9 M$ j: \
    begin9 y6 u$ b, `( g
      p := $0053BBFF + 1;
, X6 K+ D+ `; c, k4 x) i2 \2 J
      PDword(p)^ := Dword(@proc_0053BBFF);
' w/ W/ y/ v& D3 d- \  ?2 n, Q
    end;
# m. D. F8 r; V5 Z$ A

( V4 v, b! S3 O
    在自己的代码里面写一个色彩增加的函数判断比如/ j( l# L5 y- ]) P1 c- q& M

: F) G8 d4 L. c9 x) U: i& u; a
    delphi代码:
# v# k0 @3 ~& |& x: ^
7 Y' \1 u: ~' ~1 v& p, h
    var/ s3 y$ }- h8 i: K5 Q! U5 R3 |; J
      EndAddr1_0053BBFF : Dword = $004F470C;
* H: k6 k7 T9 `9 ~
      EndAddr2_0053BBFF : Dword = $004F44CB;
3 x( ]. ^' W5 j8 b$ x
      EndAddr3_0053BBFF : Dword = $004F4736;    //色彩彩赋值结束跳转
. M; ?: t" u9 [8 ]( w7 k5 ?

7 w$ J5 g5 m  y+ t: ^; J
   CallAddr1_0053BBFF : Dword = $004611D4;
* G' L& ~8 j9 ?& S" O" B1 u% G
      CallAddr2_0053BBFF : Dword = $004611D4;
+ x, N9 `9 L$ ]8 `
' z9 \) h3 S. B8 S2 I# `7 f
    procedure proc_0053BBFF();
* a3 @7 m5 x$ J5 R; _7 o
    asm
; T( _, G5 |0 t* E
      cmp     eax, $10                        //与预先设定的 最大17比较
% T$ i2 X, Y* y! V" r) F
      JLE      @OldCor                        //小于就跳转到默认16种色彩赋值
1 ]' z* e/ W: k1 N- L0 T

1 ~1 L/ r1 `% n# R" [$ L3 a
      cmp     eax, $10                        //比较是否等于16
6 V: S. C, K3 E- ], y
      jnz     @Seventh                        //不等于就跳转到第17种色彩判断部分( ]7 U0 ^7 N& L* B) O" n
; l- ]5 ]: a2 s1 l/ t
      mov     cx, $A       //字色或背景色? 没有去详细了解请自己测试4 c) O: V7 J% C' O% k3 A' v5 S
      mov     dx, $A                          // 可以通过修改赋值给ax, cx, dx的值 不超过$FF5 |+ j, _6 ?$ |+ h; p4 o9 z; C
      mov     ax, $A
3 q$ D( X, a; ~) V
      call    CallAddr1_0053BBFF
) x% Q8 }8 w& B0 i! h% o" W; b
      mov     edx, dword ptr [ebp-$14]  o+ u. ^0 V, q0 X- L2 O
      mov     word ptr [edx+1], ax
0 }4 g7 T. P0 \- X, P% n' k

  G0 X3 f/ t9 c1 H* c7 ?5 B( J
      mov     cx, $10       //字色或背景色? 没有去详细了解请自己测试+ ]' p8 \+ i0 j
      mov     dx, $10       // 可以通过修改赋值给ax, cx, dx的值 不超过$FF6 m+ k1 Q: p  M8 Y
      mov     ax, $10  Y9 v3 m: {, v  o) r/ {3 B
      call    CallAddr2_0053BBFF
8 l* h5 k7 V1 @1 R$ b/ V
      mov     edx, dword ptr [ebp-$14]
0 t! @. R+ S% k# Y' P8 Z7 I6 Y8 M- u' y- k
      mov     word ptr [edx+3], ax# o  `( H* h$ h: |' X  ~
      jmp     EndAddr3_0053BBFF               //色彩赋值结束跳转到tgs
# t5 U6 n5 L9 U

1 P$ d6 Z" |0 g
    @Seventh:
6 y% z2 \# C7 }6 a
      cmp     eax, $11                        //比较是否等于17
! G" b! b1 c8 l6 h! G' @# ]
      jnz     @out                            //不等于就跳转到默认部分" k1 ]0 T9 V+ ]4 j
7 [8 M2 e, i) u; v. n" i
      mov     cx, $A       //字色或背景色? 没有去详细了解请自己测试8 a% P8 n9 |- p( I! a( @% w
      mov     dx, $A                          // 可以通过修改赋值给ax, cx, dx的值 不超过$FF6 o. i6 L% c" F2 q9 C- K; s
      mov     ax, $A
$ y; i+ Z4 v$ ~
      call    CallAddr1_0053BBFF+ W0 U6 Q$ E8 o
      mov     edx, dword ptr [ebp-$14]
/ V" p8 _1 I2 k- R2 d% B
      mov     word ptr [edx+1], ax7 i1 Y! x* N  i. H' a; s  u7 Y

+ L0 C, D: W6 k; V; l2 W. u
      mov     cx, $10       //字色或背景色? 没有去详细了解请自己测试% @) y' u2 d5 S& W) R
      mov     dx, $10       // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
: W1 K- Q5 i3 E0 l& ^# H' ^7 W- }. R
      mov     ax, $109 U- ]3 ]2 x9 c) \% E7 T+ u5 {1 }
      call    CallAddr2_0053BBFF+ u1 ^; l8 R3 _* H0 B! g. t1 u
      mov     edx, dword ptr [ebp-$14]
% x- S+ p' o$ Y- }; h( q; b* _( a# c# b
      mov     word ptr [edx+3], ax' Q* ^& i8 x' f& s
      jmp     EndAddr3_0053BBFF               //色彩赋值结束跳转到tgs- m3 S& i4 B4 W, z' F. Y* M. Z
                                               //
6 u# o, Y& I$ b/ u- G( \6 C7 b
    @out:2 e: \! t) {9 d3 x
      jmp     EndAddr1_0053BBFF               //这个是跳转到默认的点
$ e" O" C9 n* [6 Y; Z8 r5 O, R/ a8 C

1 N& ^+ v" Q5 `5 ?: j5 }9 q
    @OldCor:
1 i( F  i% ]6 B5 m: K5 \. X0 `
      jmp     EndAddr2_0053BBFF               // 跳转到原来16种色彩赋值* `( ^' Z" S( {- J: V* i! j
    end
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

Powered by Discuz!X3.4 ©2001-2013 Comsenz Inc.闽公网安备 35099902000100号增值电信业务经营许可证 闽B2-20220593 闽ICP备2023014375号