本帖最后由 shane007 于 2023-8-27 13:23 编辑 ; p* V" A8 {" e: X+ s- l- f, y
3 e4 ^/ q+ p6 D4 p# {/ M
本游戏采用了CEGUI,该组件能采用directx和opengl。: R4 ]0 M) ~ ]
经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。: A/ E$ p/ u6 r0 S% }
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。
9 ~: O! J, i% f! U. |6 U) D(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
& }/ {9 ]7 t4 `; H* o' n. s
7 W5 I" i) R' n9 D3 k8 ]" F4 v
G: o7 t' I0 p9 R; k& V2 ?0 o" |9 j在游戏中找一个字幕,在以下地方断下。
1 g9 S' s1 {1 x( g由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
: P5 E( W+ H0 n x: p因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。& X; g' `" E2 |; i9 F z
; G5 i' h) o' H- NextLife.exe+11C5 - 42 - inc edx# x+ p& Y z0 }6 {+ u8 U. _6 s, Z: R
- 004011C5
复制代码 ( A- R2 X0 y) M9 S) R( d$ W
8 q6 C) k( U# V' W* h$ Y该地方的伪代码
! _6 z2 x0 r6 ?- void __thiscall sub_401160(char **this, const char *a2)& o: @6 Y: C) v) g
- {) s& K( L7 U9 k% T: Q+ N' j4 |3 X* ~
- char **v2; // esi
0 f2 t* y/ |/ C5 j1 B/ @ - char *v3; // eax
4 w! j7 ?8 e' o/ I - char *v4; // eax7 I% I! q; V. Z$ e
( g; ?3 t _; ^, l7 J- v2 = this;" }3 `! n" h* A$ }+ L' o2 U
- if ( a2 )
1 ~/ ~, M# g7 G0 ?0 o* \, | - {2 D$ `1 U, ]3 T4 d/ T
- v3 = *this;
. n6 F& X4 G5 x" I+ K! t+ ^( L - if ( a2 != *this )" T7 ~( }" Q% Y+ v! O4 `
- {% H7 r! z2 E5 E% P
- if ( *a2 )
& j$ v9 C5 R, y4 c V1 _& x7 Z0 }! \ - {+ n7 a9 E8 M+ P$ s
- sub_401030(strlen(a2));
2 o$ }" V$ U" r! V - strcpy(*v2, a2);
# v) `& {7 U* B, C - }
6 D6 b; y" W& w; v# a - else6 H" v# U& h E7 h' c8 g6 i+ U
- { F" @% n4 B6 Q( I1 _2 b
- this[1] = (char *)1;' `& \3 I1 X5 a% R! F" U! g
- if ( v3 )2 R3 X P- R6 _
- operator delete[](v3);6 l% q# O, W8 \
- v4 = (char *)operator new(6u);! [4 U i- V, X+ Z
- *v2 = v4;
6 q- u; a& G8 k9 R1 k - *(_DWORD *)v4 = 0;. U& ^1 S. O" Y
- }- e1 r, _" Z4 l2 ~ i
- }
/ w( N: d+ S6 G) _5 B0 S" K# d5 l - }
9 K9 P/ j% y/ S" W - }
复制代码
$ v5 t1 @+ s* X8 M# t汇编代码
4 n; V# k6 K: z, ?$ p+ a- .text:004010F02 S# n( ^* } |. x* _; Y1 M2 c5 B
- .text:004010F0 ; =============== S U B R O U T I N E =======================================- u% p& s0 [1 Q0 u% U
- .text:004010F0' \) z6 }: \0 n6 _
- .text:004010F0& L0 O: n4 W1 l+ P6 V8 ~
- .text:004010F0 sub_4010F0 proc near ; CODE XREF: _main+139↓p
Z" k" Z8 {$ C7 z4 t ?# o - .text:004010F0 ; sub_403240+97E↓p ...
0 Y* K/ X* F2 [" ]% `+ t - .text:004010F0- W" ^9 G0 G) L1 e& c8 e
- .text:004010F0 arg_0 = dword ptr 4
2 D7 g6 l1 {% o0 T' { - .text:004010F06 r9 o3 P( @$ H
- .text:004010F0 mov eax, [ecx]* J8 d7 u7 d m3 a1 W+ a
- .text:004010F2 test eax, eax
) R+ t" C- g4 O2 l6 u: W& u( n - .text:004010F4 mov edx, [esp+arg_0]
; ^& u8 w) i0 `8 X7 D: P - .text:004010F8 jz short loc_401147
& t0 s# ~& {. [" \( o) W0 n - .text:004010FA test edx, edx3 m& Y* i5 F. f! k" r- T6 \( c) X
- .text:004010FC jz short loc_401147
9 d9 R/ u% D! e# ~ - .text:004010FE mov cl, [eax]
0 w1 C5 s {* L5 w. N2 f - .text:00401100 test cl, cl: x# v- T: ?' `" ]- p
- .text:00401102 jnz short loc_401116 l& v; u" O. Z0 h
- .text:00401104 cmp byte ptr [edx], 0
' C( A: }8 S( n - .text:00401107 setz al, \4 u( o/ h9 O# n* T4 f
- .text:0040110A xor edx, edx& J& a2 M# R- o2 }- U
- .text:0040110C test al, al% S3 l+ ~6 c+ o9 H+ S6 {
- .text:0040110E setz dl/ a5 u; {' E3 q% i. n) i2 _, `
- .text:00401111 mov al, dl9 r2 j. X) l5 Y7 b! m; V1 p" F' a
- .text:00401113 retn 4
! v: R) m- V6 w - .text:00401116 ; ---------------------------------------------------------------------------6 ]# R& P2 a+ _* V& x1 b1 Y. y
- .text:00401116
3 D4 j# V! v" A - .text:00401116 loc_401116: ; CODE XREF: sub_4010F0+12↑j
3 I6 T2 [9 r+ z O5 R$ } - .text:00401116 cmp byte ptr [edx], 0- X: ~- x' ~1 i1 O
- .text:00401119 jz short loc_401147. e B0 l, o6 n( v5 u0 G2 |2 H
- .text:0040111B jmp short loc_401120
" G( a1 n7 W" W# e0 _ - .text:0040111B ; ---------------------------------------------------------------------------
* K* l" _) K+ a0 a. r& X - .text:0040111D align 10h4 o3 g, H* j+ s& h0 G6 B C3 Y. A
- .text:00401120+ `/ t2 e. I7 B( {# W% j8 R
- .text:00401120 loc_401120: ; CODE XREF: sub_4010F0+2B↑j& u& O6 U: I) ^) G9 I7 h
- .text:00401120 ; sub_4010F0+3B↓j3 k8 [* d; q- z, r9 p
- .text:00401120 cmp cl, [edx]
! Q0 K3 j* {- f - .text:00401122 jnz short loc_40112D8 [: ]0 g8 u0 \! x" C- E
- .text:00401124 mov cl, [eax+1]5 i# T% K1 f7 _0 G9 ^0 ]
- .text:00401127 inc eax
. W, Q5 q8 l* Y8 q9 k6 j/ M; E - .text:00401128 inc edx
9 C. }$ ~, U4 k) S# }8 c, @ - .text:00401129 test cl, cl
9 r& L& m/ Y% x% L - .text:0040112B jnz short loc_401120
- y6 x9 ]+ v2 ~ - .text:0040112D
; p2 a1 d7 A# A$ ?4 i) d# F - .text:0040112D loc_40112D: ; CODE XREF: sub_4010F0+32↑j# z$ G6 h2 |5 h4 y6 w
- .text:0040112D movzx eax, byte ptr [eax]
6 L6 m- U9 G' ]0 o" Z - .text:00401130 movzx ecx, byte ptr [edx]+ E; F7 Y% W: h* E# z
- .text:00401133 sub eax, ecx( w: t+ p. E' S" U% L3 n; U6 \
- .text:00401135 neg eax
# K: _* ^" C0 u1 [3 P& ` - .text:00401137 sbb al, al' i$ T: H+ @! ~4 l& Y0 Q
- .text:00401139 inc al, w8 _5 n/ c! g; C, q
- .text:0040113B xor edx, edx
: h- b1 B6 N' D/ q. b* Q Z+ i( D - .text:0040113D test al, al
; {8 `7 p" O9 Y/ D' e - .text:0040113F setz dl" h! D3 g2 I- y3 \2 [
- .text:00401142 mov al, dl0 |- C& t5 b# t' S( n+ a% E1 X3 t
- .text:00401144 retn 4
# H0 B6 h+ p1 L1 P7 s+ i$ u - .text:00401147 ; ---------------------------------------------------------------------------
/ w% J) z2 B7 i1 |% f - .text:00401147, [8 F4 U7 J- {% @# a
- .text:00401147 loc_401147: ; CODE XREF: sub_4010F0+8↑j
: E* ]. m- {3 I5 x - .text:00401147 ; sub_4010F0+C↑j ...
" F4 A6 r2 F; t. i' Z6 Q+ l - .text:00401147 xor al, al% a2 e8 `6 l5 l! G, ]
- .text:00401149 xor edx, edx
/ F7 a. X& B% b! y) q - .text:0040114B test al, al6 Y+ ?6 r r7 y& @5 y' B
- .text:0040114D setz dl% z% J5 h$ \" g7 N
- .text:00401150 mov al, dl
9 Y* G: F; w+ |* Y! [% Z$ D) e - .text:00401152 retn 4" _7 e* h/ L6 y2 N3 a* |
- .text:00401152 sub_4010F0 endp* ^* U7 S+ Z7 [9 E7 {+ G0 T' c
- .text:00401152
* q1 B$ i' S8 Y4 \6 ^/ V$ U - .text:00401152 ; ---------------------------------------------------------------------------. n1 e( z: |6 X7 K/ }6 I
- .text:00401155 align 10h5 t2 ~ w0 @0 J6 a
- .text:00401160
2 i; K, Z+ H* O: A" {5 U$ d- R1 ^ - .text:00401160 ; =============== S U B R O U T I N E =======================================
4 W3 W I( a( J3 `. N; ~# y - .text:00401160
& }- {0 w$ o% _ - .text:00401160! g$ E" c. l0 a3 a% f) Y. u7 }
- .text:00401160 sub_401160 proc near ; CODE XREF: sub_4013D0+15↓p1 f6 X! a3 k! k) e$ Z
- .text:00401160 ; sub_4013F0+C↓p .../ i2 G3 R/ k3 `6 I1 d' E9 n
- .text:004011602 ]0 m/ b: ?6 I6 h6 m0 k8 C
- .text:00401160 arg_0 = dword ptr 4
9 z6 x5 ?2 i3 L* U" z6 }0 L - .text:00401160
" q, Y$ A7 l# M; i* ^1 i1 | - .text:00401160 push esi) B+ ]' U/ v/ @7 k6 W
- .text:00401161 push edi
% v6 j( B! Q1 L4 V | ~5 _3 W8 Y - .text:00401162 mov edi, [esp+8+arg_0]" H5 s/ }+ M) i' ~- O
- .text:00401166 test edi, edi# s! D6 O% x. s B# `
- .text:00401168 mov esi, ecx
% v- Z7 V: n$ U+ K0 Y, @ - .text:0040116A jz short loc_4011CA
& Q% j6 `: _! \# @2 o7 O - .text:0040116C mov eax, [esi]
# k& g; g6 a& ^/ v - .text:0040116E cmp edi, eax* k* i p# X; F! q
- .text:00401170 jz short loc_4011CA( E; _: t( o$ e; f( P8 A+ I7 @
- .text:00401172 cmp byte ptr [edi], 0% [3 w5 @6 \8 |7 d2 G" y7 h
- .text:00401175 jnz short loc_4011A2
0 m$ W. G) |5 ?1 }9 r, ? - .text:00401177 test eax, eax
6 p3 T- s; r- t9 S; X8 x; w - .text:00401179 mov dword ptr [esi+4], 1& Y/ } c7 ^" P4 V
- .text:00401180 jz short loc_40118B
5 I5 l! Y: p3 O- ~$ Y! M - .text:00401182 push eax ; void *
, S E/ P( }+ @3 i0 \ - .text:00401183 call ??_V@YAXPAX@Z ; operator delete[](void *)$ O/ Q5 k8 m7 l! B1 I6 r5 [
- .text:00401188 add esp, 4
* T0 P7 U- S2 q* f+ B( W+ G4 ^8 ^" t - .text:0040118B
I" W! N. Z0 j; z- Z' z - .text:0040118B loc_40118B: ; CODE XREF: sub_401160+20↑j
9 [7 Z' b+ S9 s* k) L - .text:0040118B push 6 ; Size9 y5 Y# }! t: B7 s
- .text:0040118D call j_??2@YAPAXI@Z ; operator new(uint)" ]- G8 t) x1 U% A% E8 ~
- .text:00401192 add esp, 4
' q" L0 y- |: [0 A - .text:00401195 mov [esi], eax
5 S" i: A; u) O6 i4 g - .text:00401197 pop edi
; X* Q- K9 V/ [+ u9 n - .text:00401198 mov dword ptr [eax], 0: c5 Z9 K5 D8 x5 v/ B; l: f& ^! X
- .text:0040119E pop esi+ Q; v; N, j2 b
- .text:0040119F retn 46 z& H8 ~8 A x
- .text:004011A2 ; ---------------------------------------------------------------------------
) M3 ]; b1 S/ W( c* t# K; P1 h8 ^ - .text:004011A20 Z" ^4 f5 n1 W- F$ c5 N
- .text:004011A2 loc_4011A2: ; CODE XREF: sub_401160+15↑j
/ K/ S& m1 q) w) m3 U% N4 A8 _ - .text:004011A2 mov eax, edi
0 ?) _+ v" q4 |6 C+ c; n) c; I - .text:004011A4 lea edx, [eax+1]+ ^ r: N* G* Y |% B0 e
- .text:004011A7
& Q* f3 ]/ C$ @3 u9 ] - .text:004011A7 loc_4011A7: ; CODE XREF: sub_401160+4C↓j
0 X+ e2 y2 f% l& a$ [# e - .text:004011A7 mov cl, [eax]: f. q2 N) a: H# H8 i1 ]. ]
- .text:004011A9 inc eax
# @5 Z# }! \5 G; N - .text:004011AA test cl, cl% O2 l$ z6 [. P M- n: h# _3 }
- .text:004011AC jnz short loc_4011A73 Q( M; h! r6 f8 R* S* o, ^
- .text:004011AE sub eax, edx
7 \; c% ]1 V) @4 @ - .text:004011B0 push eax
5 Y. P) N) \0 [5 @% | - .text:004011B1 mov ecx, esi
9 k/ n; `2 B0 W( I& Y* ?% R1 J - .text:004011B3 call sub_401030- Z' ^/ e" v' ]) a) x" ^( Z% Q; Y
- .text:004011B8 mov edx, [esi]- p% Q9 f' c/ S6 K* e1 m
- .text:004011BA mov ecx, edi/ `; ]5 H# P" y9 b* L, z
- .text:004011BC lea esp, [esp+0]
) N. y: ~% ^- I% @7 N$ |) [ - .text:004011C04 O; r, f. e1 y( o2 n- z, ? p
- .text:004011C0 loc_4011C0: ; CODE XREF: sub_401160+68↓j5 t1 D7 }' `9 {: i; U4 O9 s
- .text:004011C0 mov al, [ecx]( q- Y" D" S0 \3 K6 R4 z2 k) _
- .text:004011C2 inc ecx, _7 y7 k) {8 I0 d# X9 \4 L' \
- .text:004011C3 mov [edx], al' o& e8 L u; k
- .text:004011C5 inc edx
}5 p. w t8 l: Z3 \3 m - .text:004011C6 test al, al
# _1 H8 p2 u6 }+ T! b5 d, e( j - .text:004011C8 jnz short loc_4011C0
6 _& \8 f o) K( A - .text:004011CA. @6 ^1 N9 J; o* l. D
- .text:004011CA loc_4011CA: ; CODE XREF: sub_401160+A↑j" A: {$ p8 B+ I
- .text:004011CA ; sub_401160+10↑j
0 `8 T2 B/ W9 c2 p- \8 n5 _ - .text:004011CA pop edi
0 I0 P, H+ Q6 P* i( Z+ _1 J - .text:004011CB pop esi" ^- Q* o8 f" T5 f
- .text:004011CC retn 4
* G$ ^4 I2 M+ ]! ]' L$ a q - .text:004011CC sub_401160 endp+ S* m. _# z6 M- P5 K7 ?- q* d) s
- .text:004011CC- S' V1 ` X# o) g7 @+ X
- .text:004011CC ; ---------------------------------------------------------------------------
复制代码 ) S `# O( f# b( `, R* c0 S9 r
4 T! z$ s# s8 Z: L$ v! y T6 k5 j! y" O7 g. N7 C7 y
|