三千论坛
标题: 初步了解tgs插件的写法(二) [打印本页]
作者: 快要发癫啦 时间: 2023-1-5 09:45
标题: 初步了解tgs插件的写法(二)
本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
I) B P5 ]4 `- B* v5 Q# g( N8 T( G9 Z" {& v
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在' U+ Q& k6 G+ P$ J! I# v
8 |1 ]" G% U8 j; r$ S+ B+ o( ~( k& p
dll里面进行内存地址读写; J. O8 m2 M7 U7 n, i; ^
1 M- g- q$ G! u9 z9 S+ E7 l# n
我是在
7 f" O) L0 m! L
1 K- G5 p; D: {, c( X 0053BBFF |. /0F87 41020000 ja 0053BE46
1 D$ J" U8 X' ]) d. I; n( e% F4 a2 J- @" W G
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写" ?, `8 f3 y8 Q/ c
5 b! }; ^! E! \# w' R% L! b* y procedure InitDll();
! U8 c3 n1 @+ }" N2 c var
4 t3 l, e$ g& I5 Y9 T9 w p: Dword;
' ~2 p6 Q. w( ^: R+ ~, @ K1 x begin
+ P* D2 d$ f" T9 ]/ ~0 E. | p := $0053BBFF + 1;) @0 p; P u. f! j
PDword(p)^ := Dword(@proc_0053BBFF);- N# T+ s+ }9 s8 t7 n; a
end;" `8 P. v4 L3 z5 a7 q4 O
7 H/ e% ?3 h9 G \. V9 e* m8 s
在自己的代码里面写一个色彩增加的函数判断比如/ u4 h- v$ h% A5 h0 ~
! z& z7 _& k! L
delphi代码:+ s8 h! q; O U4 j2 X
" ~+ {# Y' Q O Z/ @' G; T
var
2 ^: I' M2 `$ O EndAddr1_0053BBFF : Dword = $004F470C;. G* O/ P# j. s6 S$ J. o) V
EndAddr2_0053BBFF : Dword = $004F44CB;
1 w, Y; w% {3 d& @- \ EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
1 k' |1 T; q6 k0 n$ X( }6 a5 e: D* R; i8 h9 [" E. {3 K
CallAddr1_0053BBFF : Dword = $004611D4;- l3 i5 S- Y4 Q; K5 P U x
CallAddr2_0053BBFF : Dword = $004611D4;
' q8 e/ o- a" ]. e- ]. s6 G4 O: G' l0 _( `% `" b3 q& T
procedure proc_0053BBFF();
7 ^, w" G. @! o4 K asm
: f# k Q8 C8 o [3 F cmp eax, $10 //与预先设定的 最大17比较2 R: |! G+ I+ c* B9 M8 B/ o, q
JLE @OldCor //小于就跳转到默认16种色彩赋值' x5 y; F2 Z% T1 r" f7 a
4 k- E/ @) X7 t cmp eax, $10 //比较是否等于16 + \1 f5 {# G3 \* D" q+ ]
jnz @Seventh //不等于就跳转到第17种色彩判断部分& x+ q8 F! y# g
3 G, T7 E" V# z$ ^ mov cx, $A //字色或背景色? 没有去详细了解请自己测试" P% Y# S# x) |8 [; g
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF( ~, a; P; j6 d0 ]5 ~: I! X/ l
mov ax, $A
. v' I& k: ~1 I call CallAddr1_0053BBFF
) D+ }+ {9 \( b2 ~3 V( g mov edx, dword ptr [ebp-$14]1 j" z1 Y+ T4 ]1 k4 w
mov word ptr [edx+1], ax5 F2 Q3 t* a) b5 s: w) C9 `
0 ]. a, d; l+ }# h8 P% }
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
1 p$ O/ E/ x5 r' A3 q2 @) j mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF% X+ Y! D M( @/ U& v9 ^5 F
mov ax, $10* R/ k6 }. e; H8 g: `/ I+ ?
call CallAddr2_0053BBFF
# q) J x+ C4 M X7 r mov edx, dword ptr [ebp-$14]
5 Y8 W; t( L: O mov word ptr [edx+3], ax
% y0 p/ A/ I% ?6 Y1 Q jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
9 h$ `" [/ ^+ d! Q1 b' G" `$ K' f. K# I
@Seventh:
6 y. ?6 N4 h3 ?3 L1 Q cmp eax, $11 //比较是否等于17
/ Q; ?/ o: S }6 r# y- a2 X jnz @out //不等于就跳转到默认部分! r0 o! m9 `* T1 b
$ o; m2 T/ `' z# f' z: [ mov cx, $A //字色或背景色? 没有去详细了解请自己测试
9 A3 v$ z# p+ L2 L6 a9 ` mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF. F- Q8 E$ h) n% Q, L
mov ax, $A
. J/ k! t* [( R4 ~+ e% `6 K call CallAddr1_0053BBFF
) ]3 g+ L; k# A% q! x4 \0 D6 L mov edx, dword ptr [ebp-$14]
# r: O. \$ E1 j) ^- m( d mov word ptr [edx+1], ax" z& |1 j! ^* I8 X) P7 W" }
7 f+ L6 e, t' g) q1 @
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
+ I( r7 ~; B7 U8 f( |' [ L* c& Q mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF# K" F& _5 h& v7 @8 O+ n( j
mov ax, $10
/ g7 J6 k8 M- T7 W call CallAddr2_0053BBFF
! f9 J8 c3 E% a7 ^6 P' J7 P mov edx, dword ptr [ebp-$14]
6 }/ s" s c- }# _7 x9 B, S mov word ptr [edx+3], ax
7 D S) R1 E2 q( ` jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs; q% }/ s; A& C9 Y( ]
//% i5 U" E# i F! Y5 ], T+ ]
@out: 0 `! I6 U8 D' e! z. w6 _
jmp EndAddr1_0053BBFF //这个是跳转到默认的点! x+ ~' k- y5 P- ~7 }. S: Y& S
2 r/ |. B. @2 {6 h+ l" t
@OldCor:
4 q9 i' I( O( v9 B. J% b4 C jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
# |# C: u. _: r/ i8 u end
! q) V& ?/ T. B* T! {
欢迎光临 三千论坛 (http://www.3000y.com.cn/) |
Powered by Discuz! X3.4 |