本帖最后由 shane007 于 2023-8-27 13:23 编辑
! l- H( y5 D3 ^2 ]- F) u7 @6 T% H# O8 R% P5 l; K% C! L1 ^
本游戏采用了CEGUI,该组件能采用directx和opengl。
) _" X% X; t8 B u4 {' a% \1 S8 \经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
1 c* j/ o: Y, U游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。0 N$ M* W' d# w4 v$ ?
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
5 |5 f, f. m5 E! r t" o2 [ J% T. J4 ]/ z2 { Q& |- S
. z0 x" i" H% }: j4 k; k在游戏中找一个字幕,在以下地方断下。
6 m, l2 _; D, |0 N由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),9 u/ u- n4 A4 ^6 U, e$ y. }# \8 i
因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。
3 \' _* W1 O9 P/ z3 F2 |9 h- T/ c( n+ r1 M
- NextLife.exe+11C5 - 42 - inc edx
" ]9 d: ~% @0 h' y - 004011C5
复制代码 ) h& v" ~5 H1 Y0 N) N2 R) A
; R, s, w* z5 h$ |8 s. C/ k# f
该地方的伪代码
6 q; I, ?& T7 a2 F: ]6 Z5 }- void __thiscall sub_401160(char **this, const char *a2)
2 w: I* B8 e, X& ` - {+ d3 x2 x2 W$ U9 ]. D
- char **v2; // esi
0 P4 n0 N; e+ t. _9 J! I& H - char *v3; // eax
' \1 E. i/ @; V3 w$ y - char *v4; // eax
' \5 q' F* F X C- D" P; y
. ^* M4 x2 x- S& b+ U- R" T7 F- v2 = this;* A8 u$ r' K, S% o$ N" \
- if ( a2 )
# a. K) { h {, Z+ N& f - {
$ v7 ~( L, ]2 ]. p$ V - v3 = *this;9 J# L2 Y+ A/ ]6 o2 f- n" ?9 U
- if ( a2 != *this )
0 V1 j d# O# p U- G& A" K - {, h g( Z6 }3 t+ I" f* j
- if ( *a2 )+ A& k. G6 b; k6 p. D' K
- {3 J# `8 K( \! ~" E! q
- sub_401030(strlen(a2));, D$ N) g; K w
- strcpy(*v2, a2);' J3 Z& o4 z; \% F
- }; Q5 ^! h0 `0 w2 l
- else
/ I6 @6 z& v# R/ J0 a: r D4 Z8 @$ Q, ~ - {
, l& ^; Y, k9 {5 E* l. K - this[1] = (char *)1;. G0 G0 j2 ]+ h, u
- if ( v3 ): }1 g# m0 b4 @5 H0 w4 I
- operator delete[](v3);
, a1 \) f) X3 Z# C - v4 = (char *)operator new(6u);
) H, [+ c; i. p: ^, C# Z - *v2 = v4; k$ B8 u4 C! ~% ]
- *(_DWORD *)v4 = 0;
' |* r) J7 Z. ^( T5 H5 O/ u" ^ - }
, T1 a% {8 E9 F* ^1 g1 n - }$ J% y) s; X6 a* n
- }- O9 M$ w" N2 \% w
- }
复制代码
: b( Z e8 [" q2 J( _) r汇编代码
6 S; z2 N) N$ A- J& ~9 Y9 [) e- X- .text:004010F0. Q3 M( h9 e9 Q
- .text:004010F0 ; =============== S U B R O U T I N E =======================================9 Z" V9 G8 p; S* b& y
- .text:004010F0
% X! m2 }! p/ h) P; B# u - .text:004010F0
1 w$ g1 D# d+ D* u - .text:004010F0 sub_4010F0 proc near ; CODE XREF: _main+139↓p
3 C& h3 o) L7 T; y9 X% w I5 m+ o - .text:004010F0 ; sub_403240+97E↓p ...
f& q1 Y# d0 \" O: @: A - .text:004010F0$ I3 b; e! `7 [$ I; H) K
- .text:004010F0 arg_0 = dword ptr 4
$ f; o$ C# f9 T - .text:004010F0
) M9 {# ^2 ?; l; P: B, j M- G: D - .text:004010F0 mov eax, [ecx]+ h4 O S2 }# b" k
- .text:004010F2 test eax, eax
, x: ?; X A g7 n - .text:004010F4 mov edx, [esp+arg_0]
- x1 x0 n8 {4 \% a) p0 O - .text:004010F8 jz short loc_401147( z/ Q: s2 F% U/ F9 g
- .text:004010FA test edx, edx: b. s5 L+ H# I3 d* L
- .text:004010FC jz short loc_401147
- D) E- q8 H: {' T9 s- h - .text:004010FE mov cl, [eax]" n: d- D- ~" m
- .text:00401100 test cl, cl
+ Y) A# u$ ?0 B - .text:00401102 jnz short loc_401116
6 U+ g1 m# m: V$ W- M% l - .text:00401104 cmp byte ptr [edx], 0
5 p& a0 D: X. t! K- h, v - .text:00401107 setz al
( V% K* N9 n1 d0 H* {% `. g - .text:0040110A xor edx, edx, s# ^+ g& u6 u
- .text:0040110C test al, al% X, w; O* _. K& ^$ B% K
- .text:0040110E setz dl9 D* N U; S. H- i, i8 i
- .text:00401111 mov al, dl
2 c" c7 [+ [' I: Y2 ` - .text:00401113 retn 4: i( ]0 s* o* h) |; H2 e) _' }) ]: B& t
- .text:00401116 ; ---------------------------------------------------------------------------
* ~$ r1 j# O5 q# R; G4 E - .text:00401116% O0 \! D) L0 O |; n3 m- O3 }, v
- .text:00401116 loc_401116: ; CODE XREF: sub_4010F0+12↑j( s9 X* ^, m4 c* g
- .text:00401116 cmp byte ptr [edx], 0) M- T6 Y* o; k# Z/ @; }. y
- .text:00401119 jz short loc_401147
0 {/ G5 {! C6 ~6 N - .text:0040111B jmp short loc_401120% x Z U0 `/ T, x; J
- .text:0040111B ; ---------------------------------------------------------------------------
/ M9 B; L0 Z8 e! h' F) G4 \' w - .text:0040111D align 10h, t8 L, B6 }0 r2 o% y
- .text:00401120
: A; B0 ?4 z% {7 X' z$ g7 [% B - .text:00401120 loc_401120: ; CODE XREF: sub_4010F0+2B↑j
9 J6 l4 c$ O' o' P: c1 T - .text:00401120 ; sub_4010F0+3B↓j$ S) ~" d7 i8 g6 j2 `9 H
- .text:00401120 cmp cl, [edx]
( h2 c7 Y( ]! Q( r( o% B - .text:00401122 jnz short loc_40112D5 ?8 P: |5 t0 n8 g( P+ Z+ N; A& h
- .text:00401124 mov cl, [eax+1]
) A& X( @( ^/ J2 @' s1 ^ - .text:00401127 inc eax
2 t3 W% E. w" x: \: q - .text:00401128 inc edx
" E8 F/ O1 E0 q - .text:00401129 test cl, cl8 `5 W e. _+ x7 m; o
- .text:0040112B jnz short loc_401120
: v& `3 d. i R+ N! a% r5 h& w1 K8 W - .text:0040112D9 R% h& b8 t/ W2 {0 e- n3 t) D9 O! y
- .text:0040112D loc_40112D: ; CODE XREF: sub_4010F0+32↑j5 X, @/ D7 q+ w+ x
- .text:0040112D movzx eax, byte ptr [eax]
( |8 y/ @, `; k9 ` - .text:00401130 movzx ecx, byte ptr [edx]3 j+ n& \. @5 Y" J* x
- .text:00401133 sub eax, ecx
0 ^/ X: _: A5 T4 S - .text:00401135 neg eax
3 U J4 D. J r& L/ l: ] - .text:00401137 sbb al, al" l4 k: U$ H4 x
- .text:00401139 inc al$ [ R& f7 u+ o% z" F
- .text:0040113B xor edx, edx" D. J# w* [2 R5 T0 g
- .text:0040113D test al, al
6 V1 F9 c5 ]3 O% \( Z0 Y8 l" a - .text:0040113F setz dl
3 S8 `: O' s% n' o - .text:00401142 mov al, dl5 S Y* C! B1 T+ b) L* f6 U; {8 l+ O
- .text:00401144 retn 4: }5 e+ h$ J* `" Q' H" [
- .text:00401147 ; ---------------------------------------------------------------------------
) j( O: g8 N0 m) r# D - .text:00401147# \; f4 m3 ^. C$ a
- .text:00401147 loc_401147: ; CODE XREF: sub_4010F0+8↑j# t% D' i* O% G8 w5 J, o
- .text:00401147 ; sub_4010F0+C↑j ...% o9 \; ]4 v4 u% z% k* c% |
- .text:00401147 xor al, al
+ N" ]) D1 \' y0 D - .text:00401149 xor edx, edx
. C Z' H' g6 O6 H; s - .text:0040114B test al, al
- n; w' P# ^8 F* D0 h - .text:0040114D setz dl* U* O0 k* _1 i/ b' z$ ^( V) w
- .text:00401150 mov al, dl
8 b) ~! s: ?1 B8 g/ D: j - .text:00401152 retn 4
4 [! M. e6 z3 N) V% ^ - .text:00401152 sub_4010F0 endp
( k& a1 T2 @; a2 ? - .text:00401152
2 m; Z% B: V! k- s) F - .text:00401152 ; ---------------------------------------------------------------------------
( n/ Z d2 q3 }- h* X/ C - .text:00401155 align 10h
% f* w5 ?( C7 b# q% z0 @1 _0 O - .text:00401160
- J$ g! p3 f6 h+ p2 j9 Q3 Q - .text:00401160 ; =============== S U B R O U T I N E ======================================= F& m9 V- B2 `# u4 o
- .text:00401160
. `* V2 y5 y, j N - .text:00401160) Z& c# k$ G$ n
- .text:00401160 sub_401160 proc near ; CODE XREF: sub_4013D0+15↓p
1 N. Y! s; s/ z" e: R - .text:00401160 ; sub_4013F0+C↓p ...
* `. R3 f' x+ D- W7 b* R5 \. Q - .text:00401160
# N4 H7 Y9 ?1 \ - .text:00401160 arg_0 = dword ptr 4
) J9 i% B. o: w6 O$ W/ b) i$ t# L - .text:00401160, O/ ]! T6 E, i% `4 F
- .text:00401160 push esi
$ s0 Y5 O/ A( a6 I - .text:00401161 push edi: \! R! X4 Z" _( z- u# ]# B! Z
- .text:00401162 mov edi, [esp+8+arg_0]
* D! `# k6 ~6 V+ x2 c) ^4 g - .text:00401166 test edi, edi
, U7 S6 U# { P- N% ~! j; ?! H' } - .text:00401168 mov esi, ecx
- J; ~6 D; o5 R% A' K4 S3 { - .text:0040116A jz short loc_4011CA
# n9 ^, c" U% |% M- t. @3 p0 b - .text:0040116C mov eax, [esi]
5 e) A0 L1 [/ s" I - .text:0040116E cmp edi, eax7 A& ]9 N. m N0 T* l
- .text:00401170 jz short loc_4011CA
: c# @' e: z8 @2 c - .text:00401172 cmp byte ptr [edi], 0) k1 M4 F% g" ^2 l4 X3 l* r
- .text:00401175 jnz short loc_4011A22 s. N \% D( b; l0 ?
- .text:00401177 test eax, eax
1 Q3 J% n0 z" r! { - .text:00401179 mov dword ptr [esi+4], 1
" {1 V7 d9 \& a# G- U - .text:00401180 jz short loc_40118B
) J# _4 Z% O" e% [ - .text:00401182 push eax ; void *! U% M% K* h( J) i* v
- .text:00401183 call ??_V@YAXPAX@Z ; operator delete[](void *)1 O8 Q5 m$ N$ y* B5 E' u# h
- .text:00401188 add esp, 4% m2 u/ `) O* X
- .text:0040118B
5 I" C1 v7 g* D$ ]. b, P+ t - .text:0040118B loc_40118B: ; CODE XREF: sub_401160+20↑j
& Q# ~. Q# L8 V; i - .text:0040118B push 6 ; Size4 z) i+ m/ G& X
- .text:0040118D call j_??2@YAPAXI@Z ; operator new(uint)& t0 w- [" \5 ~& K+ E0 T# W: h/ q
- .text:00401192 add esp, 4
# L! r+ K" ^/ p8 c8 _0 U( J( ^; H - .text:00401195 mov [esi], eax3 @8 h3 h n2 C
- .text:00401197 pop edi; T/ q! f' U1 |( y
- .text:00401198 mov dword ptr [eax], 0
8 [8 M& ~) o+ {# s* j; D; r - .text:0040119E pop esi
* I0 K2 T- I9 t6 ]0 Q( ^) V+ b - .text:0040119F retn 4
( g/ A9 m" O( ^. G+ o4 u1 e - .text:004011A2 ; ---------------------------------------------------------------------------2 K1 K7 p+ [" V2 t. A8 H
- .text:004011A2
; P( p) c+ S# X% @6 G; p) o. y - .text:004011A2 loc_4011A2: ; CODE XREF: sub_401160+15↑j
% t( D# W# j. `& ^ - .text:004011A2 mov eax, edi
$ l+ W9 H3 S4 L% ^) j( v7 p F - .text:004011A4 lea edx, [eax+1]
+ q& K3 w# r. I3 H2 `' o* v9 t - .text:004011A72 I$ J7 e1 ^5 ~" P# B: Z
- .text:004011A7 loc_4011A7: ; CODE XREF: sub_401160+4C↓j! [ o% a2 i& J6 q2 F! U0 z
- .text:004011A7 mov cl, [eax]
9 S9 q4 ]! v% r1 }/ s - .text:004011A9 inc eax
: v ?' ]. R* h! O) O( U - .text:004011AA test cl, cl; c/ E$ W$ L+ K. B
- .text:004011AC jnz short loc_4011A7
/ K! ~8 @+ y% s( G1 G+ b0 O9 m - .text:004011AE sub eax, edx0 @9 ]6 z: ~/ ?" E
- .text:004011B0 push eax
6 j8 \8 G& @0 C5 z - .text:004011B1 mov ecx, esi0 O" t3 v: ~2 c5 L# B& G
- .text:004011B3 call sub_4010307 y7 w8 R; g6 d
- .text:004011B8 mov edx, [esi]
/ G/ y$ L$ e8 A( ]4 H1 \; U- C9 I - .text:004011BA mov ecx, edi
! a" L2 F- F7 f5 e/ y* X - .text:004011BC lea esp, [esp+0]
1 q! }) y0 S6 d( y8 r) o { - .text:004011C0. w1 }! K* B2 u
- .text:004011C0 loc_4011C0: ; CODE XREF: sub_401160+68↓j
- J0 t2 d( w+ ^* D0 g - .text:004011C0 mov al, [ecx]
- u4 B0 Y, U- T) l/ J; H - .text:004011C2 inc ecx7 Q$ B8 r1 S) c; V
- .text:004011C3 mov [edx], al
% A! F+ s& T3 B$ p; f, l6 a- e - .text:004011C5 inc edx
/ X' y0 R8 r7 a# R) u - .text:004011C6 test al, al* A: J. o& Q s x ~* @
- .text:004011C8 jnz short loc_4011C0
! s9 U% O' R( f4 u - .text:004011CA
, k/ P. ~2 I" s - .text:004011CA loc_4011CA: ; CODE XREF: sub_401160+A↑j8 ?& W% D) y& k. T* U2 t; b! @
- .text:004011CA ; sub_401160+10↑j
! Z# H, ^. G4 Q% N; Q - .text:004011CA pop edi
# J% J2 W3 f0 B0 a! |$ p$ l+ @ - .text:004011CB pop esi5 H+ k3 ~( ^1 ]9 ?
- .text:004011CC retn 4
. b, P9 {* ~7 p7 x0 j- `, _% K - .text:004011CC sub_401160 endp
& _* G' p+ a# J( M3 @4 P' U - .text:004011CC( ?8 Q( G) S0 T7 e! r4 z
- .text:004011CC ; ---------------------------------------------------------------------------
复制代码
2 Y1 @ p8 r+ m) ?7 v9 P6 D- _7 B) Z0 z4 f* F1 f
# `2 W' V1 H3 k7 I# _0 E |