本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑 9 l8 M4 P" ?3 U* _. O) s, p* c
/ R, w5 x/ v. R/ v1 ~0 x上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在6 _2 t4 ^* _4 V2 y3 X7 f: N
1 R/ D+ j2 N% t+ [) W- @4 | dll里面进行内存地址读写
" k2 @# E4 V# H B. X& S; K
/ n5 H! K" o/ U 我是在
0 Y4 M$ `* c" |3 q
% z' G) ^1 w- `+ K s1 M 0053BBFF |. /0F87 41020000 ja 0053BE467 a$ j8 R7 h7 D
' c+ l# C2 K! l
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
6 b6 A3 V3 z6 b: q' H" Q) `- l$ u4 a% H2 S
procedure InitDll();
% s6 t% x1 `- K* Q8 I; W6 | var
. b/ K* t j4 ^ u3 t, T! C5 {1 G p: Dword;) x8 X. t$ x! ?9 [" N& p4 a0 }
begin4 H3 Z7 x5 e$ t, t7 l
p := $0053BBFF + 1; q$ g3 x c C9 e6 y7 Y! c) Q
PDword(p)^ := Dword(@proc_0053BBFF);* R. R4 l# H0 [/ o+ e5 A: y
end;0 s# V3 [+ ?% c" d; A7 b# F9 |
+ [7 P) K% t# e! R" Q2 j. { 在自己的代码里面写一个色彩增加的函数判断比如
& q. J" ?- M6 |3 N' N5 [- P: \8 c% g$ R. G* h
delphi代码:
4 I+ E* W" m% ? X9 e
! g$ n' x& _+ B: u5 h2 F( s6 g0 T) @ var) D m2 o1 j+ k6 x+ D
EndAddr1_0053BBFF : Dword = $004F470C;
( c/ e% t! v4 s0 p; H% E7 B: l EndAddr2_0053BBFF : Dword = $004F44CB;
8 F2 [4 I5 @3 i5 N/ a/ r ^# T EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
v. N( J; n8 Y" b
0 D! n5 E$ Z3 ~6 d, g CallAddr1_0053BBFF : Dword = $004611D4;
+ l' Q5 A) @3 P9 _0 I! v) N CallAddr2_0053BBFF : Dword = $004611D4;
3 P; Y# Y+ u1 O7 }% z/ V9 e$ C6 n& b* w) o+ Y' \& x# f w' h4 Y1 g
procedure proc_0053BBFF();. d; {; N. H9 u( T! s+ e' C
asm6 A/ z# s+ k0 r* x0 _
cmp eax, $10 //与预先设定的 最大17比较
% e" U9 l6 X N JLE @OldCor //小于就跳转到默认16种色彩赋值
$ p X; t% y4 T M$ [( f _' ?: r& k [* H3 x) ?0 }- ]7 y3 s, i
cmp eax, $10 //比较是否等于16 # J. @9 a' ]* s7 W
jnz @Seventh //不等于就跳转到第17种色彩判断部分
" u* v$ r$ U; |7 C
( n( Q e9 h; j1 p" Y& G mov cx, $A //字色或背景色? 没有去详细了解请自己测试8 b1 n5 M9 u; `. k' c" E3 R) p8 H+ O
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF p |' ]( @8 q' ?4 H
mov ax, $A: P8 ]& b& T& ^2 C5 T' m) ]9 l: `
call CallAddr1_0053BBFF
! E/ [6 b1 P# a5 G mov edx, dword ptr [ebp-$14]5 J: `; J2 O5 P2 f/ a
mov word ptr [edx+1], ax" `. g4 V# e. }: K$ k
; d3 i1 U& _: p! m/ m
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
0 I# e: t" ^% L4 F mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
5 ]0 j q3 V+ G( B% K0 Z mov ax, $10
M* \; g0 i1 h8 b. B call CallAddr2_0053BBFF a& C2 {6 S8 @7 n( l
mov edx, dword ptr [ebp-$14]
3 i" m( \3 X) W5 u9 B mov word ptr [edx+3], ax, v4 m7 m0 m% J( ?# X4 y
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs$ k8 S7 i- O5 W1 p+ I: t. ~8 Q* Z
# f2 F4 G2 M. ^# X @Seventh:1 R7 |/ q# c6 F4 K7 ~' T
cmp eax, $11 //比较是否等于17
+ T7 u( u N( D jnz @out //不等于就跳转到默认部分
) X, g. ]0 m& o; f5 C
' O0 y! ~- r: m0 \ mov cx, $A //字色或背景色? 没有去详细了解请自己测试
* [( I6 Y% [0 k& ^2 B/ h mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF$ L+ c5 j/ P& {) _
mov ax, $A6 K8 f9 y2 p' ?0 n7 g
call CallAddr1_0053BBFF ! R3 s8 o& O: G4 x1 C( C
mov edx, dword ptr [ebp-$14]
7 i1 W* J; x4 `1 O. F mov word ptr [edx+1], ax
2 l: f: P+ o% A5 e+ x) R9 ]7 E4 M. m }0 L" P: \
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试% q( s: c0 Q1 a( }/ B" F: r
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
# n$ L" a! i) ?3 U, K mov ax, $107 |, ^7 ?. w1 S2 P( m* o1 C" C
call CallAddr2_0053BBFF , E$ ]2 ~& O& t; c1 O3 a% a
mov edx, dword ptr [ebp-$14]/ T3 z( T' B/ B0 N
mov word ptr [edx+3], ax; S) A) ]( S( Z( z; B: f
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs/ W' o9 e1 q9 S7 z; O: z" w' h
//
u5 P( I/ _3 M5 ^) ~ @out: * F" _8 G. r% d$ E$ \1 w; P
jmp EndAddr1_0053BBFF //这个是跳转到默认的点
8 [& K0 P0 e) }( R n- i4 V# q5 w# w7 w' N# z( X3 B* Z# T7 d/ {9 H
@OldCor:+ m% t& ^) Y; [# @
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
# ?4 E D6 f" w/ p ?1 K( h" o end 3 q. j! e( b' e) @% W
|