三千论坛
标题: 初步了解tgs插件的写法(二) [打印本页]
作者: 快要发癫啦 时间: 2023-1-5 09:45
标题: 初步了解tgs插件的写法(二)
本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
& \, o& J2 O7 ~+ v% K ]2 ]) l8 h. ^# t8 ^* e. Y
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
* G: a D9 A6 n3 F, K3 N) E8 J* j' Z7 A5 ?0 f9 I! C
dll里面进行内存地址读写
7 Z @+ N/ C' v: m; s/ d$ {* `( s% w* T3 @8 u% r) A! Q
我是在 * h% u0 l" p% b+ M
/ V2 _ z' U0 Z0 @3 Q 0053BBFF |. /0F87 41020000 ja 0053BE46, ]4 _/ Q0 M( B
8 D9 y6 n: B: O" i
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
9 v8 N8 y1 j' i+ b0 N b% z2 ^$ i& \8 f& ~2 ]
procedure InitDll();
7 c) i( }6 p6 w" I var
6 D1 l' \3 c0 i' u3 L% A+ K1 L F5 Z p: Dword;# ~5 x) N& d I5 L, U9 q* s; A6 B: e0 s
begin
" P+ {* x6 O$ ?' ?' t" `/ E( ?- L: d p := $0053BBFF + 1;; W% a) T7 c% l& B$ ?
PDword(p)^ := Dword(@proc_0053BBFF);8 x" o$ {! k% S" [8 U) w3 C' s8 r% P
end;
; D' U% v/ U- R. W1 u; K6 V: q) W. V/ T
在自己的代码里面写一个色彩增加的函数判断比如
6 r, |" s' h) M/ Y2 J0 G' S3 ^1 b( G. c2 S$ s: }
delphi代码:1 {' M* x* g `1 a7 T
4 G0 q6 j" B' @; W2 p7 W" u- o var
- E E; B0 }1 {7 d3 s- ? EndAddr1_0053BBFF : Dword = $004F470C;
- B# e, z2 k2 M9 d EndAddr2_0053BBFF : Dword = $004F44CB;
: h( _& A2 r% D( ]' C9 q4 t4 I EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转1 d+ {4 z: E% `* f8 d' k
6 L$ }! ?4 r6 D4 R3 @+ e, U6 S
CallAddr1_0053BBFF : Dword = $004611D4;
6 i8 [& C, m6 `2 ~" W CallAddr2_0053BBFF : Dword = $004611D4;* w/ z) u& N" J$ j* O, A$ L% I
# a. @" }: A! o" b3 s procedure proc_0053BBFF();
8 Z8 l6 D6 X/ u$ U7 H/ L! U asm# y1 |9 p1 y3 Y! R( c: C$ e
cmp eax, $10 //与预先设定的 最大17比较
( ?: t, h, h6 ]4 a5 g& Z3 x8 z3 x JLE @OldCor //小于就跳转到默认16种色彩赋值
8 N; Q4 O1 }6 h4 m; y1 }. G" z8 s3 u( M
cmp eax, $10 //比较是否等于16
+ D! N/ C* `( ^+ z0 ]6 L jnz @Seventh //不等于就跳转到第17种色彩判断部分" e9 a( ~% q) v3 y: R. |& Y
) w2 |8 w: u4 G- C
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
' j$ N( g0 z2 Y mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF4 u5 Y9 i4 l/ \
mov ax, $A$ Y! N3 W- H6 ^6 q# X+ N9 n- G5 q
call CallAddr1_0053BBFF ; O' G- T3 F) A' U3 v1 N: J
mov edx, dword ptr [ebp-$14]0 K* j' }) v) h: x, x
mov word ptr [edx+1], ax
: I$ s8 c; d! ^; W/ u( O) x# D7 V: J* n; G b2 N* S$ ]5 X
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试3 m" ^( U1 u* ]3 @
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF6 _/ S x8 F2 f) K
mov ax, $10& a' l* B0 F- ^# r
call CallAddr2_0053BBFF 7 j7 q. S6 H9 `* C
mov edx, dword ptr [ebp-$14]4 i/ V1 v0 Q X+ r, D% a
mov word ptr [edx+3], ax9 f6 ~, K H9 x! I; ~% h/ F7 G
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
8 n5 c n2 x% [3 B2 D5 n& x! \
' k, @1 Q( h6 l1 t8 r8 A @Seventh:. }( J3 R' A. ^' X- J
cmp eax, $11 //比较是否等于17 ( H6 D; E5 f/ E2 F3 K( M, z' g
jnz @out //不等于就跳转到默认部分& L. D" k+ }! F$ H, i* {
) M$ L5 k6 a; G4 M8 f* ^
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
. {1 J L4 s, h$ N+ m; x% T mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
# E- {" ]2 D. j6 P mov ax, $A, c5 k/ @; `" F1 @
call CallAddr1_0053BBFF
2 O' H- ~& K+ k1 g mov edx, dword ptr [ebp-$14]1 }7 c( Z, u5 m) j9 ~; n" X
mov word ptr [edx+1], ax5 j8 C# s4 Z3 M0 s8 Y; Q5 b0 I t/ F
6 c+ X$ L( { V& Q9 ^+ W( Z% S4 Q mov cx, $10 //字色或背景色? 没有去详细了解请自己测试* a3 L' ~6 n( l7 ^( v9 C" Z1 z
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
+ o4 E& N) |! L& S mov ax, $10
6 z( B H* N+ ?# D( D call CallAddr2_0053BBFF 7 C6 @( s0 I' L c7 J; T" M
mov edx, dword ptr [ebp-$14]
9 Q$ u" D2 q3 n9 V5 U$ l7 [ mov word ptr [edx+3], ax
" S" m) i; {* L4 f t jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs! {$ n. V* t7 e
//
6 t$ A2 c6 R# g$ E* |$ S @out: & r3 l1 a5 B9 G
jmp EndAddr1_0053BBFF //这个是跳转到默认的点
5 V( w4 x$ V9 j6 d/ N v, W* D; M, d4 E0 |( v* B: i+ \; D
@OldCor:
8 m! J1 | y B' ^6 ~5 V q jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
. o# r, }! T* |4 N2 J- A, V end
. f) n+ p# ~6 O7 J8 A/ `
欢迎光临 三千论坛 (http://www.3000y.com.cn/) |
Powered by Discuz! X3.4 |