本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
7 D) Z& w& s/ N4 |" j' _ s+ ^. Y5 H/ q, G* n: J
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在, n" P3 ^8 E" i8 g& k3 V
$ K6 _: f% c6 ]2 n' l4 H, ]
dll里面进行内存地址读写
7 d; d3 |5 ?. j
+ g. Q$ E3 T& `' W/ f/ A% u 我是在
8 G2 v ~ ` b1 N J- z
+ J1 A. B; ^" p3 L, t( Y% A8 F 0053BBFF |. /0F87 41020000 ja 0053BE46: q( g$ V1 y8 D, j
) l2 R' L4 H! F4 K# u& P
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
7 K+ ?1 Y, ]4 V; k1 D, \4 s+ U. ?( d' I* X' U- j0 R- \
procedure InitDll();
0 |1 \0 F9 S$ J! e0 [ var
; z+ _8 W5 m( {; T7 P' a p: Dword;
% P; |9 m+ s/ e8 P, J) w1 ? begin6 V2 d* W, J5 m! r2 [9 O
p := $0053BBFF + 1;
& B2 G2 `# l( p7 G v9 @ PDword(p)^ := Dword(@proc_0053BBFF);
* s" w, c5 f6 l1 J5 t: G. Q end;
0 |+ V9 a; `, j6 J5 a. z" m9 k: P" k
& X2 y' U; a/ S. d/ b 在自己的代码里面写一个色彩增加的函数判断比如! p ^2 T! B" H) D) p
- S! t% \1 X8 Q6 T2 N delphi代码:4 R! T4 K, K% j! z$ b: j2 F
, c# i4 V+ Y' M5 u# t var; V# Q$ c. f. S- p |
EndAddr1_0053BBFF : Dword = $004F470C;5 B4 s \- Y. i2 [' ^. C
EndAddr2_0053BBFF : Dword = $004F44CB;
4 s9 q8 T5 n3 d S P EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
2 K% c q) u' c2 |' j5 U% t3 `
7 e+ @( ?* O" {1 X7 @) }, V CallAddr1_0053BBFF : Dword = $004611D4;7 i: n" S2 X+ I( J
CallAddr2_0053BBFF : Dword = $004611D4;
# {: g5 `, x' a$ z: h' z
- x* J4 \7 X' _6 f5 d. r$ p8 I7 i procedure proc_0053BBFF();
; D) X" u( _7 R; B, I3 F0 D asm
& \8 C/ B# X" f% Q cmp eax, $10 //与预先设定的 最大17比较
% q& L0 a* L2 I( m" B7 N% `# Q JLE @OldCor //小于就跳转到默认16种色彩赋值
- r3 ^: c/ ]" [6 J x! I) R
. ]3 {( n* T; b3 \" b cmp eax, $10 //比较是否等于16 5 K' {: K# S {$ R5 w! ?7 @
jnz @Seventh //不等于就跳转到第17种色彩判断部分
) w8 c# p( D$ b8 N9 K5 h# q& b8 {0 @1 m4 _" J# z
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
6 K& V6 n1 u/ Y8 r. \9 T mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
+ }, q% ]' u8 n3 l mov ax, $A
& C+ g2 E$ D3 [* B call CallAddr1_0053BBFF + e! ?, N; Q; v9 k
mov edx, dword ptr [ebp-$14], Z+ N7 O" G4 \
mov word ptr [edx+1], ax6 d* t: j: T6 ~5 }
: O7 m6 [0 X# @0 J3 \) f
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
5 G: }4 k" b" F% p- Z. w mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
* m: u$ ~( y3 `0 U( T1 o8 y mov ax, $10
2 Y* X& W/ a: i& Y( |, L% @/ u call CallAddr2_0053BBFF
# _4 |7 `6 r9 @/ L2 b" b mov edx, dword ptr [ebp-$14]
& E$ t8 s# z9 o# Q, R& i mov word ptr [edx+3], ax; c7 y7 Q1 o8 P4 a6 }
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
0 X( p- q0 O2 }1 g' Q
! K, J* l3 K* B; O @Seventh:
: G9 o: W1 p# ~) O cmp eax, $11 //比较是否等于17
0 q- E, u9 H% J& P9 N( l$ l; }+ h* L jnz @out //不等于就跳转到默认部分
9 r0 l7 N b% ] I# F6 z% _# z2 u6 [" J
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
7 r0 Q! j5 A: K8 T, M1 h mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF; \9 g/ O6 s2 ~
mov ax, $A/ E m/ N7 `/ U8 R) F- z* j
call CallAddr1_0053BBFF l t- X8 Z, h4 L
mov edx, dword ptr [ebp-$14]+ {3 f7 A" f+ a6 T7 }4 N
mov word ptr [edx+1], ax
6 ]* j7 H3 _+ f3 y7 u0 V8 b7 k( z% [7 r' _2 }: ?& a* F
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试8 d7 d$ C, ^, i& Q5 m5 S
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF+ ?$ }. a& |& l1 ~
mov ax, $10
5 w4 C. h8 X" W& Z call CallAddr2_0053BBFF
$ A, _, H) y/ I- X/ M1 c$ C/ t6 j( U6 Z mov edx, dword ptr [ebp-$14]
# T- |# j9 f: A% c' {$ [! ]2 G mov word ptr [edx+3], ax6 i& J7 H' ]2 u1 L; e) X
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
! W% c/ \3 r7 j //4 H8 k/ a- C- \6 @
@out: & G; m9 w9 R, b& Y1 z" v; z
jmp EndAddr1_0053BBFF //这个是跳转到默认的点5 \1 a2 W4 _+ F! O9 }
/ v3 e9 O% ?* P7 N1 g4 @+ c
@OldCor:. y: b0 n5 |- X! b6 Y5 w! u/ R* b Y
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
3 L- F2 E. b! R9 Z: _ end
) ]1 g8 b% |9 B |