三千论坛
标题: 初步了解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 |