三千论坛
标题: 初步了解tgs插件的写法(二) [打印本页]
作者: 快要发癫啦 时间: 2023-1-5 09:45
标题: 初步了解tgs插件的写法(二)
本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
. h6 `7 s4 {: O* s: C8 O5 t' u! W$ ]* h- L: g# z
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
+ y G/ R$ l1 q( ]1 u, R2 n! Z/ B; q& V; L. a1 h, J( p
dll里面进行内存地址读写* ` k3 V1 I2 z' `& \0 l3 m
) h, l% ~5 A. t! t0 ~) S% r3 c 我是在
+ A0 C- ?, p% ~3 ~$ o* g ; Y$ z' S- v1 D( V3 u F x5 b) q
0053BBFF |. /0F87 41020000 ja 0053BE46
9 g2 G7 W8 L' S) A& w& |& L1 @0 o+ O& j
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
# O- W" @! K1 c6 Z6 U1 K2 F/ r' Q2 ~& d' a& f
procedure InitDll();
! d$ v6 d7 T, Q5 u. K( i. e3 m var+ Q* W3 J4 y0 Y# M5 t8 e9 Y
p: Dword;6 D3 o s/ `8 f w
begin
$ Y. |, t }7 ~" Q p := $0053BBFF + 1;
$ V+ e) m# Y& ]' Q9 T PDword(p)^ := Dword(@proc_0053BBFF);* A- c8 l; E7 w) T5 D% g, F% L
end;! Q; ]! r4 {5 D: k. f2 |
; V2 ]% x- W1 k. | 在自己的代码里面写一个色彩增加的函数判断比如
3 C [3 e8 r3 i. ]7 A3 ^+ V
9 e3 I, O) |4 j( D/ O- o delphi代码:
# ~. r' g W9 C" m1 ?* n1 N" V7 u4 L( D; V- l
var) f6 ?4 y! A: x% @
EndAddr1_0053BBFF : Dword = $004F470C;
6 ^# w2 L+ [9 `, ] EndAddr2_0053BBFF : Dword = $004F44CB;
w% v2 B5 `3 J. F" l EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转" G3 f% J5 B; w) f- a# G6 n
7 G4 u A; i. M9 o S9 N
CallAddr1_0053BBFF : Dword = $004611D4;0 a# [" A" |/ B: e7 {- e
CallAddr2_0053BBFF : Dword = $004611D4;
8 c l( r6 {8 A+ Z: m6 k4 M" T. A9 j# d
procedure proc_0053BBFF();
# ]1 ]$ ^$ p* c asm
7 i# w! K# }; _( l; X" P' e1 G cmp eax, $10 //与预先设定的 最大17比较
. V( H" u% o0 n( \+ E- K JLE @OldCor //小于就跳转到默认16种色彩赋值
$ i8 u* p$ G& x& k# ~4 x) |( z7 ? E6 r. {& T' \, a
cmp eax, $10 //比较是否等于16 * X0 w- f& x3 [' U9 P$ k
jnz @Seventh //不等于就跳转到第17种色彩判断部分$ w: D3 ^/ w6 |3 W; Y" P" J) c1 T
$ x* K0 s, d) V
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
, J5 }) P. h8 h/ `1 z {* r. ] mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
: u& c8 F* l. V# O' c mov ax, $A
# W# X9 R0 F9 N9 X! S call CallAddr1_0053BBFF
- L) Y8 D4 l: x# w mov edx, dword ptr [ebp-$14]
, ?6 v( \2 w) K0 F mov word ptr [edx+1], ax- u' f d1 w3 i' g6 B
% s. q0 m6 W; Y! z' L
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试+ m( V4 x0 g3 K) K8 ?
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
+ |2 C$ t5 B" T; [- W mov ax, $10
4 \% J, ^5 G( C( ^ call CallAddr2_0053BBFF . t* d' ]/ ~, X/ w& M
mov edx, dword ptr [ebp-$14]0 r3 N6 D) ^( F' _. K: v" {
mov word ptr [edx+3], ax
4 g' A& B0 D9 J0 R" D jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
5 G3 @! l6 H8 e+ |4 ]# t. x( b
# k6 N$ R" v7 y" x7 D5 C& ?. |, U @Seventh:
" {6 p9 A" i0 Y: e% e* t cmp eax, $11 //比较是否等于17
8 Y; [+ v" \+ w% {- a& ^2 } jnz @out //不等于就跳转到默认部分
) W$ b5 ]& Q) {, e& M4 |3 d9 R. x W" @% w; W
mov cx, $A //字色或背景色? 没有去详细了解请自己测试6 F \; P2 V3 P v
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF( h; P% g0 K( _( A- \1 F) i
mov ax, $A9 T; L& P+ p. a0 E# s( n3 E
call CallAddr1_0053BBFF / f8 }/ V6 {0 O" [! p. u' _7 i
mov edx, dword ptr [ebp-$14]
: @- [6 b* k0 p! E+ E8 X; ` mov word ptr [edx+1], ax
. D6 ]# u: c2 u" S/ w w3 v3 d( k7 P1 I2 Z8 y0 t
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试$ J$ S6 Y6 D; n& k S3 ] q
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF' X0 i: H, s) H( ?
mov ax, $10
& P3 R( i% e( ~: \* @ r call CallAddr2_0053BBFF
{3 \3 r( u# n2 L7 w mov edx, dword ptr [ebp-$14]. R( f8 P9 Q! R9 d8 q/ `( n8 O; [ M% C
mov word ptr [edx+3], ax
. U+ F$ {3 ^/ ]* c3 I1 \4 i jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs/ M" D x3 j7 N ^
//
$ C& K' L( y" z. x& Z @out: - Y+ Z7 U( p p3 K, s2 U' M) d
jmp EndAddr1_0053BBFF //这个是跳转到默认的点3 C9 f0 W1 e8 p' c0 ^9 v D
! P: z0 L) u( c2 ^4 L' p) w3 E @OldCor:
' _* x: t8 b( t1 z. x7 j. V jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值4 A9 I. m2 `- \$ J/ p6 V# V
end
/ H" m: s* T& U$ n
欢迎光临 三千论坛 (http://3000y.com.cn/) |
Powered by Discuz! X3.4 |