本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑 ; u0 Q2 Z& W0 ^; j: C
% A% Y- p$ Z, T$ R4 @
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
; X+ y- e, N: q% a) m! F
4 @2 q, h+ e4 B+ C dll里面进行内存地址读写
. s1 F) E& x! @2 L8 a2 J7 q \" F- R9 q# `* q
我是在 + I+ K. c) C( \* c# J
L- J! `0 d- Q6 ]. |" M$ a
0053BBFF |. /0F87 41020000 ja 0053BE46' O. o) U7 @. f4 i1 Z9 T
+ Q$ u) d& ^: U% W; m
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
& ~9 i% v1 c' X B1 A/ g8 D- z! p$ [( |( {
procedure InitDll();
/ P, o' F$ N) t$ I var" z, P4 m) k3 U- I2 X8 m- @
p: Dword;
# r3 j5 W) p% M! _& B begin7 k' m) w3 v" m/ Y! z8 r( }
p := $0053BBFF + 1;3 P' S9 e8 y: Q1 C3 P
PDword(p)^ := Dword(@proc_0053BBFF);( H; }4 ^% O8 W9 D
end;7 F' v! o! r" o- e4 H e9 j9 _. b
4 w' P# F/ @: D
在自己的代码里面写一个色彩增加的函数判断比如8 G4 N V1 }; H B$ t* F$ C# o
. {# m9 }. z2 C
delphi代码:
4 ~; {0 h9 G5 P& Y
( p6 w9 O: G4 O* M. R H var5 {0 ~. h( D( s# O' c$ ?
EndAddr1_0053BBFF : Dword = $004F470C;2 n2 m2 U) v$ c- X7 K5 Q; t( g3 u
EndAddr2_0053BBFF : Dword = $004F44CB;
3 q' E) @0 Q1 L9 v EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转0 F" I" `: j* Q5 n1 v4 @
8 T" x C4 ^" x/ x
CallAddr1_0053BBFF : Dword = $004611D4;) Q, E3 S3 o" C6 I4 I% c+ [0 _
CallAddr2_0053BBFF : Dword = $004611D4;
# y5 T' [" a5 V0 A# b
$ q+ p7 ~) l+ [- B$ ~! h3 p procedure proc_0053BBFF(); D5 r5 |- i+ b/ F/ S, e: Q. }9 I
asm
) Z( Y- V% C6 d1 m; j' h9 { cmp eax, $10 //与预先设定的 最大17比较" R$ o! k+ S ]9 s2 M, p2 \
JLE @OldCor //小于就跳转到默认16种色彩赋值
, h& ^- s$ n. y/ q. _ ]$ i7 Q8 J; s H* m& O
cmp eax, $10 //比较是否等于16
2 p6 G& W& n3 V( D) S jnz @Seventh //不等于就跳转到第17种色彩判断部分+ G8 ~- q' o: A& M% W/ A! E( M2 Z* a
* \( J9 F( p7 d& @; b& N2 B
mov cx, $A //字色或背景色? 没有去详细了解请自己测试3 e; C$ T8 @7 B5 c8 ?+ t" J
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
9 G. y/ j: [7 } mov ax, $A! b$ h v$ }& S" F. L
call CallAddr1_0053BBFF
9 ~) h) n) n( u mov edx, dword ptr [ebp-$14]
: l5 [8 ]9 R4 J1 ^" r/ z' O: i mov word ptr [edx+1], ax8 s- @% U: z) k1 T$ K
" E& @/ H$ Q `! i# y( g mov cx, $10 //字色或背景色? 没有去详细了解请自己测试' s1 X1 S) ~ R2 n) t
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
8 E! y9 _- M1 {! _ mov ax, $10
5 D2 X5 P" Z1 I/ Y5 i call CallAddr2_0053BBFF 9 K! ?3 ^6 }) ]. @2 K
mov edx, dword ptr [ebp-$14]
- O0 a' n) ?0 k7 E" A1 K$ J mov word ptr [edx+3], ax! g; j7 r9 Z& L- c {! [5 M
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs4 b7 N; E3 [# c: c8 v) i' Q
( b. [ A' N6 P8 t" J @Seventh:/ v, u4 `: \! ^5 {* c3 S! f3 ^ v* w
cmp eax, $11 //比较是否等于17
* [5 D, T5 J$ L+ X! f' I6 f+ N jnz @out //不等于就跳转到默认部分
" l1 a3 T1 Q3 m9 k7 Q' H$ q0 z
, R$ }9 ~% v$ y mov cx, $A //字色或背景色? 没有去详细了解请自己测试1 o# b5 P" Z2 a" Q
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF+ z& P" @- S/ M4 u8 Y% \
mov ax, $A
: X4 D6 s, _6 H call CallAddr1_0053BBFF
6 N0 J1 X& w4 ]8 k: f: k6 |, V mov edx, dword ptr [ebp-$14]
6 Z+ H' o7 u. d% u2 z! P mov word ptr [edx+1], ax
4 y: v* N7 B/ ^3 ~
7 G! M* M" O" Q' X mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
' Q/ e7 p9 r- q) n* B mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
/ G) b! {) v0 t$ t mov ax, $10: [6 ^7 ~* Y" Q' J4 }$ o: E
call CallAddr2_0053BBFF
) l3 L+ e1 y8 s' T3 C mov edx, dword ptr [ebp-$14]
( C, a" u9 d! ~6 s7 Q& I" H0 q% r mov word ptr [edx+3], ax! @3 E7 O( Y6 [, p+ K$ T+ y
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs& P+ v; K- e9 l! d+ f+ ?& ?
//
! n' W% ~! j9 ?0 x3 w @out:
1 P R; t1 w2 n jmp EndAddr1_0053BBFF //这个是跳转到默认的点& P0 S; B$ X2 n2 [6 q
9 i0 _7 L7 x$ }$ `1 ?% } @OldCor:! N8 t$ t: Y9 d5 Z6 c+ O
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
* l# X2 X' n# _4 R end
+ I. b1 {& w. v( n7 H2 e4 n+ o4 q j |