本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑 0 ]3 M4 D6 u+ p: @
% j3 j7 u1 b0 [* _* x$ j
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
' s i4 L4 @8 P5 h# X
5 [) Y. \! u5 a. c, X, d dll里面进行内存地址读写, q4 W: i( Q# s/ k
- K+ E) @6 d3 K9 m. q: d
我是在
* E9 q+ I" T2 o9 Q! Q2 V
) Z# d. \3 I) F1 g: o" m 0053BBFF |. /0F87 41020000 ja 0053BE46& y: a: P6 _8 ^% D. B; b9 ]( q5 h
! b- }! D% R( L0 V6 ]: S
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写1 b# |7 B8 j; X! c' h4 t; d5 {
' w8 s2 G" K& J procedure InitDll();
4 `' C; G/ Q' w5 B p9 P var
8 D; s, L2 Z) w9 v( a+ _4 P. x p: Dword;$ c# t; w5 J$ r
begin
* m+ l7 C; n5 `" u; P( |; a3 `9 o: b" C; C p := $0053BBFF + 1;7 R! U, ]0 Y/ W4 Z `8 Q6 f
PDword(p)^ := Dword(@proc_0053BBFF);
9 l" ^, [8 i; P& x5 ?% j end;# C! Z, I8 p0 ]+ j) [% V: O, B R
+ t8 h( C1 M+ k! ]" M6 Q W 在自己的代码里面写一个色彩增加的函数判断比如7 h5 G) K( u+ h D
4 W0 X5 v6 B; s6 H delphi代码:
0 [& b# u) k! r0 n( I+ n
# |( C) r$ v$ o Y7 S# w var9 _ ~" I, I4 [$ v# U2 R$ f
EndAddr1_0053BBFF : Dword = $004F470C;
; s% {- O6 f# u" ]* [$ j EndAddr2_0053BBFF : Dword = $004F44CB;! o! M# v/ v: C) l' s1 ?
EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
# Z& A+ F% F+ e. i% p
8 s* U1 s5 o7 d4 ^ CallAddr1_0053BBFF : Dword = $004611D4;( b! T9 r2 r8 i, ~ {4 K
CallAddr2_0053BBFF : Dword = $004611D4;, K c1 ^8 D$ Z" G+ H
6 Q X2 | ^2 X) j procedure proc_0053BBFF();
: W, d# }7 ?1 I1 f# ?& k" G( H F3 f asm
b/ R" \- B" {3 K* O, ? l$ y/ ? cmp eax, $10 //与预先设定的 最大17比较+ M0 ]) j' {2 K6 q$ n
JLE @OldCor //小于就跳转到默认16种色彩赋值
: b% ~* O6 r9 K5 t* k
& L! `+ N3 {! N! g1 N# { cmp eax, $10 //比较是否等于16 / d$ P! Z, N6 K i
jnz @Seventh //不等于就跳转到第17种色彩判断部分# G6 C- y4 p: X1 a
- k T: [/ _8 F1 q; _: K* c7 l) v mov cx, $A //字色或背景色? 没有去详细了解请自己测试. f4 {$ s( J- S+ ], N. z- t
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
+ N* o0 `# }8 }: D% @ mov ax, $A
+ F. T2 |! z( X$ W, b$ Y, b% \ call CallAddr1_0053BBFF 3 t# ^1 w9 {$ j$ e% |' g0 C
mov edx, dword ptr [ebp-$14]; d" t9 H( w2 M5 R
mov word ptr [edx+1], ax& Q$ K. Q* x' ^* }' @. e! O
4 ~; ^. ^$ `' B% F0 m2 u0 ~ mov cx, $10 //字色或背景色? 没有去详细了解请自己测试0 ]6 {6 s. ?$ R& k4 y% G9 C. R
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
& O( f: i" D4 O0 f% a mov ax, $10
+ @6 h1 Q0 R1 `; m call CallAddr2_0053BBFF ! |3 T9 Q/ h* K; {& L1 ^
mov edx, dword ptr [ebp-$14]* {' J/ B7 ]* U4 K
mov word ptr [edx+3], ax9 b2 m5 ]) j$ @; X7 ~- |4 s0 B
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs, {6 O' H. |) O* E3 H T
' h: j" N6 w# r' E' C2 k @Seventh:
$ q* l& r, z' H8 ]- Z; R, } cmp eax, $11 //比较是否等于17
0 t2 q3 n4 ~4 O" { jnz @out //不等于就跳转到默认部分
' j, r$ p' }5 a+ C0 l7 A
# H# x) ]: \8 r4 K, o7 P mov cx, $A //字色或背景色? 没有去详细了解请自己测试
6 a$ ]% d4 Z3 j2 h$ R0 Y8 @ mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF" W" g! l5 X, [& Z; ^) y, i
mov ax, $A
$ _- q- p. u1 R6 d- W: o call CallAddr1_0053BBFF
; r. k9 n1 i3 y1 \( H0 d8 a mov edx, dword ptr [ebp-$14]6 ]/ x* Q( }1 G0 R2 T) W" d) M! |
mov word ptr [edx+1], ax0 C) U) X& ?* H
: ]' X1 G/ F) {) C: W mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
. N2 @7 I" x: c7 q, w mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
# E' `2 Q8 i* q ~$ b mov ax, $10
- P1 {8 x" V& U* F- ~. q' N6 p0 N; E call CallAddr2_0053BBFF
2 }* M1 j2 e" Z4 T: @ mov edx, dword ptr [ebp-$14]- g( k$ ?) y0 X
mov word ptr [edx+3], ax; L% `" O8 M( l5 a
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs( ]: y( \1 |* O" P# z+ T& C
//& s/ b. Q: [: f* c7 w6 [
@out: 5 v! A! s1 F3 v; U) i8 M8 h
jmp EndAddr1_0053BBFF //这个是跳转到默认的点
5 v6 X! v" Q- v) Z! X% I
4 T. u2 ^& H. Y0 q6 V$ B' V @OldCor:
2 } a9 \- R7 ^ G; r& N s2 V! g! @ jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
5 i( b( p3 h2 `. Y# L end
0 u% b8 l5 _: u" ]/ y5 h" n |