本帖最后由 shane007 于 2023-8-27 13:23 编辑 3 x" w' r. M; e9 E. X2 t
6 g; V1 T7 {# T6 V( R5 |' I2 G本游戏采用了CEGUI,该组件能采用directx和opengl。
- X0 p/ d! y$ v. A/ j. M2 C+ K经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。" D1 |9 G7 h$ K+ [- I$ E8 r1 X
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。
1 R$ A+ g- I4 k1 [9 i6 C(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)4 R) l$ M( }9 _% w' r
/ Q* {& s% K J3 g/ O `/ B( T. f
在游戏中找一个字幕,在以下地方断下。
9 d$ ^% m% F" o# X' s, g由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
# n5 G0 k3 k$ V2 }4 j因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。( P* K$ ?. D, m
' q* W. ~5 T$ r2 o+ {: s& @- c: Q
- NextLife.exe+11C5 - 42 - inc edx2 \* f8 _5 n) e/ l! j& o
- 004011C5
复制代码 5 a; k8 e( k$ t u
: u, ?2 c3 S1 q3 v/ ]' H
该地方的伪代码0 \2 ]4 r8 F; X
- void __thiscall sub_401160(char **this, const char *a2)
3 o& Y* g. Y5 d# X% D; g - {1 N. F- x" J6 i0 d; m
- char **v2; // esi
$ ?: t+ {4 n9 [2 B- [* g, K! E - char *v3; // eax3 u% ]6 }6 Q5 F8 b. v" G6 @9 D# w
- char *v4; // eax
; g, o" Z( q: t4 D& p" k
% o# d3 K7 W, ^. Q# k5 b" r# I- v2 = this;
' |" K$ X) ?& O( w- O - if ( a2 )
/ e1 {5 q, j$ l* P& {: p - {
! i: v9 m' W5 N8 \' M: D0 e - v3 = *this;
: X0 A3 a ^3 P: [/ N8 k - if ( a2 != *this ). J$ t# `8 [3 B* E9 q
- {
8 f0 w4 B9 v& a4 b2 ^ - if ( *a2 )0 c" c3 V2 [" H. q. u- }! S$ g/ D
- {' G- o% L/ [+ `, f9 U4 n3 V# u
- sub_401030(strlen(a2));9 d/ _1 v7 Y2 y, u# `
- strcpy(*v2, a2);; p+ U" @' v D _1 {& T
- }) C! P& W. y8 B- F: _, v
- else7 p$ G2 l9 s: J1 ?: ?
- {+ E8 w% g7 g% u7 Q; Y. y
- this[1] = (char *)1;
) G# j" e% g4 M8 y% x% F - if ( v3 )
5 E9 C& H# o5 G% N i5 k1 Z9 J8 g- B - operator delete[](v3);' h& }: I' w# M
- v4 = (char *)operator new(6u);
' |$ o, S" ? _% p5 Y+ X! ?" V - *v2 = v4;) p2 @( P- w: C8 [6 Y+ S. m
- *(_DWORD *)v4 = 0;
E! C0 L5 E& C9 y8 g+ m - }8 e L# k4 V/ \, U" C# N
- }9 k4 p# q% U8 P) Q3 D! \6 e
- }6 U: {3 \+ a8 l% `$ Q. }$ r6 M
- }
复制代码
0 V1 Q1 ~9 V9 L5 W/ `' {汇编代码
3 Y# n, j) f: C3 m3 Q- .text:004010F0
# a! o$ o M; k& P. q* O2 Q - .text:004010F0 ; =============== S U B R O U T I N E =======================================
1 q3 N% l' U w! e! P+ H4 G - .text:004010F0
1 U1 O$ {$ j% L) [ - .text:004010F0
+ g$ I0 k G; X- z0 Q8 d# O/ o- f - .text:004010F0 sub_4010F0 proc near ; CODE XREF: _main+139↓p6 O- y$ i- ` F' m/ m0 H
- .text:004010F0 ; sub_403240+97E↓p ...
7 U! c; _( W ~# Z( `' J! J6 X - .text:004010F08 t8 K$ ^$ G1 z& b/ q
- .text:004010F0 arg_0 = dword ptr 4- c2 x P& j/ D% k. Z1 ^
- .text:004010F0
$ N5 ^! p6 ^1 v% n - .text:004010F0 mov eax, [ecx]
: T9 N5 @# z( l7 }' O& u - .text:004010F2 test eax, eax; B0 H: d+ T. N
- .text:004010F4 mov edx, [esp+arg_0]- m! y+ w; r f5 `0 u
- .text:004010F8 jz short loc_401147
0 \" U: e3 H) L" G - .text:004010FA test edx, edx
5 I* G3 x+ V9 X V% v - .text:004010FC jz short loc_401147
% H: \: ~' z$ C) Y* d6 m& ` - .text:004010FE mov cl, [eax]
' t) C- N7 N6 i8 Y J: t - .text:00401100 test cl, cl' u8 i: ~! e# {' `+ l& r- e
- .text:00401102 jnz short loc_401116
% v4 J4 @# V- ?/ `- K/ j+ p - .text:00401104 cmp byte ptr [edx], 0
6 y3 M8 [$ Y# z# L# ^0 v - .text:00401107 setz al
6 m3 _6 z% {' t6 w7 J0 G" C - .text:0040110A xor edx, edx1 |' e1 V. s$ b/ P
- .text:0040110C test al, al
9 }3 ^" D7 n2 I7 y - .text:0040110E setz dl
7 S: y* k) N- U, |# f9 g6 [! ] - .text:00401111 mov al, dl V/ g1 b' @/ f7 n- d/ L
- .text:00401113 retn 4
4 `, _( n" q0 Y% v0 m3 Y! \8 P - .text:00401116 ; ---------------------------------------------------------------------------
& u% D! L+ X, ?# k/ L% p2 T- w& N - .text:00401116' F4 K4 c1 t8 C. i Q' o$ ]7 P
- .text:00401116 loc_401116: ; CODE XREF: sub_4010F0+12↑j
. k7 z' Z9 `' x( V+ ?) g3 p# U - .text:00401116 cmp byte ptr [edx], 0
3 g" W1 E8 J$ m3 E# E/ A( Q) k - .text:00401119 jz short loc_4011474 [5 G. P# \. O% U2 E
- .text:0040111B jmp short loc_401120# A1 Y7 V' c8 Q' g1 l' H+ s3 m0 f
- .text:0040111B ; ---------------------------------------------------------------------------
* Y& L) S" s" W - .text:0040111D align 10h
p$ ^8 x$ q) u8 m - .text:00401120
' d l9 M! Z$ V4 O4 Q; E - .text:00401120 loc_401120: ; CODE XREF: sub_4010F0+2B↑j6 `, @3 Z! S& `6 V
- .text:00401120 ; sub_4010F0+3B↓j1 ]$ ?; J; T! u3 E
- .text:00401120 cmp cl, [edx]
/ o R3 r- b( m4 _& E# C - .text:00401122 jnz short loc_40112D" c1 J7 _" m ^3 v2 H
- .text:00401124 mov cl, [eax+1]
; E$ s5 } D2 H2 z - .text:00401127 inc eax( _; p' z5 {; ?4 k! k% l2 X
- .text:00401128 inc edx- j0 a5 b6 ?4 x5 H! U
- .text:00401129 test cl, cl
' ]8 k; q7 J; |4 t1 j7 t* I5 i$ z x - .text:0040112B jnz short loc_401120
E5 z/ Z4 u, O: z3 h - .text:0040112D
# H( b, E7 P0 n# [' H. t9 \; M - .text:0040112D loc_40112D: ; CODE XREF: sub_4010F0+32↑j
1 O; o/ m: k+ n8 M. M% L$ K. b; H - .text:0040112D movzx eax, byte ptr [eax]/ N5 F ]9 X3 q* k1 O+ f0 s$ N; L. N
- .text:00401130 movzx ecx, byte ptr [edx]5 L4 V9 a6 v: x/ Y% R; t0 g& x
- .text:00401133 sub eax, ecx
. W$ U, P9 e% a+ o+ D9 K9 U& Z7 q& } - .text:00401135 neg eax
% ^% Y; L, w9 k0 `& t! k - .text:00401137 sbb al, al: d. r* F5 a5 Z( z/ f& n: C$ g0 u% g
- .text:00401139 inc al; p1 Z1 B& R1 C* G. c5 {, C9 a+ W& Z
- .text:0040113B xor edx, edx
' |: Z& r7 i/ _0 c) y7 o* N - .text:0040113D test al, al i; [/ S# n! c5 l
- .text:0040113F setz dl
% C' {; D( l K T5 I - .text:00401142 mov al, dl% Q9 S0 c! ^- M3 u" ~% z+ A: B8 Z
- .text:00401144 retn 4# v- v9 b3 E# b/ i7 ^( D
- .text:00401147 ; ---------------------------------------------------------------------------* m4 o9 q6 Q( k4 S
- .text:00401147# C% ~: V0 n0 i2 o4 _7 `: b
- .text:00401147 loc_401147: ; CODE XREF: sub_4010F0+8↑j/ b% U. |6 v6 g5 [5 E1 I/ d4 Q% K
- .text:00401147 ; sub_4010F0+C↑j ...
* f% {$ P# J _, Z$ ] - .text:00401147 xor al, al
( F9 i. j) Y! k. X - .text:00401149 xor edx, edx
4 j( E0 @# X C0 B4 I - .text:0040114B test al, al8 F2 U% v2 L2 S# \: T# v3 p" A
- .text:0040114D setz dl1 ?+ T5 z$ g" g$ E, n5 [% U8 O+ e
- .text:00401150 mov al, dl6 M/ s8 }3 Y d" X5 `) J) E
- .text:00401152 retn 4# V$ _1 _0 g! ?( _& O
- .text:00401152 sub_4010F0 endp* p) Q$ z8 K, c; W
- .text:00401152* \" L8 N" q6 j' {0 Q4 _
- .text:00401152 ; ---------------------------------------------------------------------------
# { W( \: h" T6 f, a6 [" \" P - .text:00401155 align 10h, [' ^ A4 S4 j4 y, _
- .text:004011607 y/ m3 S; _1 S2 B
- .text:00401160 ; =============== S U B R O U T I N E =======================================
5 ?# N. P. m1 r; z. A - .text:00401160- x; J- C0 j' R, z* ?
- .text:00401160
2 l& e0 Z( h& |6 N! T - .text:00401160 sub_401160 proc near ; CODE XREF: sub_4013D0+15↓p9 I6 V$ |8 a7 _
- .text:00401160 ; sub_4013F0+C↓p ...+ `! q$ p& K& a" c8 d) A/ u; g
- .text:00401160* q* z; G2 f! j
- .text:00401160 arg_0 = dword ptr 40 A Q1 }+ u/ s8 P( P& @; j
- .text:00401160
$ q0 O: \: B/ K: n! p' q: G& k - .text:00401160 push esi
* H5 @& u3 j" I# O - .text:00401161 push edi J4 F8 x( a, ]' o5 Q
- .text:00401162 mov edi, [esp+8+arg_0]
0 s( s0 C ]( A5 r+ r - .text:00401166 test edi, edi
9 F; d8 X u( ?5 Z+ R+ d# ]! V - .text:00401168 mov esi, ecx
; V5 X/ ?2 P$ {0 L V: T5 z1 P4 v - .text:0040116A jz short loc_4011CA9 o( @% a; V" t) t1 x9 z3 E
- .text:0040116C mov eax, [esi]. b1 c9 L( {1 a5 ^) L
- .text:0040116E cmp edi, eax
" u. ?4 h! F0 j% u9 Y/ R7 r - .text:00401170 jz short loc_4011CA$ z8 j: r0 l" {1 L ?0 ]) R
- .text:00401172 cmp byte ptr [edi], 0; N2 R9 m9 x! I# `0 [/ P4 n
- .text:00401175 jnz short loc_4011A2 b2 j8 [$ `* \# i" b
- .text:00401177 test eax, eax
- J% k2 G. a# R5 K. S - .text:00401179 mov dword ptr [esi+4], 1" e& R( D. f T- t: ]
- .text:00401180 jz short loc_40118B
$ ~9 \& m* z; K8 Q3 R - .text:00401182 push eax ; void *
8 X; D& J4 S, U3 i- F4 c/ u( D+ O - .text:00401183 call ??_V@YAXPAX@Z ; operator delete[](void *)& K9 f) ?* e' v( @% F6 G/ C
- .text:00401188 add esp, 4 S+ F7 O! @$ A+ K
- .text:0040118B% h+ i- L. \- Z N
- .text:0040118B loc_40118B: ; CODE XREF: sub_401160+20↑j2 G+ e6 r* s4 o s2 ^2 t
- .text:0040118B push 6 ; Size
' D: }3 J- o9 a2 F* X0 f1 V G - .text:0040118D call j_??2@YAPAXI@Z ; operator new(uint)
& g8 `" R9 O" Y# B - .text:00401192 add esp, 4
7 z2 \4 X# |( g' z; E. w0 Z - .text:00401195 mov [esi], eax
' i# i( t; d7 @8 G r! D - .text:00401197 pop edi' ^6 x# ?) K" c3 x( q( `1 {
- .text:00401198 mov dword ptr [eax], 0 f1 i& ?5 s* J3 ?; Q
- .text:0040119E pop esi
/ d9 [! R2 X( s - .text:0040119F retn 4" J+ |' P; T3 B& a1 u! I3 L
- .text:004011A2 ; ---------------------------------------------------------------------------* ?" |* N5 ?3 o6 T: D5 f% O& h
- .text:004011A22 V, T U% B. m: p' e6 g- z- n8 T
- .text:004011A2 loc_4011A2: ; CODE XREF: sub_401160+15↑j4 o) |! o) [+ c5 u+ F
- .text:004011A2 mov eax, edi C0 Z4 @/ Z- ?' [! L3 S0 P
- .text:004011A4 lea edx, [eax+1]
2 k) K* U% ~6 v6 g - .text:004011A7
# D' [3 g0 j3 r. ~1 j* ?$ K - .text:004011A7 loc_4011A7: ; CODE XREF: sub_401160+4C↓j1 I; i& \/ Z8 f
- .text:004011A7 mov cl, [eax]* P- ~' z# b! N( W
- .text:004011A9 inc eax
) l$ K r) e. Z* ~) Z - .text:004011AA test cl, cl+ C, J$ d4 Y* T5 G$ I; v
- .text:004011AC jnz short loc_4011A75 ^" }, U- w) C. s/ `& k0 |1 I
- .text:004011AE sub eax, edx
& K0 B0 v& i- E U - .text:004011B0 push eax9 y2 _2 b5 B4 C9 y @
- .text:004011B1 mov ecx, esi
- ^) p: g* R, q8 q" s6 g$ d - .text:004011B3 call sub_401030
8 h* A% U; y3 ?2 g: n, S4 R - .text:004011B8 mov edx, [esi]
# j7 Z) a" J: P' {# |6 w* \ - .text:004011BA mov ecx, edi
: ]+ f1 z1 v9 [' ^" X! f - .text:004011BC lea esp, [esp+0]
0 j1 V+ J& ~0 u- B* T* _ - .text:004011C0
# [/ \3 C/ @, L: A p9 g - .text:004011C0 loc_4011C0: ; CODE XREF: sub_401160+68↓j
; ?: h# {5 L: U8 F0 k7 k+ e6 p - .text:004011C0 mov al, [ecx]* c! _, i. D& I- E" e
- .text:004011C2 inc ecx
2 M4 N" z" |4 q. F7 P/ h# c2 } - .text:004011C3 mov [edx], al, c8 p! ~" X/ L9 P/ ] U! l
- .text:004011C5 inc edx
. y0 n" R2 Z# N- d e, D - .text:004011C6 test al, al
( x5 h: F& U) c& t8 \ - .text:004011C8 jnz short loc_4011C0
- r5 G7 X- D% h! I n- a - .text:004011CA
7 X1 f) h3 |) z - .text:004011CA loc_4011CA: ; CODE XREF: sub_401160+A↑j$ A) ^# o' Z% c% s- {$ A
- .text:004011CA ; sub_401160+10↑j
+ y' B6 V7 ^8 ? - .text:004011CA pop edi, |/ i& B& c# }- S6 k( R
- .text:004011CB pop esi/ F9 C; ~" Q5 Z6 d" N8 n2 p. ~6 E
- .text:004011CC retn 4: i3 b, e5 R% M) p- A. p: b# j# D
- .text:004011CC sub_401160 endp
: l! n* [( J+ h: p - .text:004011CC
; a- K, c, m) E! L+ a7 p - .text:004011CC ; ---------------------------------------------------------------------------
复制代码
# l( D9 j! u& M' k; C p" \6 |, i- d0 T# v0 h
8 o" l8 e% S" c4 c) y2 h7 n2 L+ c |