本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
6 ^; s3 b8 L( `8 a+ c6 n+ `8 c
5 ^% [9 Z: Q: Y! g+ |上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
: j, r$ A9 U7 Y H- t6 u# f0 Y& o: `: }; {! H+ l
dll里面进行内存地址读写6 E" d1 Z; Z" ?$ K$ `
- `5 ~8 k3 N2 w! a6 M- X( y8 w; l
我是在 % C( {0 W' f! E4 Z) N3 ]
- H: k! Z! U0 N6 y; \9 A( Q
0053BBFF |. /0F87 41020000 ja 0053BE46. @* @. B7 h5 h) `; O
' ]' P) _# \0 n+ p" h- |
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写 }% G& }' `$ ?* v- [3 H
/ ] I# O) t$ M6 D2 D, L1 T L procedure InitDll();
8 m' K8 }; S% b+ K. Y9 X6 d var
4 Q* U& c; h. c p: Dword;: l5 f g5 j; c0 n
begin
+ T" _5 D; b" e6 Y0 n7 ]" W5 _0 D. ]; K p := $0053BBFF + 1;: Y4 b" \4 s E+ a) e) @
PDword(p)^ := Dword(@proc_0053BBFF); ]7 q/ O) h4 L3 v
end;
! V9 w% r$ C" b1 W" Y) `' p e5 X Z2 \- N, z
在自己的代码里面写一个色彩增加的函数判断比如0 a+ ?5 g+ y3 V0 r$ B1 W# _1 V! x `
7 |9 F, I0 B: }
delphi代码:
; n; h' ]( S: ^- m* {, L
: n4 Y* G! l# k' S var
# p" |* D* D* G7 O4 t" x EndAddr1_0053BBFF : Dword = $004F470C;8 T: j" z# w: A2 I3 @# _
EndAddr2_0053BBFF : Dword = $004F44CB;
" i. ?( a7 Q! B3 l9 ^ EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
. V2 L, f0 R6 Y0 X8 Q- J
! f% t( G& ~# Z6 N CallAddr1_0053BBFF : Dword = $004611D4;
% F8 r+ F# O1 A CallAddr2_0053BBFF : Dword = $004611D4;
. ?# f! r9 r& o" A
7 i% @$ }% g) }9 n2 n1 H7 F procedure proc_0053BBFF();/ K4 f g& q, j: g. _
asm
% J9 A1 |/ g1 y) _ cmp eax, $10 //与预先设定的 最大17比较
# T$ J4 s' n% O% ^2 R+ Q! u7 W JLE @OldCor //小于就跳转到默认16种色彩赋值( u; F k! ~/ T3 d' D
! m r& J+ F! t. h; c% S
cmp eax, $10 //比较是否等于16 7 B, K; C U7 q
jnz @Seventh //不等于就跳转到第17种色彩判断部分
6 D; D, a1 Z: j/ e7 W6 L, }1 x4 A7 H6 C8 r: i; A7 u
mov cx, $A //字色或背景色? 没有去详细了解请自己测试) x d+ h1 J- h& Z4 H/ K9 ^
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
( z+ Y [/ _/ _5 w7 P! g; L mov ax, $A
* s% y. _# r2 O: h8 \ call CallAddr1_0053BBFF
* }& m$ T b2 L& s mov edx, dword ptr [ebp-$14]) X; ?, G" s; G
mov word ptr [edx+1], ax
3 c* Z! }* F1 }* T' q+ N/ Y" F* i8 g3 G# |' l j8 E6 s
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
: z' {1 t5 j0 u, t* M" N mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF/ l, C$ M7 r! @" d3 G
mov ax, $10
0 ^& W% J) D# ~/ m, C call CallAddr2_0053BBFF
D$ x+ G2 X& }. ]" j0 |4 Y1 E' c mov edx, dword ptr [ebp-$14]
/ c; @9 h0 j$ @7 Z mov word ptr [edx+3], ax; w- J# |4 q. X
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
0 B( o8 x9 a8 N* O5 W, i
; D: d6 }' M( U* D1 W* ]$ B @Seventh:
; v: j% T- `: O- r cmp eax, $11 //比较是否等于17
$ J* R9 ]( I0 @6 g jnz @out //不等于就跳转到默认部分' N/ {0 } @) @* T
; y# N: l( t' y) F) k/ b* d: l6 p mov cx, $A //字色或背景色? 没有去详细了解请自己测试
5 @8 N+ L" R% z7 ?5 u8 i mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
3 }/ C9 a% C1 e/ e mov ax, $A \+ r( J( O; B& K
call CallAddr1_0053BBFF
- Y( O; O% U3 l( R mov edx, dword ptr [ebp-$14]. W `3 b' I0 R/ [' R% T9 v* V, ~5 L
mov word ptr [edx+1], ax
5 Q! e( ^1 `0 `& K* L
/ q% t" ]0 Z9 L C mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
& t5 t( B/ D3 B mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
3 J }" d5 _, Y- x, J mov ax, $10
& b6 w+ `, q/ x* o" V call CallAddr2_0053BBFF
7 `+ X g5 L3 ~1 w) I mov edx, dword ptr [ebp-$14]2 x2 {7 ~' Z) m; l0 |
mov word ptr [edx+3], ax
. D9 @% A2 ]: B7 I/ }+ Q7 P) M jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs0 y' g% a9 g1 w9 x' |" ?
//! ^0 o; E" c) p# I$ L$ g T
@out:
, f/ m- p |7 s# ^0 T jmp EndAddr1_0053BBFF //这个是跳转到默认的点
% V) A7 I1 g/ I$ c1 s$ Y
. U% y% S2 R) _! R( b @OldCor:/ }2 X6 _8 ?+ y) z# Q
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
5 {7 ~- B$ O- r( M% ?0 X0 R end 9 x3 f3 t) G$ p9 L5 ^
|