本帖最后由 shane007 于 2023-8-27 13:23 编辑
8 q0 m9 o8 v8 u3 _4 t
& F, r# e' S9 Z7 E9 w( r1 S本游戏采用了CEGUI,该组件能采用directx和opengl。
4 p$ u$ v& V8 B经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。1 k9 M6 w6 @/ M. C0 T! f- |6 c
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。1 F4 J5 R3 ~+ u( R: r2 C; V2 b7 }( G1 x
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)1 y$ T" j" O) P" c
9 H; g+ t; A( E4 c" K; K4 H$ {8 ~2 T9 ?6 x. B& n1 {* }
在游戏中找一个字幕,在以下地方断下。1 m* a! R; W# q$ f2 g6 r
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
" ~% b. _2 \- Q, h0 s' e因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。1 r' c Y! k- B
3 ^# B' m9 R5 S/ M) ~- NextLife.exe+11C5 - 42 - inc edx
+ ]" X7 l" u2 y8 {& c, ] - 004011C5
复制代码
# u& _% M* [) D3 N4 W* y: h+ N1 }7 j+ k8 I& e7 }
该地方的伪代码0 l5 R% c, d2 k1 l; _9 R2 H
- void __thiscall sub_401160(char **this, const char *a2)6 | r5 ]5 b5 a0 J4 K; m
- {" B' b5 X1 \2 d* O! ^
- char **v2; // esi
# ?' x6 n! A& h - char *v3; // eax
% j! ^$ Q. Y' `/ P - char *v4; // eax
, o+ R% V. k7 I% j
- f# J0 _% A# V2 M* d8 T; Q4 s- v2 = this;- G9 v" [/ I- ]9 j
- if ( a2 )' o: D1 I' |- t' N5 L) d. v
- {
3 \# h$ ~0 G J+ g' \' S - v3 = *this;
' p- q* `3 o) e# t* [! I - if ( a2 != *this )
5 J6 z2 k; g7 Q0 {4 i1 d - {
+ ~/ S% [9 Y7 p l0 l/ t: b! s0 Q - if ( *a2 )) b& V. e. x: t7 ~+ R5 v7 N1 H, q
- {
" e4 |9 y o, g+ D3 N9 R - sub_401030(strlen(a2));! U/ ^- ^& ~0 ^4 w5 H6 Y7 [
- strcpy(*v2, a2);2 n3 H1 }3 B6 \% c8 l8 \5 }& ?
- }& }2 w1 S4 J/ T% M4 x3 t
- else
" }5 i6 H7 [$ B2 g4 b- @7 B - {
* H2 |4 y6 N6 O$ t s- a - this[1] = (char *)1;
8 H$ ]+ h( W5 n6 ]0 t& u5 O: [ - if ( v3 ); s- t6 X# q n" C' e
- operator delete[](v3);
8 d* k$ T: q7 m3 c - v4 = (char *)operator new(6u);8 M7 g/ }% w# v" C" x
- *v2 = v4;
4 a4 Z; O5 I5 x3 w- \% u% x2 T - *(_DWORD *)v4 = 0;
, s8 Y/ n# r+ I) E2 b" C! T! T - }' ] o* J) F( I& h+ I+ {
- }, b6 Y4 W8 R6 C5 p5 H* l7 e
- }
9 f" n* } q4 t6 l7 z. E& S$ _ - }
复制代码 9 Z5 i: x$ D5 A0 f- Z; @
汇编代码
" T- X4 O& j/ H# o6 e6 a h- .text:004010F0
7 M9 N+ _* t' w! n/ S: q/ k2 P - .text:004010F0 ; =============== S U B R O U T I N E =======================================
3 \- J+ [1 M$ H1 X9 V. w$ D; { - .text:004010F0- K- r7 a2 e3 w0 x/ r
- .text:004010F0
' J3 q# {3 s) R9 |; t - .text:004010F0 sub_4010F0 proc near ; CODE XREF: _main+139↓p
) C/ _, J/ z. f1 h6 `8 X - .text:004010F0 ; sub_403240+97E↓p ...
. R( w) J" ^1 w1 J5 h t - .text:004010F0; B4 V- q5 d: C. m5 @
- .text:004010F0 arg_0 = dword ptr 4
( E m; }! K8 L% X - .text:004010F0* h, \. E) _6 u2 r P9 q( v
- .text:004010F0 mov eax, [ecx]
7 h9 l( S2 m/ M - .text:004010F2 test eax, eax) v4 y1 f% v# x2 y) e9 ?
- .text:004010F4 mov edx, [esp+arg_0]; M" a7 M" k2 ?
- .text:004010F8 jz short loc_401147
5 O& L% D8 X( o - .text:004010FA test edx, edx! n/ C: G$ u$ V, U3 z# W2 {' V/ V
- .text:004010FC jz short loc_401147
& e5 p: b! |* y5 R2 d: T - .text:004010FE mov cl, [eax]
! X+ M& O; o3 | - .text:00401100 test cl, cl8 O% W9 S; I4 p$ w6 s/ d8 x
- .text:00401102 jnz short loc_4011169 q9 r% |2 J& O" ], S2 e
- .text:00401104 cmp byte ptr [edx], 09 R9 }, \8 A1 H/ }7 g, h3 }0 R
- .text:00401107 setz al
' g8 L* [! ?: {$ w( F - .text:0040110A xor edx, edx
! g3 @6 [) X C4 A - .text:0040110C test al, al
4 [, G8 b$ s. q" l - .text:0040110E setz dl
& v$ e/ Y- m" R Z% | - .text:00401111 mov al, dl
, c; h6 F& u4 Z( O/ T - .text:00401113 retn 42 w7 Q- x; L/ {8 f) S5 x
- .text:00401116 ; ---------------------------------------------------------------------------6 R- [8 w$ [8 k; n
- .text:00401116: k) `9 W x' {( A
- .text:00401116 loc_401116: ; CODE XREF: sub_4010F0+12↑j. P8 a1 W( f" V/ O/ o {
- .text:00401116 cmp byte ptr [edx], 0+ h# S2 {' C/ [( [: n& y/ k8 j& ? H
- .text:00401119 jz short loc_401147
# L% ?+ x/ N4 {4 ^8 F* p - .text:0040111B jmp short loc_401120
0 ?( H4 H8 W4 h$ A+ o - .text:0040111B ; ---------------------------------------------------------------------------
' M2 j/ }) j, G+ D! q( Y - .text:0040111D align 10h3 x# U/ I! _* \
- .text:00401120
% t. s5 N8 D& o - .text:00401120 loc_401120: ; CODE XREF: sub_4010F0+2B↑j
' Q4 ?* Z) j" N5 U - .text:00401120 ; sub_4010F0+3B↓j
7 k/ o7 x, \ @5 j2 o' }1 R - .text:00401120 cmp cl, [edx]! s; N/ o& K; d! w
- .text:00401122 jnz short loc_40112D# Y, `/ _6 h) }3 r. ^' I
- .text:00401124 mov cl, [eax+1]
" d5 f( ^# `- Y% B - .text:00401127 inc eax- v$ I( o1 `5 F, s u
- .text:00401128 inc edx% ^/ U( [) X. P- P2 C
- .text:00401129 test cl, cl4 U) S% ~6 l2 a5 R {2 ?
- .text:0040112B jnz short loc_401120
2 F& l$ L$ N& e) C( {% H: Q - .text:0040112D
2 T( P( Z" Z$ A, K) {- T3 _2 Z - .text:0040112D loc_40112D: ; CODE XREF: sub_4010F0+32↑j
- {2 {$ L, w) t+ Y% y( ~ - .text:0040112D movzx eax, byte ptr [eax]; d- F; d/ c2 W8 w7 g. y
- .text:00401130 movzx ecx, byte ptr [edx]6 F# g2 d- C- z$ E' m: b
- .text:00401133 sub eax, ecx$ |/ x) p. s4 R
- .text:00401135 neg eax9 n4 l( Z. r5 k/ h! _$ R
- .text:00401137 sbb al, al/ T% \$ N8 l f* ?% F
- .text:00401139 inc al2 q5 g. w! S+ f) H; c) Q& Q
- .text:0040113B xor edx, edx" z! ?/ z* B9 o p% L
- .text:0040113D test al, al4 `9 s) V: H$ d" y& s8 x
- .text:0040113F setz dl
! _1 _0 m( t6 f) q3 T& S4 ^ - .text:00401142 mov al, dl
! F. _; i, V" b1 ]0 W - .text:00401144 retn 4
3 K% R5 p/ R/ i( F* ^+ _! S - .text:00401147 ; ---------------------------------------------------------------------------1 U% }& ?6 a- s* z0 z
- .text:00401147: U/ r5 M9 w, B4 F m
- .text:00401147 loc_401147: ; CODE XREF: sub_4010F0+8↑j
6 t( V G/ b( M* f9 e7 ]' n/ b - .text:00401147 ; sub_4010F0+C↑j ...4 ~3 }1 d: l* d: v' `
- .text:00401147 xor al, al& r# g$ Z: w4 Q ]4 S' V6 q, V: |( L) n
- .text:00401149 xor edx, edx
: O/ h# p- t4 f1 t! V - .text:0040114B test al, al
# D$ @; i ~. I0 f8 L y6 s - .text:0040114D setz dl
+ ^# [" p6 ]4 i$ ]( t - .text:00401150 mov al, dl
7 k0 _) |0 P ^$ \6 Q - .text:00401152 retn 4$ G, b3 A* f/ q9 R5 ]5 J+ l
- .text:00401152 sub_4010F0 endp
! W, F3 b- h6 C# Z& ^+ A5 [ - .text:00401152% ]7 x2 L1 `2 G5 m ~
- .text:00401152 ; ---------------------------------------------------------------------------
4 z3 Y$ Q: @% O) } - .text:00401155 align 10h
. T0 B* U8 u2 @7 F - .text:00401160
* K6 _7 Y; ~) w' e2 O - .text:00401160 ; =============== S U B R O U T I N E =======================================5 H( j) K: J& ?6 Z* O' M: e/ C1 {
- .text:00401160
) T/ `9 W8 I' K5 j - .text:00401160
' b/ `5 {* ^8 _7 @ - .text:00401160 sub_401160 proc near ; CODE XREF: sub_4013D0+15↓p5 W |- Q7 d" H! b
- .text:00401160 ; sub_4013F0+C↓p ...3 {6 I. Z1 A7 ]/ e2 ~
- .text:00401160
: G4 q7 ]/ T2 g' |9 t4 v$ f8 C - .text:00401160 arg_0 = dword ptr 4
+ @! S5 I! C9 T6 Z, E, y - .text:00401160
0 Q) K) L" u% q! ?) i% ?3 e - .text:00401160 push esi5 b: `3 @" E& E [3 ^
- .text:00401161 push edi
" a! W: s3 W% M# `/ M. J- N5 x/ ~8 ~- F - .text:00401162 mov edi, [esp+8+arg_0]
9 D, ~" C* j. a9 W# q% A - .text:00401166 test edi, edi8 ~2 l% {2 N/ J0 |9 k, J9 t
- .text:00401168 mov esi, ecx9 d( R1 a( {2 F' ~1 O% B
- .text:0040116A jz short loc_4011CA; C+ f" ]9 o) V2 e. d: a
- .text:0040116C mov eax, [esi]
2 X4 H3 {; O: W0 S: f3 V: t - .text:0040116E cmp edi, eax* E& O( U/ w" Z- o* p' l2 Z7 B
- .text:00401170 jz short loc_4011CA
4 O2 H6 C2 O% m$ p - .text:00401172 cmp byte ptr [edi], 0
5 N; ?: p# ~ K, O0 b G5 Q - .text:00401175 jnz short loc_4011A2
. j' e2 a3 K7 I2 `0 @: [+ f - .text:00401177 test eax, eax0 v- J* V9 q; l/ G( F
- .text:00401179 mov dword ptr [esi+4], 16 @' H' Q8 [" ]6 b+ K
- .text:00401180 jz short loc_40118B Q( ]; A3 N% G7 u& n+ S7 s
- .text:00401182 push eax ; void *4 H& u& L- p0 @
- .text:00401183 call ??_V@YAXPAX@Z ; operator delete[](void *)- F4 h+ z' z! w+ l
- .text:00401188 add esp, 4' B8 Q: Q5 V' D9 k6 A7 i |
- .text:0040118B" |) x6 e2 O( f" R/ I; Z
- .text:0040118B loc_40118B: ; CODE XREF: sub_401160+20↑j# x2 C" m. v0 \
- .text:0040118B push 6 ; Size
8 ?" z/ U% K. ~7 E9 ^0 T5 e7 D) S8 u ` - .text:0040118D call j_??2@YAPAXI@Z ; operator new(uint)
! ~6 W z. U! [7 w - .text:00401192 add esp, 4
9 k9 s2 ?; \. x& I# {3 Z; s% x0 {6 y - .text:00401195 mov [esi], eax4 C1 o; |5 c' Q7 O1 K/ w
- .text:00401197 pop edi8 ]6 ~$ T3 g' T. {
- .text:00401198 mov dword ptr [eax], 0
" h+ a1 h! [7 ]3 t Y( @ - .text:0040119E pop esi" B! B, T7 \, ]. C, C/ O9 H
- .text:0040119F retn 4/ }7 U. }* O' i- n
- .text:004011A2 ; ---------------------------------------------------------------------------$ z x4 k9 I" W: e, a+ P
- .text:004011A2* L+ |; s) }7 x2 K: h
- .text:004011A2 loc_4011A2: ; CODE XREF: sub_401160+15↑j
* q7 @7 U; e K( J4 Y6 @ - .text:004011A2 mov eax, edi6 t I, z/ I' @; @
- .text:004011A4 lea edx, [eax+1]/ f+ ^/ E5 r, l+ V0 d. I
- .text:004011A7$ d3 N3 i/ O3 Q
- .text:004011A7 loc_4011A7: ; CODE XREF: sub_401160+4C↓j
% d7 ]+ t$ N& G$ ^$ U: \ - .text:004011A7 mov cl, [eax]4 e. }1 V/ H. b; O. D d
- .text:004011A9 inc eax, i' j" {( r/ w. s+ z
- .text:004011AA test cl, cl
) u0 E% a x8 y: k# {, A' Y7 b - .text:004011AC jnz short loc_4011A7
8 R+ t% v6 D3 ~9 c. E* I - .text:004011AE sub eax, edx
2 i7 b9 m/ ]3 g( t* S - .text:004011B0 push eax
) G* l. j e. v# \, U - .text:004011B1 mov ecx, esi
$ |+ ?2 A+ C2 @ - .text:004011B3 call sub_401030
7 d. E, [0 X# `2 Q3 v - .text:004011B8 mov edx, [esi]
' z' {% B z2 B4 z( f; Y' P - .text:004011BA mov ecx, edi
) n9 w) O/ g/ i - .text:004011BC lea esp, [esp+0]$ x3 x# h7 F5 X
- .text:004011C06 U! `( R6 t1 R* r; U" K# V4 W
- .text:004011C0 loc_4011C0: ; CODE XREF: sub_401160+68↓j( O- C9 c! H; l* C$ a
- .text:004011C0 mov al, [ecx]
; @2 Y! G5 g& I* p6 k) z5 H* Z - .text:004011C2 inc ecx0 C, d4 x$ |* L! j6 a% l9 O2 `
- .text:004011C3 mov [edx], al
2 Q+ N& s2 W J# ?& o- c% [* i - .text:004011C5 inc edx
2 m) V& v; M& Q! F% X! \5 z - .text:004011C6 test al, al' V- @7 M' Z! \) t/ J3 r
- .text:004011C8 jnz short loc_4011C0
. \' s0 m: G6 i1 c) b - .text:004011CA1 ^9 |1 n$ ^8 a! I& s8 T
- .text:004011CA loc_4011CA: ; CODE XREF: sub_401160+A↑j; }. e& X, n& g- N1 v& I/ a5 H6 h
- .text:004011CA ; sub_401160+10↑j
2 I4 _/ ~9 P \2 l4 q - .text:004011CA pop edi$ k. g0 n* j6 Y$ Z& E7 v% [
- .text:004011CB pop esi+ b' a8 g5 A. ~% S# L9 z# h
- .text:004011CC retn 4; P1 X' D4 Q9 O& o" ~" N
- .text:004011CC sub_401160 endp
( a4 a2 j7 r5 j$ N2 z0 f/ D - .text:004011CC
3 `7 |/ T. @3 }+ V. D0 q; o - .text:004011CC ; ---------------------------------------------------------------------------
复制代码
5 c9 |0 D% [2 C) W. G0 `( Y' K$ M0 D9 F6 }* R- G
' i1 Q' v/ m$ X! p& ?
|