本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑 , x% [" q4 V+ G) r# d$ P$ S# ^
! r. `* j: s( `4 a% x' G
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在9 o# c9 k* d: ~8 Q. @- `/ g# F
! \1 q$ K3 |% N; C+ t* a8 C0 G3 S
dll里面进行内存地址读写
$ O3 N( t2 a6 y# e! L# ^
4 n' q- z/ O) o( Z# v" l 我是在
3 Q/ q6 x: x( T! A D + `2 `9 F* A& K2 ^2 R1 _
0053BBFF |. /0F87 41020000 ja 0053BE46$ } K( O& \/ Q1 t
, d! a& U/ q( F" m: v: e1 Z 在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写0 p' [ x. P, U+ s8 e: p
' ]3 C" w1 t; c$ n5 V procedure InitDll();
- V7 o; S$ h& }' }3 H+ {5 m var
- |8 e( f" u: g2 w" u p: Dword;1 q; d2 _* E5 h. n5 p1 ?
begin
7 Z' H7 E' B' f4 { p := $0053BBFF + 1;( j1 I F$ m* k3 A1 j" \
PDword(p)^ := Dword(@proc_0053BBFF);
7 ]' J0 D" B) L* z1 z! N end;
+ a+ ~6 C& A* @$ `
/ z z e1 \' z2 K7 f 在自己的代码里面写一个色彩增加的函数判断比如3 C- c7 d. c* Z% v- G+ K
. R) k% b; O8 q5 B2 k0 f3 F$ } delphi代码:
# C6 s% A+ `0 W/ ]
5 X) b4 }% d8 M1 R3 B var
/ Z% x, Q$ `/ f& z: F' Y EndAddr1_0053BBFF : Dword = $004F470C;
6 ~, P5 [5 L' c/ U, P E+ h EndAddr2_0053BBFF : Dword = $004F44CB;
9 f# c$ s8 k f, N6 k7 ~$ t+ X( ~7 O EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转0 ]- P2 O* k: [( C8 d
8 M8 G' I) h2 q$ o; d
CallAddr1_0053BBFF : Dword = $004611D4;
0 R0 z1 r% X. q5 Z4 ~, d: V CallAddr2_0053BBFF : Dword = $004611D4;
" A2 ~- [- T% V" B& O* }
# [( m8 ~1 _9 L6 @" S9 @ procedure proc_0053BBFF();6 V8 f1 N4 ^7 d* b* I
asm& P. C |( |/ s" ?
cmp eax, $10 //与预先设定的 最大17比较
& x5 [7 I* G. U4 n7 L1 v JLE @OldCor //小于就跳转到默认16种色彩赋值' l" `1 k$ t8 l7 I% k
! n7 }! L" l: A' i
cmp eax, $10 //比较是否等于16
4 p: ], L1 Q' M6 J+ G) x; W% s jnz @Seventh //不等于就跳转到第17种色彩判断部分
: c5 U8 U5 k. d' o! v- z
C& G9 C' _+ r" t# w0 h; \ mov cx, $A //字色或背景色? 没有去详细了解请自己测试8 q% W" _4 s6 h! ^. c
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF; b5 c5 C, U& m. c% x# v
mov ax, $A7 ?4 Z' l9 |" S+ D$ e
call CallAddr1_0053BBFF
1 v5 }% d1 v( S4 f- o" B mov edx, dword ptr [ebp-$14]
% V2 Y+ K) c0 K D4 _1 ^- s mov word ptr [edx+1], ax4 l% z+ C( a- | l2 \ O5 F ^' g
& S7 w' ]' Q/ r$ ~! r; d5 a
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试; U- _0 q! {* A) o4 D
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF2 r; z# @- o. E$ y. o% j9 e
mov ax, $107 F5 f9 k2 X) `
call CallAddr2_0053BBFF : w# w5 e% V# o q# X
mov edx, dword ptr [ebp-$14]8 b- e4 f5 H' d0 A% w- y7 {
mov word ptr [edx+3], ax
_" m, @1 ?7 h6 }2 P6 \$ a jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs8 E1 r, X( Q; e& p' M: p# ]
* Q2 }% s; x" m& ~
@Seventh:
' w# w* ]' W9 \1 r cmp eax, $11 //比较是否等于17 & h2 Q% Y$ c! m, E' Y
jnz @out //不等于就跳转到默认部分0 T8 @: H V/ ]# @2 W: U
3 X E7 q* p1 t; G4 D+ }; U, d3 z
mov cx, $A //字色或背景色? 没有去详细了解请自己测试/ r8 g* ^9 r4 ]. J, l
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF4 c) _+ u3 J4 z- D+ `, H+ o
mov ax, $A/ i3 T% z8 D) ~2 C, a3 \" G
call CallAddr1_0053BBFF 2 Q- K) t6 F' o5 Q- E
mov edx, dword ptr [ebp-$14]5 H% D$ v2 s# }! i
mov word ptr [edx+1], ax
( z% Q8 R B. e- |) ?! g% M/ P
- H% d1 ]- V, g mov cx, $10 //字色或背景色? 没有去详细了解请自己测试 @; L6 }9 w. T, X+ H' h
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF0 B/ l' y; v; `! Z
mov ax, $10
7 J5 g$ g7 l/ T; i) K+ v2 j# {4 ^ call CallAddr2_0053BBFF
' S% l3 q4 j4 b6 {" x mov edx, dword ptr [ebp-$14]
m- F$ D1 \0 i" R; F' D mov word ptr [edx+3], ax+ G, |7 u& H+ q3 s, f1 D" [
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs6 v( A9 M/ m+ ?7 h; k" @3 v v
//
7 D; a) q; C3 G& V/ ~ @out: 9 N3 I& y& m. d2 g
jmp EndAddr1_0053BBFF //这个是跳转到默认的点
9 U( x$ E' X# O X" P
5 ~, a% z: y4 B1 H @OldCor:6 z( ]& b. k A0 ?
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值& ]7 a1 V5 N7 M" n2 {( s* I* D
end / Y' m) h! E7 M& C7 c$ A
|