本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
! _5 t) Y$ p, J/ J6 }2 U0 t
% P M5 g+ }- m6 s上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
6 |% T: |! j+ H9 q. D- p; v, b4 q: f' r4 y& K. u: ^& D8 E
dll里面进行内存地址读写
4 |( S4 |% }% ~& o- S: O0 Y: w* u0 W) }
我是在
, h& d" u7 x# X" E) `6 a
5 J6 s4 H$ j- _3 g: \ 0053BBFF |. /0F87 41020000 ja 0053BE46: Z# [9 F H0 @
. Z4 U V3 f2 Y. n( q
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写6 }) S7 E$ }7 D- C3 ]( b9 `
6 V: z# M1 N( G1 v H2 H( ^ procedure InitDll();
. }1 R! V ]" M ?5 D3 f var) O* n* m9 q/ e( B2 G% s
p: Dword;8 w$ Q3 P; u) n* c2 F* F8 k
begin8 t* b4 r. J; Q7 m7 T
p := $0053BBFF + 1;/ D( `8 H0 g( r; s+ e
PDword(p)^ := Dword(@proc_0053BBFF);
. x! S$ W! D4 J end;
5 @+ R4 s6 G8 j* \
* n; E+ B( I6 x" W8 b 在自己的代码里面写一个色彩增加的函数判断比如
+ X$ q1 M' e! n# l f$ z
# p: `( _" Y3 Y) i6 G4 i, }# f M delphi代码:
2 E `) H! U% a% A$ R! |3 A% `! S( o1 ]/ b& `0 F& q' S/ n9 y
var: L% G9 _: t# h$ M5 O
EndAddr1_0053BBFF : Dword = $004F470C;
' j4 V* p1 U* B y+ R) f7 \! q EndAddr2_0053BBFF : Dword = $004F44CB;" g6 E( t5 E W. s- ~5 H
EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
. ^7 r2 S M- X& M2 V2 X- g: I. [% ^* N' [" X
CallAddr1_0053BBFF : Dword = $004611D4;9 c* l, r/ O. J3 ]: _$ e0 N
CallAddr2_0053BBFF : Dword = $004611D4;6 [, Y% M' g5 }8 h7 ]2 \8 H4 O" ^8 d
/ G {5 I, o6 B7 O' l5 s" H+ v
procedure proc_0053BBFF();7 B. l/ K$ r1 S+ h/ I2 z
asm! T3 E" t7 Q! Z3 e* u2 U( ^ [
cmp eax, $10 //与预先设定的 最大17比较
- r' @% P& ?8 W% `' v$ t8 z0 ]9 j JLE @OldCor //小于就跳转到默认16种色彩赋值
1 E0 Q9 v0 J6 d" O# P' ?) n1 _6 k, X3 D( r' l
cmp eax, $10 //比较是否等于16
% x& w# L/ T B- W: ^4 b- I jnz @Seventh //不等于就跳转到第17种色彩判断部分
! d9 @. z! n+ n) N
. M* L ~9 K C( n mov cx, $A //字色或背景色? 没有去详细了解请自己测试
5 w' N1 e- `! M' D mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
$ C% q- q8 Q7 l- e5 |8 i3 q mov ax, $A
/ D( K$ n) m% s) p4 z' R! g+ V! F; K5 L call CallAddr1_0053BBFF 1 \2 K' |' K8 `) Z6 C" M8 d
mov edx, dword ptr [ebp-$14]
* q0 q3 s! P$ F, P" O+ Z+ _6 a mov word ptr [edx+1], ax, L7 i6 `" A0 b: [
% c/ P1 m' A' P" ~) B3 w mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
2 l4 \! l# Z' D, w4 z- Z7 x$ _ mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF+ J+ E6 I, M8 P# Z1 [: Z* o7 d
mov ax, $10- J+ O; U0 J5 A% |6 b
call CallAddr2_0053BBFF $ G& [& q/ I) M( K* v% t
mov edx, dword ptr [ebp-$14]
y/ `; `* g. T mov word ptr [edx+3], ax
% `6 N0 T2 P! q, O6 Y. ? jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
: ]* x$ z. p) O
; E1 @( a4 m W @Seventh:
* a) V! D. o: W cmp eax, $11 //比较是否等于17 ) c& _- D' c6 ?% ~2 Y# b$ x
jnz @out //不等于就跳转到默认部分3 M$ ?/ T8 t N* X# g
9 y$ t* l) i3 Y7 v9 G' e
mov cx, $A //字色或背景色? 没有去详细了解请自己测试% b# h, B5 l1 Z$ y' y. r
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
2 _1 U" E) Q& C8 S, @4 r mov ax, $A
* R4 @* I- w8 x/ Z4 M8 x/ U4 d call CallAddr1_0053BBFF
c( r2 `, E Q3 S mov edx, dword ptr [ebp-$14]
. ~+ I: @ n: ]7 G& p: @1 s mov word ptr [edx+1], ax
2 N. d; r$ o& E
; k5 i% ]+ L9 u9 |; Q mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
j; ?8 `/ [2 B. G# J, S* H% ? mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF2 l+ C6 P, |( @7 n3 j7 s
mov ax, $10
# g8 o2 W1 V! Y! E3 ? call CallAddr2_0053BBFF
# ?$ A0 l$ O4 b$ [ mov edx, dword ptr [ebp-$14]
9 c$ F3 e% q5 _( q2 T mov word ptr [edx+3], ax
6 C$ i( w9 s7 [ P$ V jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs7 D2 r+ Z7 k A3 I' s
//% w! |- y$ ?3 n6 [; O# n
@out: $ d/ e o) [7 q: f6 O! J/ P7 d
jmp EndAddr1_0053BBFF //这个是跳转到默认的点
4 W+ z f+ _8 ~7 Y" r$ W5 y. z7 z9 |1 l& ~& f( n* _$ Y$ h
@OldCor:2 w7 p( N# h; Q6 U9 X: X
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值0 M4 E! D# {; {: E& c
end
7 J g. a( }- b) b8 |+ j% q |