本帖最后由 shane007 于 2023-8-27 13:23 编辑
. o3 v" {8 r% ?! W% T0 w' |& h. [+ K( |/ m3 O! T% k' Q
本游戏采用了CEGUI,该组件能采用directx和opengl。* E, ?* x: u; Q% X5 `- {
经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
7 ~; v0 Q' p2 o游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。" _8 p9 a. \4 Z# |
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
2 o6 E4 \; L2 p
9 q2 V1 e. O* M5 |9 j* }: y R6 V5 O# g. t
在游戏中找一个字幕,在以下地方断下。# W8 A( s$ W6 {( o
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
6 r4 g v: m9 n& v1 q3 i因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。$ t3 }+ j0 z. ?+ v- j) }+ k
! U2 ]) K7 r' D% m" D; x
- NextLife.exe+11C5 - 42 - inc edx6 R: i* \4 f5 s: X$ m- q0 N
- 004011C5
复制代码
0 t" O1 N* F) |+ \; k8 y5 C5 C! f, m6 C8 Q" `' ?: z. H3 o4 J
该地方的伪代码
! Y% H: V% C3 ^& D! O1 x: _2 a# d- void __thiscall sub_401160(char **this, const char *a2). ?( v6 ?2 ~+ X* h
- {- s3 {, k9 B! L$ [& g% B& Z
- char **v2; // esi
: V3 L1 a4 r# l6 u% B! T" n1 d' V - char *v3; // eax
2 s u- @! f, k2 D8 ~ - char *v4; // eax% D0 R' ^3 g$ M) ^% v
* m; [# C6 B# F( o r7 v- v2 = this;
6 G' ~, R6 i# l8 q9 W8 Z - if ( a2 )
! D0 k% K9 ]& {' G5 a; r' }4 w - {
! H' _: |2 o$ c$ k - v3 = *this;
" Z, u. }* P/ X/ |6 n - if ( a2 != *this )
; T* w4 s% V; Y8 ?8 ~6 ] - {
2 Q% t/ Y' h5 Q% ` - if ( *a2 )
) A: V; {8 V2 H" f# A$ W5 e( ` - {5 G/ K! n, _4 [; t2 P1 D2 r7 z+ L
- sub_401030(strlen(a2));
! |6 ]& F' _6 \% g" Y- z - strcpy(*v2, a2);
! }0 ~8 o9 _( V d - }
/ [2 w( R: W5 ^$ W - else
# \ b! ~4 B2 z% ?! w0 C8 ^ - {9 J, n/ e3 h7 ^2 R% f2 ?
- this[1] = (char *)1;; C6 Q+ T& ?; h8 k# q
- if ( v3 )/ f6 w( R" R2 X/ C( E
- operator delete[](v3);
" X) `. }) u6 R0 o: X - v4 = (char *)operator new(6u);
5 D7 {+ S3 Q' c# P5 R - *v2 = v4;
! R$ r% l# [& R v. Z- P - *(_DWORD *)v4 = 0;
5 h- F: [" f" a - }+ S" E+ D7 w) L% a! H- E, \
- }
: m5 x* h/ K* { H5 g( [8 q/ R - }
( I! L9 b% O3 `7 q) F1 l! O - }
复制代码 9 X. S* C' g7 _9 y3 a* L7 T
汇编代码) w/ h: O4 A5 W# {0 Q& b; j
- .text:004010F01 P O% o8 W( b* B7 ]0 b
- .text:004010F0 ; =============== S U B R O U T I N E =======================================
5 l: F, d, r: r# q! H4 _5 s - .text:004010F0% }4 |* u3 y6 S8 w# L, i
- .text:004010F0
( j( N* P/ H' Z5 M. h1 J1 z; A - .text:004010F0 sub_4010F0 proc near ; CODE XREF: _main+139↓p
J+ a$ }3 E. A* F/ d - .text:004010F0 ; sub_403240+97E↓p ...
/ R* z4 h4 b5 L$ T. p/ F5 H* P - .text:004010F0- R8 } t* ^& T3 }- E6 h( h9 [ j
- .text:004010F0 arg_0 = dword ptr 4
, ]4 z4 Q* F" ?0 [ - .text:004010F0( l' {+ p$ g; f
- .text:004010F0 mov eax, [ecx]% Z5 b, t9 |/ Q5 e! u6 n- g6 U; K; @3 y
- .text:004010F2 test eax, eax
! M; W: ?* j/ S2 H" q - .text:004010F4 mov edx, [esp+arg_0]
# r: E4 l4 k! U0 I9 E0 F) e - .text:004010F8 jz short loc_401147 y, H: f! m0 L# r! M
- .text:004010FA test edx, edx+ g( b/ ~5 y+ }7 }( e8 M
- .text:004010FC jz short loc_401147. _- B+ ?3 q0 J* R# h% P
- .text:004010FE mov cl, [eax]0 i3 d p& S) f6 g5 R+ I3 I
- .text:00401100 test cl, cl
3 f3 l3 M3 `; z# U" A. w* N - .text:00401102 jnz short loc_401116/ }( ?) m/ x7 G. _: W3 x0 U+ E
- .text:00401104 cmp byte ptr [edx], 0
/ O' T# I5 u+ {5 v8 V - .text:00401107 setz al6 c; G8 w( i: y* w, B! D- }# D
- .text:0040110A xor edx, edx
: v. L, z0 ^5 T% [9 l$ s/ k5 X - .text:0040110C test al, al
, \2 n$ e7 w& n# ] - .text:0040110E setz dl" a' r5 I/ y, E0 X: E/ g Y: S0 q
- .text:00401111 mov al, dl
6 D5 C- \) Q7 Y1 Q3 y) m! @9 | - .text:00401113 retn 4
: a& A/ C2 ]2 [! E) L6 { - .text:00401116 ; ---------------------------------------------------------------------------
F% N1 L5 i1 _$ c+ C) K - .text:00401116" e6 |- Y7 W7 Y7 j; r9 p
- .text:00401116 loc_401116: ; CODE XREF: sub_4010F0+12↑j
, Q. I; c0 A R- N+ ` - .text:00401116 cmp byte ptr [edx], 0" p9 r! X) r' E
- .text:00401119 jz short loc_401147
# g, L6 D9 T5 T, r - .text:0040111B jmp short loc_401120$ T1 y6 B$ A2 {" C# N
- .text:0040111B ; ---------------------------------------------------------------------------
/ C% g" S& W# Y - .text:0040111D align 10h7 u: W/ _1 K/ L! u
- .text:00401120
# f" n! W/ ~# T/ T0 L* p' h8 t - .text:00401120 loc_401120: ; CODE XREF: sub_4010F0+2B↑j
, `- J5 e+ b p4 B) V6 r5 K - .text:00401120 ; sub_4010F0+3B↓j0 u. m. I. R6 z
- .text:00401120 cmp cl, [edx]' L2 W$ i1 g$ g+ ]
- .text:00401122 jnz short loc_40112D
- e1 h0 O( G1 N ], S - .text:00401124 mov cl, [eax+1]4 t) h: C8 X/ S, g7 i9 p
- .text:00401127 inc eax
" U- j- Y3 m( r! ]5 k& F - .text:00401128 inc edx' f9 Y3 Q; B9 s( ` ]
- .text:00401129 test cl, cl! f- Q- ~6 u# {2 v G' F( q
- .text:0040112B jnz short loc_401120
) R) q1 S& k7 k' D u - .text:0040112D
9 o' }& {, ]/ T! d/ z- J - .text:0040112D loc_40112D: ; CODE XREF: sub_4010F0+32↑j
1 ^! u+ _$ L$ c, Z. M* M - .text:0040112D movzx eax, byte ptr [eax]+ K$ y/ m1 B3 Q; [- o' J
- .text:00401130 movzx ecx, byte ptr [edx]
5 R4 N$ j" J9 F$ q/ P2 L - .text:00401133 sub eax, ecx
' Z7 K/ x/ R% P - .text:00401135 neg eax
) b, n0 \2 O1 k, P. A - .text:00401137 sbb al, al
4 Z0 b; [5 P, V+ p - .text:00401139 inc al) V/ r) f7 u" i( _/ F! d* w
- .text:0040113B xor edx, edx0 E' M0 g& F j6 k. S& k: v, c6 n
- .text:0040113D test al, al
2 y2 p/ y6 v' Y+ |/ T6 c - .text:0040113F setz dl0 u4 ]9 W( v5 d" P# l
- .text:00401142 mov al, dl4 Y6 O, p8 x1 `3 `9 Q- Y6 s2 {
- .text:00401144 retn 4
6 a1 V8 Z! I# i7 b - .text:00401147 ; ---------------------------------------------------------------------------
3 p7 B2 h6 v [. b6 A - .text:00401147) E: ~' L9 F6 I& U$ W" d
- .text:00401147 loc_401147: ; CODE XREF: sub_4010F0+8↑j
G$ e9 N% q1 K2 F+ T$ [$ ` - .text:00401147 ; sub_4010F0+C↑j ...) k3 t0 v( ^; d% q
- .text:00401147 xor al, al
0 s/ ]# E) m% c e' c) Y- s - .text:00401149 xor edx, edx
+ n! P. Y$ D8 G4 `( X: ~. [5 H - .text:0040114B test al, al
2 r! C( r$ Y# z% A+ B3 ~ - .text:0040114D setz dl
( B# D' c$ C; k: n1 q - .text:00401150 mov al, dl; A; [/ h& ^( e1 q" n( h
- .text:00401152 retn 4
0 u! D- _' Z* U. M - .text:00401152 sub_4010F0 endp8 Q+ j; g' R& a; y
- .text:00401152, m; j D' G( V) Q$ D$ |# W
- .text:00401152 ; ---------------------------------------------------------------------------
3 z5 S1 w% q5 z( N* q4 V - .text:00401155 align 10h1 \+ h x- X" i. M; q6 X6 x5 N- X
- .text:00401160
. l, ^ k! e7 t* U* e' ~4 D - .text:00401160 ; =============== S U B R O U T I N E =======================================, P4 S% X. X4 O/ a" k
- .text:00401160, t8 A2 @( i v8 j5 K
- .text:00401160
- w' {/ b7 o! z# ]" |4 }* I: e" { - .text:00401160 sub_401160 proc near ; CODE XREF: sub_4013D0+15↓p
, T a* R0 H' W; U/ u% w - .text:00401160 ; sub_4013F0+C↓p ...
7 M$ ~/ \6 T. _# J, n, D- o - .text:00401160! j& S8 c2 u. @+ [
- .text:00401160 arg_0 = dword ptr 47 ?4 f, S/ q2 G P" `
- .text:00401160% L5 d9 M& v1 D" h" V d' ~
- .text:00401160 push esi M1 V9 }: Z8 x9 Y: M u
- .text:00401161 push edi
# g6 D4 Y, R0 O( ]$ B - .text:00401162 mov edi, [esp+8+arg_0] P! A/ C- i4 n! @. j5 ~
- .text:00401166 test edi, edi9 ~3 w% Z7 _7 ~# u( D- W
- .text:00401168 mov esi, ecx! k* Z5 J8 U6 h: B3 D" M( t
- .text:0040116A jz short loc_4011CA; c8 f9 \# w+ Z8 @; {0 [
- .text:0040116C mov eax, [esi]) d' D5 |) K! v2 y( S
- .text:0040116E cmp edi, eax
7 w/ p x f- A% h0 B$ k( k4 A - .text:00401170 jz short loc_4011CA( | v5 F6 ]0 s. X# N" _2 f
- .text:00401172 cmp byte ptr [edi], 0
5 {# ?7 a- T! v: ~9 _1 F. u [ - .text:00401175 jnz short loc_4011A2! j% ?9 I) ]1 `3 k: s+ r
- .text:00401177 test eax, eax
( d0 M1 \. f: @( g" c+ N5 S; L - .text:00401179 mov dword ptr [esi+4], 1
5 ~0 ^# _1 v" t* D$ F - .text:00401180 jz short loc_40118B2 L4 W6 K1 i4 q- n
- .text:00401182 push eax ; void *: w7 O* F+ M3 Z/ c: K$ E% `4 T% D
- .text:00401183 call ??_V@YAXPAX@Z ; operator delete[](void *) k8 F( @7 `& T, S
- .text:00401188 add esp, 4
3 }9 A$ i9 j0 T& @3 q - .text:0040118B
3 k% o: C' A s) a - .text:0040118B loc_40118B: ; CODE XREF: sub_401160+20↑j
k! k$ ]% F |8 d" v/ r+ n8 F - .text:0040118B push 6 ; Size& e$ Z( f, ^0 A2 R. p# l' g/ g
- .text:0040118D call j_??2@YAPAXI@Z ; operator new(uint)
6 g* M) e) {; R7 X U' U - .text:00401192 add esp, 4& M8 V$ E* W6 l
- .text:00401195 mov [esi], eax
8 t& Z/ k; }% l; \) n* |+ k) z' ~2 y6 K - .text:00401197 pop edi
1 I: }3 x3 @: r& ~! f D3 b - .text:00401198 mov dword ptr [eax], 0
1 R5 B* W! [0 H- ~ - .text:0040119E pop esi8 L8 [2 @" R' l) @
- .text:0040119F retn 4$ ^" }. _# l- A/ s9 X- W# n
- .text:004011A2 ; ---------------------------------------------------------------------------" |4 M f6 ]+ X, a) j9 p
- .text:004011A2
/ A0 }9 g1 X& @! K$ m m3 c" V2 M - .text:004011A2 loc_4011A2: ; CODE XREF: sub_401160+15↑j- w1 }- ~2 f5 H/ f
- .text:004011A2 mov eax, edi
( H( p1 K+ C# m - .text:004011A4 lea edx, [eax+1]* w& G3 O, l+ M g, Y1 a8 l
- .text:004011A7
9 x9 s/ I" E- h7 {3 } - .text:004011A7 loc_4011A7: ; CODE XREF: sub_401160+4C↓j ? \2 A4 s3 h; `
- .text:004011A7 mov cl, [eax]( h+ N) L* u% } i3 `: [4 O+ A5 M
- .text:004011A9 inc eax$ `! X) V& s8 l T* D) U1 Y* y
- .text:004011AA test cl, cl
, j+ B7 B* K* m% e$ i/ ^" D/ Z - .text:004011AC jnz short loc_4011A78 O' v l( \3 w8 i3 `+ h
- .text:004011AE sub eax, edx
; z% h9 E( K7 Y" o - .text:004011B0 push eax
3 @/ v/ m1 Y; ?4 Q - .text:004011B1 mov ecx, esi& N4 v" p6 z5 V# t
- .text:004011B3 call sub_401030
( y8 ~$ D7 e! U ` - .text:004011B8 mov edx, [esi], H U0 T# U% m g) J
- .text:004011BA mov ecx, edi: d# u q! K9 s
- .text:004011BC lea esp, [esp+0]
, x5 g- V4 U/ E6 L ] - .text:004011C0
" k, \& o; z7 W. ^& Z - .text:004011C0 loc_4011C0: ; CODE XREF: sub_401160+68↓j
* l9 A8 A+ |& h0 p' `9 C - .text:004011C0 mov al, [ecx]. c% H2 ]+ d& P- b
- .text:004011C2 inc ecx& @, G9 I& l3 V' F: D6 o
- .text:004011C3 mov [edx], al
) U: V8 n; Y& p( h$ t - .text:004011C5 inc edx
" z( N4 e8 p& r) U/ U# ? - .text:004011C6 test al, al
A) A" v3 c% h: B - .text:004011C8 jnz short loc_4011C0& E2 x. Z" a3 I8 W' ?$ d0 B
- .text:004011CA7 ~. ?# A" _2 H; _
- .text:004011CA loc_4011CA: ; CODE XREF: sub_401160+A↑j$ l9 W$ A) b8 i# n
- .text:004011CA ; sub_401160+10↑j
]7 c* N1 a p: `8 I- C - .text:004011CA pop edi
2 k5 ^0 [0 T+ F; p - .text:004011CB pop esi% e8 f# k# [0 O( o6 r5 M' z
- .text:004011CC retn 4; w/ C5 z3 h2 P; @: B# w
- .text:004011CC sub_401160 endp& e6 H. x$ n, M! _, Y7 B+ Q& I
- .text:004011CC
8 k' E. X8 B9 b2 x7 T) @/ w - .text:004011CC ; ---------------------------------------------------------------------------
复制代码
) c; o) v2 q& |+ M
: I9 d# N, Y9 \' S l
; }) o6 X1 [- Z; [" A |