本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑
! n; E6 I1 B" U5 v; E2 i1 u& E( e6 ?. Q2 v! T6 {+ B$ `. h$ p: F9 |4 n
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
# T' a* a# ` f4 i& d4 U9 }4 b' q' F* Z* v& c2 v* q) ^
dll里面进行内存地址读写8 ]) r+ ^% f6 k3 ~3 u
# t4 y# R3 i2 [) g6 q4 Y
我是在
# e! b! H& w7 Q8 n' K2 o% ~' w
, ^7 U& ?# j3 u; A7 e 0053BBFF |. /0F87 41020000 ja 0053BE46
1 l F {: P' Z+ {3 d. F2 y& X* @
) n7 m. T, }& O: I2 L 在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
- h3 d, l8 S: R) v4 E! v7 F- h. Z
/ Q; S6 Y$ h' p# k& h& A; `( X% j5 J procedure InitDll();
: ]% V9 Q. I {5 B s var' n! ]7 _6 |$ O6 N/ s$ q
p: Dword;- ?. h6 z. Y: |9 |' ]# \! Z
begin
, O( w5 B5 l7 M9 ~2 d* @ p := $0053BBFF + 1;
: V4 q, w4 ?1 y8 d% l PDword(p)^ := Dword(@proc_0053BBFF);* z6 m) V. A {5 K* X$ i p, Y
end;7 c- A0 H7 @; t: ~* D. a, f
% G# n2 _7 e' H8 E( U4 o. ?0 w2 Y
在自己的代码里面写一个色彩增加的函数判断比如6 i; z7 u) q' @: I
3 m* [& s% u$ G0 N
delphi代码:
m& }6 R' Y* T% r
8 j- O4 t% l, B5 o c1 R0 o var
% }! y+ Z2 p2 S4 I6 z3 k) ^6 y EndAddr1_0053BBFF : Dword = $004F470C;
& I8 l% q" H8 q, i& J7 r$ ` EndAddr2_0053BBFF : Dword = $004F44CB;
& h2 h# @# ]- h, @- W6 F1 M4 ?4 Z EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转6 ]% b6 u& J* F
$ ^9 X4 h. g, u, l/ i1 l
CallAddr1_0053BBFF : Dword = $004611D4; E# S5 q" s8 M5 g
CallAddr2_0053BBFF : Dword = $004611D4;7 K1 p# |$ d1 C6 a, g5 M) P0 N
. I8 g5 T. K! U2 _$ Q( V/ V
procedure proc_0053BBFF();% Z# y: e" S8 l2 ]/ s
asm/ }% f$ }' O( T N* P9 [
cmp eax, $10 //与预先设定的 最大17比较
8 i. ]. {/ t2 m! j1 ?) B JLE @OldCor //小于就跳转到默认16种色彩赋值0 I" s4 l- z- Q- M1 V$ I& B( u
' f' i5 S1 [# _' I+ P: Q _ cmp eax, $10 //比较是否等于16
; O# w' V2 A; y$ D1 M" _9 b jnz @Seventh //不等于就跳转到第17种色彩判断部分
+ @3 o f- u! {5 ]; t8 O+ a5 y2 h
! b: K; I; r& s mov cx, $A //字色或背景色? 没有去详细了解请自己测试* Q* M# z1 w: g# f
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
" Y+ X) `1 Y* ?. M9 {; C mov ax, $A
- w- X' S4 h. x9 O2 o: ~- [ call CallAddr1_0053BBFF . B, ]9 i" F; q2 F+ z
mov edx, dword ptr [ebp-$14]
' N: ~5 G" I& O mov word ptr [edx+1], ax
4 ?4 ~4 x- u) f7 i1 D/ t! @
6 h; ~% t( n- g# ]' Z mov cx, $10 //字色或背景色? 没有去详细了解请自己测试, \& f5 a. t+ C: r4 Q' r
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
, \ o0 R' c l8 @/ u; l M mov ax, $10
% g ~9 P; [ S# V& ^1 h6 }/ | call CallAddr2_0053BBFF 5 ]# l. j, \5 {$ A$ B r4 M$ `
mov edx, dword ptr [ebp-$14]
" b% |- B1 }* A Z2 j+ y4 }( `* m mov word ptr [edx+3], ax" b5 `" i2 Z; }; h, w' u* |
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs% Z9 W" F2 ^$ Q* {; D
8 y% {" b0 ^ T. G( b @Seventh:
9 Z1 ]- k% u# s2 I cmp eax, $11 //比较是否等于17
7 e5 z/ O$ ~ ~4 p jnz @out //不等于就跳转到默认部分
1 R2 s3 I" l4 ^4 \# u
! F& [, a: u7 T2 Y0 [) L1 g# m mov cx, $A //字色或背景色? 没有去详细了解请自己测试
! e# f: f1 I1 J# o, h$ c1 i! w( f mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF1 K+ | s' b+ g' t! k+ d
mov ax, $A
, v' d$ z/ e; V e call CallAddr1_0053BBFF
7 N( x0 N5 a9 |1 | L' ] mov edx, dword ptr [ebp-$14]) G1 d3 E8 A; V: Q/ k! y" s% ]
mov word ptr [edx+1], ax$ o& b! }; b7 {+ y7 ]0 F9 N
" C, _" \+ V! C" _% R
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
3 Z6 @6 P. Q1 e* s mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
3 w% I) t7 V* f* U8 V mov ax, $10/ {# }+ O; w$ q8 {, }' R" S8 x
call CallAddr2_0053BBFF
: n/ h0 W, o: ]1 u* Q ? mov edx, dword ptr [ebp-$14]
1 Z* E# Z3 o# t( x mov word ptr [edx+3], ax% k% J5 o( u2 L6 q# w8 W
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs! D* J& i- x# [# ?& j1 A/ F5 `. e
//
, t% S- D) j. H @out:
1 g7 t8 I3 N2 ~, ^4 m* v jmp EndAddr1_0053BBFF //这个是跳转到默认的点
+ E( W' v) z: F& N, n1 j5 W. ~, r/ D5 h, x/ u: c
@OldCor:
: |2 S( _8 a3 {! e, T5 Y _ jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值, t w* |6 M0 V$ J# i' y/ t: r
end 5 x. ?9 P* p+ V# Z& H& {3 z
|