三千论坛
标题: 初步了解tgs插件的写法(一) [打印本页]
作者: 快要发癫啦 时间: 2023-1-4 09:08
标题: 初步了解tgs插件的写法(一)
编写需求条件:: v- p- f# J. E/ P6 o5 N) a: H
$ u* i: W: T' Q/ m, J2 x& w0 q+ l od工具(看雪论坛有下), 程序编写工具比如(delphi, vc++)/ a" b& T' v5 j4 e$ d2 l
: |% B/ A" @/ Y$ q/ T8 T# I& S
编写过程
% x3 o g' k9 f. Y8 v! ^6 D' c
; J: G+ {% q9 h第1步:
) n6 a% c( l5 P( K' r0 o2 S% i1 r9 w& S. |( \: T% L, z7 s
用编程工具写一个注入程序, 可以dll注入到tgs1000.exe 里面0 J4 X9 O7 [/ v
7 z y" G* |; g* e- z
7 y' A% ^' \7 \6 S- L! N( E% l
第2步:* j, H5 W' C& g! U# V
" M/ w* P! z% G! Y% {! I. c2 n 打开od工具, 调用菜单打开功能 读入tgs1000.exe F9运行程序
8 m2 k1 K( y3 f. f
* `1 y, ~, f% O! b) a% B6 ~! T" ` 启动客户端进入游戏(后面要用客户端)
3 H9 I( \+ @$ E- _1 f! \2 w) V& b1 z; v0 _ v, W
调用 菜单->查看->可执行程序 看到列表里面 双击路径是tgs1000.exe5 G. S/ [ k0 Y
- R: |" X4 E6 w- I! B
在出现的界面上右键 菜单->查找->所有参考文本字符串 od 会扫描程序 - v2 r' D, L, M R" T
. i1 W1 h0 P: s8 s1 C/ D4 Q
提取出参考字符串, 然后右键 查找文本 输入 <system> 字符, 这时可以看到1 h2 p) l" J8 e: P/ J
, d- b. u+ \ Z2 h/ c od停在
, f, i7 W6 z2 O
! h3 ?8 K4 |' k7 |6 v% ?, h; G 0052A0C7 mov edx, 0052FDD0 ASCII "<SYSTEM>: ". F9 X7 i k- {9 h, }
9 [7 g) u. ^/ ]" P( r 双击这一行 再次看到od定位在汇编代码显示页面8 ^. d- Y; ]3 u0 t9 X/ t
% L0 R' c' v4 J! }' O1 b7 B" ]( y
) O; U b" V" Z6 U/ n' b
0052A0C7 . BA D0FD5200 mov edx, 0052FDD0 ; ASCII "<SYSTEM>: " ) v( b' v# n" c& }2 {: q; r
0052A0CC . E8 C7A5EDFF call 00404698
j, U. |, r( D4 X f 0052A0D1 . 8B95 ACDEFFFF mov edx, dword ptr [ebp-2154] ; 赋值edx 为中间屏幕显示的内容( \ |0 j# M" q# M1 w
0052A0D7 . B9 03000000 mov ecx, 3 ; 这里是色彩的选项 后面会调用0 J7 {1 _$ R6 n
0052A0DC . A1 70855600 mov eax, dword ptr [568570] ; 这个是UserList地址 参考侠中道代码可以知道
( }1 S0 l8 t9 R; r# T% Z" {/ s2 N 0052A0E1 . E8 D21A0100 call 0053BBB8 ; 屏幕中间喊话的call 0053BBB8
4 Y" ?; m$ l& J! z! L
! j, Y! R1 l/ h9 V6 n* j 定位在 0052A0C7这一行 在这里双击下断点, 在客户端用GM喊# ?????5 I0 L' ]1 q% Y% f/ J
# M+ k+ m8 f. p, X8 h o
这时od会被中断, 断在刚才下的断点处, 这时按下F8
* d% [' P0 ?8 W! g: E; Z0 [/ c( }+ X0 `4 D* {& |% I. Z
到call 0053BBB8 部分 按F7 进入call里面 这里是根据ecx值 取得喊话色彩
, z0 L7 E- ]% x, u9 a, x) A# A- R
同时发送数据给客户端" d+ u( H% b4 ?3 g" W
2 }, Z- r3 }+ g' }6 ^3 J
1 U/ B/ ? g* S v& Y 进入call之后 一路F8 到下面这里 这里的 eax 就是刚才ecx值 在上面部分已经交换过
' C; _7 w7 `6 U- y) m . b( w" A O% I# C$ \0 ^& n) [
0053BBFC |. 83F8 0F cmp eax, 0F ; Switch (cases 0..F)1 O9 t. ~8 M3 }" l V; h$ o& n! z
0053BBFF |. 0F87 41020000 ja 0053BE46
u4 u5 Z+ a; g; @
3 j& n, g7 w0 u8 W& p! `) K eax 这里是3 一路F8比较下去到下面这里
( ~& E! O6 T4 Z2 o# D7 V) [0 U% m' B0 W0 R; r& c8 q
0053BCD9 |> \66:B9 1F00 mov cx, 1F ; Case 3 of switch 0053BBFC. A5 d F1 b- r, M
0053BCDD |. 66:BA 1F00 mov dx, 1F$ e% h( z2 W3 O9 E+ x" p# g
0053BCE1 |. 66:B8 1F00 mov ax, 1F
) ~& ]8 Z- G5 T9 ? 0053BCE5 |. E8 EA54F2FF call 004611D4
3 l1 d: ^* v2 a
& n, y, j0 o% i; N# I# H 这里的 cx, dx, ax 看到过侠中道代码的就知道是 Winrgb(r,g,b:word) 的3个参数
$ I5 E/ t! A- h9 P; X- r. f
6 G- \- p% ^+ C Y, Z/ [ call 004611D4 就是调用 winrgb
" ~- J" h7 X2 y$ e+ l3 t9 X# F
欢迎光临 三千论坛 (http://www.3000y.com.cn/) |
Powered by Discuz! X3.4 |