本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
. H4 s0 t. S- |% g
" |* m9 A) h3 v0 d" o上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
- S5 L0 Q/ P: [0 K% C, l: h+ Y
1 B P5 w7 I1 G: I dll里面进行内存地址读写
' a$ b, H8 j- G8 L' n
& o5 s5 b+ F j1 P 我是在 1 h" f3 A6 X2 S0 Q( g
V/ S; A; V% G) r' s1 N 0053BBFF |. /0F87 41020000 ja 0053BE467 d- s; y; [8 c/ C# ~( \
6 T* m/ Z" z) a 在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
9 V! ]; i( b G" d; y7 W& |' v$ O+ g! ]
procedure InitDll();
" L* b, R6 t+ n! }! O var
# f9 q6 P3 X3 N0 w p: Dword;
2 B! y+ R8 o7 C$ a- t2 t# ~ begin
% \, L* t% m3 I% r( ` |, V p := $0053BBFF + 1;; P, t7 C, a. G
PDword(p)^ := Dword(@proc_0053BBFF);: \& C9 }9 {0 @, U, Z* A
end;
) D- R' e A. h, `! e( W9 k4 V- ]$ d0 Y, O o; n
在自己的代码里面写一个色彩增加的函数判断比如
2 K4 {8 q4 E5 m$ Y% E/ s
4 u! H/ C [" f& U. T4 N' F delphi代码:/ d3 F' F7 t2 E2 D4 m
5 B5 O7 u- y2 ` r* N
var- y) h" _5 Y" a5 T
EndAddr1_0053BBFF : Dword = $004F470C;
* L/ _, C+ n, Z* H EndAddr2_0053BBFF : Dword = $004F44CB;5 X0 w4 [9 n& w5 n4 ?9 ?2 [
EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
1 ^8 |) p. p% `9 E& w$ z: E! |: C; O; y$ f4 p1 ^$ r( Y0 q: f
CallAddr1_0053BBFF : Dword = $004611D4;7 O# I" q- B" p* W' D2 `) e4 h
CallAddr2_0053BBFF : Dword = $004611D4;7 V( d4 Y# @ x X) d9 o9 F7 r
) k! s; U f! q, k4 U" s* ^
procedure proc_0053BBFF();
( A9 ^5 j7 P" ]: z" D" j asm5 @" o: }% p" p8 e1 k k# i9 t; q
cmp eax, $10 //与预先设定的 最大17比较! {, @" |4 Y. l1 f/ \
JLE @OldCor //小于就跳转到默认16种色彩赋值
2 S( z" k, M1 D# U$ y+ R# x2 u; F) `7 d: Q* K+ c7 W( V g' {% a9 b
cmp eax, $10 //比较是否等于16 1 p& l" F& F7 @! [4 Z. R8 H4 b
jnz @Seventh //不等于就跳转到第17种色彩判断部分
4 G" M$ `* M* B0 \, Z" e5 ^. R( r, t1 }* L( |3 Q
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
/ R, _; P% R+ X2 |3 Z$ w mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF0 x8 P$ A7 ^: [: t) H7 M
mov ax, $A% r* _6 t5 }) Y" q' W
call CallAddr1_0053BBFF 8 O0 ?- f; T5 W$ m9 Z
mov edx, dword ptr [ebp-$14]& X4 y2 x2 }$ x7 ~7 R' r/ C
mov word ptr [edx+1], ax
& W4 B! N3 i0 |" x, L
9 I+ P' o }3 n3 b mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
% U2 w3 T& |+ [$ U: R mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
; B& G. C9 E/ x$ P) y! i6 v$ M* I mov ax, $10, [0 G# \, r! c' z
call CallAddr2_0053BBFF
8 L2 r; u, r) V C% f) T) W mov edx, dword ptr [ebp-$14]
+ G4 Q5 L/ ]* N! W mov word ptr [edx+3], ax
% X7 g6 n3 r1 K: Q9 j6 F& t# w jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs( l) b: r3 ~ q6 j0 E- Z
) N* ] V5 m: v
@Seventh:
# `* `" u; n8 r cmp eax, $11 //比较是否等于17 4 P/ Z, u7 E5 x- {: p0 \7 r
jnz @out //不等于就跳转到默认部分
- h1 ]- h/ h. M9 [& [! Y4 s! I* q7 O& C( r- |; b' B
mov cx, $A //字色或背景色? 没有去详细了解请自己测试! a' q- }* ^& Y, A$ g7 ?
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
/ [0 K! g) Z( k- ^ mov ax, $A
' d& W" ]5 T* q+ d$ H call CallAddr1_0053BBFF 5 J" S& Q/ J' k5 |- Z) h2 U2 u
mov edx, dword ptr [ebp-$14]
; \/ p7 r+ z) `" U9 V% H- F mov word ptr [edx+1], ax* K2 a8 I- ^1 S8 i
1 v8 h2 E" P. r, O" f/ r mov cx, $10 //字色或背景色? 没有去详细了解请自己测试1 N0 i; i7 }' s6 y6 l
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF p( `, a5 m, I
mov ax, $108 k" n7 w3 D6 p3 \* L* t G
call CallAddr2_0053BBFF 9 v- q6 d/ [ a" r4 A
mov edx, dword ptr [ebp-$14]
3 x% z7 V- Y f, z: E2 ~ mov word ptr [edx+3], ax
1 y* H- Z7 i7 \: v k/ g jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
# O! H+ T Z/ v4 X" n6 o3 N //
( B+ [( M" ^: _. E @out:
) H. ]; P* v' J+ {& Q& G4 D ]! n jmp EndAddr1_0053BBFF //这个是跳转到默认的点1 r7 n# f3 B- V3 g, H+ r
2 [6 [+ h W5 H0 H' b: {' _ @OldCor:( A8 j6 m1 S, x3 C& `
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
" o9 D/ I) F$ h! Q" E* B) c end " e+ P- F/ B+ I, l% p3 N+ F* U
|