本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
6 m: ^( E: }8 h" W
. ^& H$ b8 J+ {1 W+ g" b上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在0 N6 \- I! }3 \* y/ U: J) {
6 l& q8 B4 {2 _. ?2 |- q5 E
dll里面进行内存地址读写
6 M% C) Z/ D' I5 s( n' g
8 n0 ]# P* j3 P& U 我是在
+ @1 N) ?( j0 g ! e7 f* q5 V* J, s! V
0053BBFF |. /0F87 41020000 ja 0053BE46
& S+ i/ J) S8 R8 ~" j+ C
1 `) t* T/ M+ z% P$ l 在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
0 J! f0 u. {/ P4 X; j& d" w
! B! F) R" h2 C$ K, V. T procedure InitDll();
+ q: r' N& L7 }% [) f4 Z var
+ Y& e; f3 n/ |: K3 C( j6 y) g) L p: Dword;
& s# j. x2 i( k0 K; a$ k! K6 H/ T begin
# U: p3 [+ \, d, Z) F p := $0053BBFF + 1;# D' x& j2 l/ ^9 E ^1 g* P% u
PDword(p)^ := Dword(@proc_0053BBFF);
@) I4 e* W& y' d end;
; U7 B* L5 y/ F, h5 r: Y
8 {2 U; t, I! F 在自己的代码里面写一个色彩增加的函数判断比如! S1 y n7 H9 n+ C1 N
1 Y/ I n0 j5 y" e H7 Z: u; P7 B
delphi代码:0 {& t5 |; q8 G; ~; }% r% Z
$ j) n+ v5 d u9 A" G8 D7 D, ]
var3 `* {2 `7 \0 K# U0 H+ k) q: \
EndAddr1_0053BBFF : Dword = $004F470C;
( f/ l& N0 V* ], _( [$ @ EndAddr2_0053BBFF : Dword = $004F44CB;
- }1 D2 ~+ U7 n r) {0 P5 k EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转2 r1 d/ K. C5 a% `5 @6 {% {# J- Z
; j/ b5 M( N4 @+ k' ~
CallAddr1_0053BBFF : Dword = $004611D4;
" o- v. F, ]1 g! e \: g CallAddr2_0053BBFF : Dword = $004611D4;9 [0 h. H! {( I1 X0 g
. p5 H3 w9 s2 [/ O6 K6 B procedure proc_0053BBFF();
! x8 l: U# u& C" }# j2 ` asm
! Y, @; \- y0 @& M8 l) D3 A cmp eax, $10 //与预先设定的 最大17比较5 k" P+ d! E" e* v' }9 a" R
JLE @OldCor //小于就跳转到默认16种色彩赋值& `1 I/ r! ^, _" C0 ~* i& U& q" m8 B
* e6 W. e: a1 C! W3 ?+ H4 M cmp eax, $10 //比较是否等于16 . L- | k1 z# T' \+ w
jnz @Seventh //不等于就跳转到第17种色彩判断部分
1 e2 l9 e% C7 o6 H% \
1 U/ p: z/ ]5 O% l) _& e1 y mov cx, $A //字色或背景色? 没有去详细了解请自己测试 `6 A- M2 k1 q6 F Z$ t4 P4 a
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
) _, Q# D6 v+ c% \: B D mov ax, $A
|4 C3 r# A4 z9 Y call CallAddr1_0053BBFF
+ V3 e. {8 s4 [- h, w mov edx, dword ptr [ebp-$14] P, R8 ^" w( |& ~( ?8 |' H' i
mov word ptr [edx+1], ax
( Z$ N, o0 ^3 Q: i% |8 i" K1 A/ E* F% w( M K! P# W
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试- @' u5 `7 B' S$ C
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
: |* E% d% b% M1 F/ S* v mov ax, $10
# E# R2 q% O) L/ k2 x call CallAddr2_0053BBFF + y' F; u- Q( G/ g2 e
mov edx, dword ptr [ebp-$14]6 m7 U6 R" X- Z
mov word ptr [edx+3], ax
4 e; G& _* T3 g* L( o: b jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs# M J2 P- d( `2 B
/ }9 ^7 a) {* w9 f: C+ k
@Seventh:- T' B& w" N: s# v- Q% ~& C* O
cmp eax, $11 //比较是否等于17 4 w4 E0 M: k/ G2 [
jnz @out //不等于就跳转到默认部分
& }. S* D! X4 ]- M
z. ~# z) T e$ ` mov cx, $A //字色或背景色? 没有去详细了解请自己测试
6 V5 M) k0 Q& [% t; Z8 i mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF, \% P: B- S% X, a0 X0 b% w' P
mov ax, $A* x! i9 D3 A$ }# C$ c. U/ y2 A- L
call CallAddr1_0053BBFF
3 u3 |& }+ c4 ^. I mov edx, dword ptr [ebp-$14]! ~6 Q+ q0 W4 a- e6 Q, Q
mov word ptr [edx+1], ax( I! n& j" Z+ {/ x
: z! ]. q: ^2 G3 C
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试0 Z4 R& k9 r7 E* ]9 G6 r& }: K* B
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
; k5 h- {7 u2 j3 c; ~; v9 V" _1 G5 F mov ax, $10( |: h* b! K" `5 j' A
call CallAddr2_0053BBFF : Z: }* T7 G( a& j* }% M: l
mov edx, dword ptr [ebp-$14]* i* Z, k' y2 r+ c9 z3 ]: f) A" X
mov word ptr [edx+3], ax
2 o: C; K' A1 j9 M+ j jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs9 R+ Y( ~4 W3 p3 U$ g$ s
//
/ z, U* |% @' B/ Q) Z; J @out: 7 s% x0 {" r+ ~1 Q# Z8 I9 E
jmp EndAddr1_0053BBFF //这个是跳转到默认的点
4 B: L0 \% K Q) q, F0 M2 G* E- n- K2 _7 s: u0 F0 {% V
@OldCor:
0 T% B4 }! {$ l* U* ~, X2 a1 J jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
% r. y M+ X1 T end 8 S# @: k4 _4 l% W3 w
|