本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑 4 Z8 d$ J$ W8 J n' m' D2 G
C' \. e' E1 [$ B" w$ f/ r上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在. R: b: A4 j7 R, b/ ^
& T0 b& l6 ]) k dll里面进行内存地址读写
9 A6 F( G n+ x! N, ]% P
/ N" M) C8 a- U- w. i 我是在 8 A8 q! c4 D; Q& v
. `! J# w% B) Q" }1 T1 E5 |3 E 0053BBFF |. /0F87 41020000 ja 0053BE46
% @0 C6 s& _& t0 k5 O
q7 |1 ?' y4 @' e' T 在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写# q" f8 L. R& b2 u2 y
) b. a, L/ t& Z0 M
procedure InitDll();
! Z1 ?4 U/ R# ?, H; J var6 D! Z) M* k" `# z
p: Dword;
) m9 s9 K6 b$ ~% i' j begin
. Q) ~% I) N8 V. m, b5 f5 b p := $0053BBFF + 1;8 Q J( g' b: ~
PDword(p)^ := Dword(@proc_0053BBFF);9 U% _- ]% ]3 }& r
end;
" o1 a# k$ s2 L( @, H
. c$ v/ [% \# t. h% w2 A 在自己的代码里面写一个色彩增加的函数判断比如
* G1 p0 B! C9 H0 n2 ^9 o# _5 W; G, J" e( H9 g5 Z+ w: F1 p
delphi代码:
! r9 P Q. F9 k4 h9 o0 ?4 w3 S1 O5 Q |
var9 e+ E! D# x8 {
EndAddr1_0053BBFF : Dword = $004F470C;
4 E" _) n3 [: r% h EndAddr2_0053BBFF : Dword = $004F44CB;
$ [2 y, O3 y, h0 k5 L EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转' b1 E' G& ?: X
- }1 o! m& f/ k p, i# o# i
CallAddr1_0053BBFF : Dword = $004611D4;
1 s1 ?, E, q ?* B CallAddr2_0053BBFF : Dword = $004611D4;+ N& I" A( _1 R5 l
, {3 H, G& ?3 ?& ^
procedure proc_0053BBFF();
- ]0 E2 b# t! d( S/ Q asm" O0 F n+ `; R+ Y( m
cmp eax, $10 //与预先设定的 最大17比较; ?) f: d0 `) w+ N* f: g
JLE @OldCor //小于就跳转到默认16种色彩赋值
" ~; E {0 _; L5 @+ B* f
8 z% X1 {. t2 p cmp eax, $10 //比较是否等于16 1 {' P$ N* f `7 j& ^+ F# L
jnz @Seventh //不等于就跳转到第17种色彩判断部分
f9 k* K& ^; D2 b E! h% ?4 }$ Y4 \' N5 m' M
mov cx, $A //字色或背景色? 没有去详细了解请自己测试. o H" f4 `3 v7 W1 @
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
6 d0 m6 f* E- q5 U1 G2 v mov ax, $A( e3 ~$ V- ]6 `% f1 S/ |& Z8 l
call CallAddr1_0053BBFF / O: g0 N2 X0 f5 x4 p0 k
mov edx, dword ptr [ebp-$14]2 t9 j9 Z7 C5 S" Y& G
mov word ptr [edx+1], ax
$ M2 k# @* J6 ~; V! U% Q& S8 X( X
# |* l3 o# \5 J& H7 \# g mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
3 K: V3 |5 q3 L* G mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
3 \$ q1 o3 c& o2 j mov ax, $101 l0 V+ \- c2 S" j) q
call CallAddr2_0053BBFF ! | L y4 w4 z3 O% c3 G
mov edx, dword ptr [ebp-$14]
) s, c2 I, k8 d& a' R1 M! M mov word ptr [edx+3], ax
+ F) E0 K7 W1 P1 p! x9 c jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs" V/ M" I4 v) s0 d
( m$ a2 }, Q, m @Seventh:
. e' B% t7 g5 G1 K1 s# F* ^' O9 p cmp eax, $11 //比较是否等于17
8 z# x3 n5 S* [& R5 K+ h) D jnz @out //不等于就跳转到默认部分
! x( X* i9 `5 J) h" F. C! ^, c n/ @. a$ I( U/ k" N, P
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
* N7 ?6 F" J6 j- K mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF0 n( i6 X3 H3 J- Z; E7 x
mov ax, $A5 ?$ `7 J2 L9 {: T" b( S3 C! g
call CallAddr1_0053BBFF 8 T. j* t5 y2 [( j6 e$ S5 J* j8 C- u+ b
mov edx, dword ptr [ebp-$14]$ P# h3 v1 a9 `5 L2 h, l
mov word ptr [edx+1], ax
; h7 d' U4 ~3 O1 T+ Z; C, |1 [: i* E* U. k; F7 z O3 j Y
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
4 U. N( T! J9 K" U% d mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF+ c6 ?+ |9 s) X! ~
mov ax, $10 m( q* p. E9 Q' R: y, O4 k4 U! G f
call CallAddr2_0053BBFF
, K' b* _# G* ^7 S- E" L5 I mov edx, dword ptr [ebp-$14]8 \; t, ~6 a, ]* o+ O3 B9 v1 Q w% u
mov word ptr [edx+3], ax
) J+ h6 S' M1 d1 D jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs! H4 v1 K% E$ I% @' ?
//
Y( k& B' y: ^2 a. P R @out: ) o E% N" [+ n
jmp EndAddr1_0053BBFF //这个是跳转到默认的点: y$ ^1 ^1 ?/ P$ |" n
& w. {7 `( d0 [# v1 N" [ u2 K @OldCor:
) B Q; x. r# m$ N# F' Q3 F4 y jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
: A& k+ w% D3 f7 y# c2 {- ^ end % r3 k9 U; Z" F* A. r* s
|