本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
* t, C7 i' |' K4 Q) k- Y, {$ \( W" h* Q1 t( J
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
" M( Q! b1 h) v
1 }2 ]% H9 N/ ?3 \ dll里面进行内存地址读写2 Q, L6 j* I p- [/ _# h
* i& ]- z; \4 G" @/ n/ K 我是在
% V$ g( G& f L+ w/ i2 _
% b4 }4 N, e8 ^% }1 |6 {" o% o 0053BBFF |. /0F87 41020000 ja 0053BE46, w! O) N2 j G' T# z* x4 p2 \. C
" t. V) y% q( U+ \ 在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
4 z! r2 d# c( b" D, U" K- `
& G- z- q: l/ y9 ~3 `$ x procedure InitDll();
4 f+ C, a, o. p i. {7 l var4 |, P8 q- L- L% ]
p: Dword;/ U2 }4 m x" m
begin" c |) J2 s, r- K- j
p := $0053BBFF + 1;
6 w/ ^, d4 h4 u! v; A3 I! g# U PDword(p)^ := Dword(@proc_0053BBFF);1 m+ }9 t/ ]8 G* n: T
end;
* N9 Z* h2 n; a
6 y6 ^- x# W; O" O5 G 在自己的代码里面写一个色彩增加的函数判断比如( U3 C$ p$ E6 C' X+ A1 n( l
3 R8 ~( \% m7 V$ ^. l delphi代码:7 q# D/ t) N2 D0 u$ D7 Y! W3 f W
4 `0 s# W4 v0 ]$ l i4 s5 P
var; c3 h4 q1 O4 o, ], L; {6 E. h" o
EndAddr1_0053BBFF : Dword = $004F470C;
" k _' @' N9 b7 i. {2 [ EndAddr2_0053BBFF : Dword = $004F44CB;$ i0 s7 }5 Z6 y
EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转4 e& x5 G* c8 L K
: H6 b# e0 m* A5 [; f1 t
CallAddr1_0053BBFF : Dword = $004611D4;- r0 j8 ^) T/ S4 R0 @0 V
CallAddr2_0053BBFF : Dword = $004611D4;
& c) Z8 `2 v1 m" y1 [4 J$ Q; O" V" U; r$ h4 t! g | R
procedure proc_0053BBFF();7 }) B2 G# h$ | n4 K1 w( C$ E
asm5 U! F; W' \3 K- P2 |0 Z
cmp eax, $10 //与预先设定的 最大17比较! E6 C9 J( U) M. ]* f' D q
JLE @OldCor //小于就跳转到默认16种色彩赋值- J7 t9 t5 S7 y3 P) g( G
0 ?% G9 n. w) H6 O" a" a cmp eax, $10 //比较是否等于16 + P8 r0 x* v( `+ B% r6 m
jnz @Seventh //不等于就跳转到第17种色彩判断部分
+ ^$ g- W( `9 L* }- b" B) E2 w: q& h8 I W" F
mov cx, $A //字色或背景色? 没有去详细了解请自己测试) f" q7 a3 L4 x: m
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
4 A: Q4 A* f* M' d3 ~ mov ax, $A
6 Y9 Q, U- ^$ q3 Q( ?' Q m) `: q call CallAddr1_0053BBFF ; D! j' o" B. P
mov edx, dword ptr [ebp-$14]" c& b! r. M3 Z% g8 L; q$ i' w
mov word ptr [edx+1], ax
+ S) D! ~8 ~- ]! L5 N3 e4 [, P+ @/ W1 x* i- J" j8 G; i/ s
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
% I2 p5 f( P$ q3 O( _' D( t mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF) v" K# g0 b: J) Y- d- h) N" y$ y
mov ax, $102 U( |+ ?. X4 D2 e3 S" c( L
call CallAddr2_0053BBFF * t$ {* C$ R5 p u5 k1 T: b8 K
mov edx, dword ptr [ebp-$14]3 o! P7 Z4 N9 o* S, @5 z
mov word ptr [edx+3], ax
, G# d6 a2 l1 j' e1 N" w: I) k jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
5 C8 b3 Y u8 k, p8 u* b3 V" ~: G4 Y4 j1 S# v. a( A
@Seventh:
7 [: J; g: a( x1 u) ? cmp eax, $11 //比较是否等于17 % @, j# j1 o& T7 S& ]6 L
jnz @out //不等于就跳转到默认部分9 \0 j) K* k5 T9 t2 W
5 a7 k# R3 d" v0 T- H6 ?; f2 ^
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
6 P* [7 M" b* Y U6 }: S9 e mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF1 z' K7 v* \ N$ [6 M" R
mov ax, $A
+ I) b, k, _* g# P t) N call CallAddr1_0053BBFF
% e: C- z3 `# k; q9 ~ mov edx, dword ptr [ebp-$14]4 L0 p" ^8 [6 f- ^
mov word ptr [edx+1], ax
$ Y$ ], b$ t' Y) C( ], T8 a9 e, Y3 X, ?& R* N' `; o' A
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
& ^4 n+ l1 _9 L) r0 C mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF) O! z& T! ?" M& `/ o
mov ax, $10
2 |2 @( \+ T) _5 v8 O3 X call CallAddr2_0053BBFF
2 u" z5 J- t& r, i: o5 r mov edx, dword ptr [ebp-$14]2 M2 @3 m5 }% t4 H( y) f. ~
mov word ptr [edx+3], ax2 _- O2 @ \' R
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs: v% G3 p Y, S) G7 m
/// X5 M% b4 a6 N. Z: X* V
@out:
/ m7 R- X+ j) v" ~5 l% j jmp EndAddr1_0053BBFF //这个是跳转到默认的点
1 l7 G3 T% C, P* x$ M8 l* z2 ~! |. c4 q$ \ f9 _
@OldCor:: Z6 h. m& d4 A Q! C
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
' \3 |9 T" D1 @$ Y, [% z# | h end
8 I; f9 M' W! k* c8 P |