本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑 ( f! G% L# u8 ?1 x' b
) V$ e5 E! _- J! u0 y- R
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在" U8 W; ]+ `" B9 f
9 ?' @2 `- ~) a/ Y' A dll里面进行内存地址读写' h" x/ U4 c: |; n# S
6 ?8 ?/ |2 c4 y G) Z! r
我是在 7 G' m& Y1 N4 T8 ~3 E" ?. b( d, m
* p) A$ S7 K, m8 y9 ^ S 0053BBFF |. /0F87 41020000 ja 0053BE46
; U. U: L5 V7 _8 s6 X( _+ z% j! Y4 i
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写, m, s3 I4 H/ y) O% x1 n
* K3 t$ l( b; f( Y0 Z# P procedure InitDll();
5 S# S# f X' r9 \ var
* B8 ~8 a4 v. a5 P3 P! p! ^* J p: Dword;5 J0 u6 l" u; y* m K3 s; o
begin6 O' y M" {; N; O/ r& r
p := $0053BBFF + 1;" z/ y' p/ o; `( M: ]6 g) K
PDword(p)^ := Dword(@proc_0053BBFF);, g" y5 j; g+ u8 y5 r0 y
end;8 s8 ?1 w2 Z: N+ l: {
, b+ R3 S5 o) y 在自己的代码里面写一个色彩增加的函数判断比如5 O' H7 t6 B+ A# {5 P
0 {9 c- z* {( E1 w7 `2 }, ?0 B/ H: k
delphi代码:
8 b9 x, b2 B5 U! v4 C0 r( s3 y) t7 z3 \9 S6 r7 E
var: s- j0 X( t9 [9 K# c5 U; `2 ]
EndAddr1_0053BBFF : Dword = $004F470C;: P- T) r# f" l0 ~% q" |
EndAddr2_0053BBFF : Dword = $004F44CB;
# h) U# f( N2 t EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转3 j/ @9 A& ]: m' }. a! c) u
- f* y2 t( `/ L5 a, ~0 { j6 P CallAddr1_0053BBFF : Dword = $004611D4;
0 u) _) w m. L. J+ O+ @. t c0 l' j CallAddr2_0053BBFF : Dword = $004611D4;+ E7 }. o, }, d4 u% h$ c0 P! x& ~% l1 O
) v; j) C7 l" h, z4 A- G2 U' L5 ?2 ` procedure proc_0053BBFF();: g1 }. ~* j: L( U; ]& t" j
asm, g- z( q d! e v6 i Y
cmp eax, $10 //与预先设定的 最大17比较
0 X* R" D# p; B. s2 ? JLE @OldCor //小于就跳转到默认16种色彩赋值
5 q/ Q8 a4 X& W1 B3 W2 H* q3 x$ m. f3 X
cmp eax, $10 //比较是否等于16
4 Z5 h+ N% D; J: d) _ jnz @Seventh //不等于就跳转到第17种色彩判断部分) Y& B: R& X+ z c+ \0 }5 H
! M0 E! ?3 s7 n5 D7 f) |7 A mov cx, $A //字色或背景色? 没有去详细了解请自己测试
" h( A$ O5 [0 m* w5 g* F. q mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF& @" g4 z K! I# c% e1 u
mov ax, $A
! r" D A2 ]. r7 x% p6 Y; i( w' q call CallAddr1_0053BBFF
4 l- \2 s5 c2 W) m7 P mov edx, dword ptr [ebp-$14]
6 F6 s& G" `. i, q6 C- {- C mov word ptr [edx+1], ax& K" V$ \, F- z2 @- O5 S7 j/ T
0 U4 Y( O6 l) W. s mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
& V9 O0 J! K- z mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF6 Y9 E( r* i# t# G; v' m" l5 d
mov ax, $100 c; i* R! o& X) `( v4 z+ K- ]0 N
call CallAddr2_0053BBFF
! b7 B: r" i k. J2 K( y: S b mov edx, dword ptr [ebp-$14]
8 R7 j6 ?" c# @6 r. ~+ x" p7 d mov word ptr [edx+3], ax
2 D5 A8 r; @$ c jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
" F0 \# B, p% K: A7 ~7 r; s
' {$ ^/ M& B; h* p# a @Seventh:
- D8 Z$ _% u e0 v cmp eax, $11 //比较是否等于17
' W* T$ ]" o2 s; l" x8 \* n jnz @out //不等于就跳转到默认部分
+ D1 d+ @0 ^ W, q1 H1 E
- _) [" L" h/ P# X mov cx, $A //字色或背景色? 没有去详细了解请自己测试) d8 j5 A7 ~; P( W. O5 `, b3 E% b
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
; c- h( H. p' d: p; l% x. u* G mov ax, $A% ^0 A/ K8 g o) `. `4 Z
call CallAddr1_0053BBFF
3 G5 ]9 b; L, [8 h: S; |! C# v mov edx, dword ptr [ebp-$14]
" p8 ^& k# d6 v3 i3 _ mov word ptr [edx+1], ax7 s: R/ b, x4 q& l% G' L! N# J8 a, Z
9 k4 d$ z* T% b6 o' |
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
c0 \0 Q. U0 ~ mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF! i; }- s$ S1 y) \
mov ax, $10. ^ f% w+ X0 y% ^
call CallAddr2_0053BBFF
& @7 m" x) f+ r2 h! p8 V' \ mov edx, dword ptr [ebp-$14]# z7 Z. W* C \* t/ N
mov word ptr [edx+3], ax$ C' q7 S7 L$ x
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs, ~% K4 ^' K# b8 k& d* l, O7 p. Z
//; ?2 }0 I2 B) E F) Z% e5 o
@out:
4 u Q- v. u4 T; V: v% ^% m' E jmp EndAddr1_0053BBFF //这个是跳转到默认的点
8 |' R* q* N/ h- ? i0 F4 t! H# R7 p5 _, \5 i# I
@OldCor:. m5 {" V5 |! I5 s7 i/ x7 \4 e
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
2 [4 }$ R1 ~$ p, a# K! W. ] end 7 |) b1 S$ n Q x& n* @) A
|