本帖最后由 快要发癫啦 于 2023-1-6 09:35 编辑 7 |; G- t$ l" A9 J0 E4 }
- G( a. [, P; x! [8 D) ]+ I
上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
+ o/ e* H5 H6 I6 ^2 @4 r. Q) y) c
5 Q7 k6 R; s% Q% G, g2 F dll里面进行内存地址读写
9 f) S6 I$ `" X+ a0 X% |
) `+ {' R$ a4 k2 W 我是在
- ~% Y- ]. t1 o2 N . `+ ~, @/ ^1 ~, s5 n* _% V. s1 h
0053BBFF |. /0F87 41020000 ja 0053BE46
" x$ y4 X8 G, J; F7 s
- c! f0 d# ^4 r# h# x+ x! M" x% M) r* h 在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写; z5 _: n1 S( R5 Z6 t8 E7 J
2 o* _" S# T' E$ g- e procedure InitDll();
9 D* s" z6 x9 B D D- N) i7 ` {4 h var
4 ?- x! h% D8 N+ c) P; f; i2 c' p7 c p: Dword;
2 \ [1 z6 }! O8 v begin" t2 Y6 C+ {3 z" u- V) f* y
p := $0053BBFF + 1;! V8 F. S" n- x7 i' P) h% l* K+ v
PDword(p)^ := Dword(@proc_0053BBFF);
) H4 f% c; A- P/ x0 m end;
: f* Y8 o2 t$ X- S6 v: g, |$ a
( d( r3 y: Q3 M5 S' v, T7 h& g 在自己的代码里面写一个色彩增加的函数判断比如, a0 }/ N8 v7 _/ e5 ~7 g
L1 P% H: Z; Z. o9 N( t/ b delphi代码:5 o7 j/ H8 S2 p8 j2 m! [1 T
# D6 @, v2 O) s4 ~
var. T2 [5 D+ Y p7 V: ?, h- Z
EndAddr1_0053BBFF : Dword = $004F470C;
: ~5 G; ]+ g1 J, \ EndAddr2_0053BBFF : Dword = $004F44CB;) E4 [' W* O5 V* [5 n
EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转2 k @9 D/ S: C* O. [$ Y1 M
2 u+ I4 Y) K+ Z* w* l1 P) x: L$ ~
CallAddr1_0053BBFF : Dword = $004611D4;" U4 S- x+ i6 o# S% e' x
CallAddr2_0053BBFF : Dword = $004611D4;
( a+ J: G4 \0 v5 R; ^ I" z, x; P3 V, R4 i* U2 E( c
procedure proc_0053BBFF();
) `; J0 B9 [8 s7 Z4 W asm
( l8 Q _/ N* o. ~, V3 w cmp eax, $10 //与预先设定的 最大17比较
7 g1 a1 A4 P4 K( @4 Y! j JLE @OldCor //小于就跳转到默认16种色彩赋值* p1 B/ N( w4 V
" [1 U O6 |/ D- s cmp eax, $10 //比较是否等于16 ' a: P2 {" |0 i3 O4 I( j
jnz @Seventh //不等于就跳转到第17种色彩判断部分6 e! J, u4 o$ i2 D
; F1 R2 \: B& X2 n; l# D
mov cx, $A //字色或背景色? 没有去详细了解请自己测试/ W( J, |+ o# e3 }4 y$ c; N6 G
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF" W8 U7 x, y4 t
mov ax, $A4 R0 H% o' S6 N/ g; r
call CallAddr1_0053BBFF
+ X8 y, Q0 G5 P" i mov edx, dword ptr [ebp-$14]! c5 }! R0 l. A( y7 {4 }& R. z8 U
mov word ptr [edx+1], ax
) P8 n) ?7 Y+ W, j! _# |: j8 Z) o6 |; j1 Y3 R5 Z5 O6 D4 ]: v$ S
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
% o5 \& y; s7 G/ H; i5 u mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF8 {! `( E4 c+ K$ v+ x
mov ax, $10- C$ O D& X- M" ?! \2 u1 P
call CallAddr2_0053BBFF 2 l! I8 Y/ ~1 w' l
mov edx, dword ptr [ebp-$14]; _) Q; c$ j! ~' Z; ^& |
mov word ptr [edx+3], ax" c& ^2 M* b+ y3 j9 w
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs5 h8 D6 a) W5 `$ m
`" }) w; B6 `' }2 U @Seventh: J, [* t9 [9 @9 F3 T2 Y; b y
cmp eax, $11 //比较是否等于17 ( f/ Z4 f1 p6 d9 j# s- i5 o
jnz @out //不等于就跳转到默认部分
3 W: O w* b0 S! m& I# y" b. i& @
; V5 ]& I9 Y7 t/ T0 _" f' P mov cx, $A //字色或背景色? 没有去详细了解请自己测试% T2 s# [# K( T4 v! B
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
' s9 O+ s# C* S% G' N8 v mov ax, $A; l: e2 y2 P! s+ b
call CallAddr1_0053BBFF ! A: t# ~, u$ W
mov edx, dword ptr [ebp-$14]; ~: Y2 T! {2 z. Q# ], }% i
mov word ptr [edx+1], ax% A g% ]) E" v `% D( Q! Q8 |' c
' D! z3 X) Y- p' P3 O& E# ? mov cx, $10 //字色或背景色? 没有去详细了解请自己测试6 V; p' D! q1 y s8 g4 o+ A
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF k& u6 b- N3 C3 t& \. p' G
mov ax, $105 d& U/ s1 y. t# W
call CallAddr2_0053BBFF
: c6 p; T1 F2 l* E) K* N# h mov edx, dword ptr [ebp-$14]
" X Y3 J6 m$ R' M: J mov word ptr [edx+3], ax
0 J8 S; L! y; M2 ~4 o jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs' }% \0 }4 ]; p$ h) F! d- ?! X
//5 ?) W" [0 x7 p$ q" g7 v" E @( p
@out:
, G$ G. N& {" q* o8 d3 d jmp EndAddr1_0053BBFF //这个是跳转到默认的点
5 V/ [5 x* l# v& R2 n1 Z! \
- x1 |4 Z' e: A! i' K' \/ ^' N/ s; f @OldCor:
' H. T$ z* y/ s) j& y: g9 D/ o jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值$ a) r- c, R( o6 i6 U+ H, @3 x
end ! v5 R3 A' v) r+ `0 `
|