本帖最后由 shane007 于 2023-8-26 16:32 编辑 4 @" a6 C" Q- a) {/ L6 Z0 J3 d# g
: E9 f2 W7 R# h d$ b这个游戏以前分析过,这次再写仔细些,6 f$ l5 Q3 w/ r
CreateDevice应该就是以下这处了,我用ida pro的F5功能看了一下伪代码,更确定了。) r! u3 T2 p/ {) w* X
这游戏构造比较简单,CreateDevice是在exe文件内完成的。dxwnd窗口化成功。
4 R6 g5 q0 H. B8 G2 p# J) r) T$ C6 y. x: i
- .text:0041641A push ecx
/ \* N! A/ r# m+ @( m- k7 z4 C - .text:0041641B mov [esi+90Dh], dl
) b3 m% S9 h( a2 k - .text:00416421 mov ecx, hWnd( G& W8 p, L4 B* h3 ], L1 T; B6 ?4 _
- .text:00416427 mov edx, [eax]+ @& d# {+ e. i/ A
- .text:00416429 mov edx, [edx+40h]( e1 D- B4 f) K- N7 S
- .text:0041642C push 40h
5 ]' w+ O! {; w. I' w - .text:0041642E push ecx1 u' s4 j0 ?$ |% L* a
- .text:0041642F push 1
5 Z% m& M% J9 q1 b - .text:00416431 push ebx: `$ Y9 Q5 F0 {2 F
- .text:00416432 push eax
" u- i( B! Q1 w% z - .text:00416433 call edx
复制代码- J4 z) }5 F8 g: w
- int __thiscall sub_415FF0(char *this)
+ i! H F K: I6 @% z: f$ r" w- f) p - {
# N) N7 l4 Q! H3 a - char *v1; // esi0 q8 ?5 t% @( X3 c4 u
- FILE *v2; // eax9 d* r% w- ]' ^# B) x
- IDirect3D9 *v3; // eax
7 W2 \$ w7 m$ K1 O9 }7 i/ D - const char *v4; // ecx) g- R5 W- m7 a/ v( e" ]
- const char *v5; // edi1 m5 L/ l' F4 Y; M! [4 _
- const char *v6; // edx1 J! E: T. Y; x1 }, u
- const char *v7; // eax
/ k. `3 z5 l9 m - FILE *v8; // eax
; u4 U- T5 \: H# H8 ? - signed int v9; // ebp
/ h+ g3 X% t8 b& j) z4 ? - const char **v10; // eax
/ b) _% U# m+ `% d$ D( r/ W i - double v11; // st76 t# y, v) @6 ~: L1 S
- double v12; // st6
3 x3 ?: q7 D) v# { - const char *v13; // ecx
! r: f3 |% p' ~0 K, l5 d% D - FILE *v14; // eax
- {. U4 D% l* f3 H7 B3 e - unsigned int v15; // eax) Q q# @! v# [1 ^
- int v16; // ecx
0 M" K% P: k# [0 X& U5 k2 O - FILE *v17; // eax
" ~1 G& T* D" _- W$ G3 W - int v18; // eax
; J2 v( A4 k! D! `8 H J: c - bool v19; // zf
* j2 c2 p! \. h2 O2 z2 A: g - int v20; // eax
: T$ a# S8 d2 } - unsigned int v21; // edx7 x4 Y2 v- }0 c
- bool v22; // sf
' D/ d* B. l3 M. ` - int v23; // eax
; _) v' i9 A# }9 T! C - int v24; // eax% a. h/ @8 _0 ^ h+ d4 ^ h! ]
- int v25; // ecx( g, L6 C9 Q' ?( a: n
- int v26; // eax Y i) @% g: T+ }# w7 V' z" ^
- int v27; // ecx/ W, q$ S# w7 L( ^9 ^9 n
- const char *v28; // eax( \' x$ m; k+ S* F6 k
- const char *v29; // edx
4 J* f) Y( X( Y3 U - FILE *v30; // eax
! ~1 k; U( g: F4 a4 s* X - void *v31; // eax
5 Z: a" |& A( L0 ~& H8 Y1 N - double v32; // st7
! K! B% Y0 H6 _$ M K' r6 ~ - _DWORD *v33; // esi
" P* k" d6 ?5 \# n - float *v34; // eax) m" r& w- U" h8 y+ B7 o- U0 R* v
- float v35; // ecx5 V) ?9 Z* o' l. W9 T/ U# L
- float v36; // edx; I! [% X* W' G! z# J
- float v37; // ecx
( \/ l, K1 h: r - float v38; // edx
9 a+ @8 w; E* g$ {2 K - float v39; // ecx. {- [ _$ v& n. d" ?& k
- float *v40; // eax/ S! m9 ^# x+ X- G1 S$ \2 V
- float v41; // edx
+ F: c! Z- N, f2 O7 }( h6 K - float v42; // ecx
0 _ R# F0 E5 W E - float v43; // edx
+ h& C2 w4 w/ m3 n& a - float *v44; // eax/ t! L$ t& H a' w
- float v45; // ecx
E& V+ n/ p" C4 u; x8 V - const char *v47; // ecx1 a; B) e8 b5 {9 Z A3 c
- const char *v48; // ecx; N: {: Y! ]: Y1 N- h: G
- signed int v49; // [esp+A0h] [ebp-5Ch]8 X$ J" p; d' p- Y# Z( [5 i2 U
- const char *v50; // [esp+A4h] [ebp-58h]9 k* t( {$ z9 z7 w( @: W8 O9 Y
- const char *v51; // [esp+A8h] [ebp-54h]' L/ ?3 x9 V5 _8 Q! N4 y
- const char *v52; // [esp+ACh] [ebp-50h]
k+ j) {0 m% F1 O' i - _DWORD *v53; // [esp+C4h] [ebp-38h]/ h) ^& X2 h' u+ z" b
- const char **v54; // [esp+C8h] [ebp-34h]
4 k8 I+ A' h a& C& w - float v55; // [esp+CCh] [ebp-30h]( I/ C0 G% _# X- q- }
- const char *v56; // [esp+D0h] [ebp-2Ch]
) Q7 ]3 T; o2 O9 q; ^* W; ] - float v57; // [esp+D4h] [ebp-28h]* i/ J5 ^8 p7 u
- float v58; // [esp+D8h] [ebp-24h]0 Q- k6 G3 p; w! U# q2 R! R2 p
- float v59; // [esp+DCh] [ebp-20h]
+ W8 o4 A0 A+ l( l - char v60; // [esp+E0h] [ebp-1Ch]
& t+ d4 V5 z- Z. n, `# n - int v61; // [esp+ECh] [ebp-10h]
6 y* l9 l4 e) Y }6 P - int v62; // [esp+F8h] [ebp-4h]# x" Y$ h: p6 Z$ [
9 z. y/ J% v- e) }; g" c4 H1 t- v1 = this;- ]0 n9 k( s4 x8 s* p: c' W9 r
- v2 = (FILE *)sub_4D7E8F("Initializing graphics...\n");
- {8 U7 w4 T: p: H - fprintf(v2 + 1, v52);
- y3 e: z) Y5 T# M3 m- ^& p - *((_DWORD *)v1 + 492) = 0;6 ^% Q- R" E6 w) Y
- *((_DWORD *)v1 + 609) = 0;
) K. d- [) j. r7 c# K# T1 Y - *((_DWORD *)v1 + 611) = 0;3 Y0 h; m9 d4 t N, j- \2 W
- *((_DWORD *)v1 + 610) = 0; V- F# _2 ?% n2 z P! v
- *((_DWORD *)v1 + 613) = 0;
& Y0 Q9 q+ {9 M9 k7 l& B! J3 i/ K - *((_DWORD *)v1 + 612) = 0;
" ^7 y, L! {4 d3 x& l - *((_DWORD *)v1 + 614) = 0;
. v" p4 [; \0 ] E) z+ U3 _ - *((_DWORD *)v1 + 601) = 0;
! n% O5 y- T) O5 i - *((_DWORD *)v1 + 600) = 0;1 [3 w) W4 t& q/ L( ?" g
- *((_DWORD *)v1 + 615) = 0;( x Q4 @! S1 ^5 a+ X/ j; H" q
- *((_DWORD *)v1 + 395) = 0;
k+ {: H6 z% X( d, R2 b5 o - *((_DWORD *)v1 + 488) = 0;
+ l- O6 g% D/ [7 P# M4 r" ^ - *((_DWORD *)v1 + 486) = 0; C( _/ Z1 j& `9 a0 y8 o
- *((_DWORD *)v1 + 487) = 0;: ]7 Q5 V/ N$ z5 u3 Y
- *((_DWORD *)v1 + 489) = 0;
0 A; o- T4 {1 f- { - *((_DWORD *)v1 + 491) = 0;8 E3 f4 y: {1 U5 m# _. O1 u
- *((_DWORD *)v1 + 514) = 0;
8 a: i3 k0 Q" a" G - *((_DWORD *)v1 + 597) = 0;1 @8 o9 x9 b( p+ ~+ l
- v53 = v1 + 1968;
* i8 o# \9 F% M, @ - *((_DWORD *)v1 + 498) = 0;, D6 t1 p( {" l0 T8 y C( m' G
- *((_DWORD *)v1 + 499) = 0;
9 Q7 j$ r1 ]4 ~: g - *((_DWORD *)v1 + 500) = 0;
( ^3 F" R- N( H/ [; r. @! |4 e - *((_DWORD *)v1 + 501) = 0;
7 b: F# `/ e( A, }- X5 S - *((_DWORD *)v1 + 502) = 0;4 U% V( s- o7 q( L# M# @
- v52 = (const char *)32;
3 _8 y6 J! m+ W; [; ^, o: K: k - *((_DWORD *)v1 + 578) = 0;
6 a# P; o/ N# D } - v1[2316] = 1;
_- v! O5 x8 g8 K6 y - v1[2476] = 0;
6 T' W! }; K& C. {, w. W, Z) ~ - v3 = Direct3DCreate9((UINT)v52);
7 t. l# r9 @) b' l0 _, j - *((_DWORD *)v1 + 384) = v3;
7 D8 p8 K2 y' V2 `4 W - if ( !v3 )
0 N) E/ k! O& j1 r% `1 @ - {/ i* y- a% ~" {& o8 G' F" r
- v5 = v56;( m# w) P' f+ k" _! E1 G
- goto LABEL_27;
/ S5 O: s/ v1 A: i2 F& v2 E, r - }
$ L1 h) W0 a' I$ o5 `" E - v5 = (const char *)v3->lpVtbl->GetAdapterDisplayMode(v3, 0, (D3DDISPLAYMODE *)&v60);% f8 R; b4 `5 n
- if ( (signed int)v5 < 0 )
% A8 K) ^$ W$ l E9 p3 ]" h F8 p5 v; H - goto LABEL_27;! q9 k1 z, I4 ~5 z, R% {! Z* ?
- (*(void (__stdcall **)(_DWORD, _DWORD, signed int, char *))(**((_DWORD **)v1 + 384) + 56))(
* A ]9 C# c2 S - *((_DWORD *)v1 + 384),
( Z# X5 i5 X% w4 ]. B - 0,
& f6 m# V! E1 t% D1 t - 1,
& p% c6 v5 l, ~. ~3 m1 P - v1 + 1640);
1 F- S( z# B8 C; k9 _* R( M9 A - memset(v1 + 1584, 0, 0x38u);
+ t- _' V0 q; w9 a3 K# M - *((_DWORD *)v1 + 404) = 0;6 n' X/ C3 O" m
- *((_DWORD *)v1 + 402) = 1;
$ Z6 F* E0 _# O' W! U4 O. N - *((_DWORD *)v1 + 403) = hWnd;
! X! T* I* _& A. d( n4 w$ j* W - *((_DWORD *)v1 + 407) = 0;
: ?* m2 Q: `. @$ g8 g' H - *((_DWORD *)v1 + 399) = 1;
+ N. k; K f$ ~( S: @2 q - *((_DWORD *)v1 + 398) = 21;
% t( p2 _& G& w/ t8 F9 Y2 l - *((_DWORD *)v1 + 405) = 0;
- V, H1 x4 \8 N/ J C$ @ - *((_DWORD *)v1 + 522) = (unsigned __int16)word_558176;) R" m* q/ v2 I7 w/ l( W( F
- v6 = (const char *)word_558174;
) S @# ?; X* `2 P% B6 `- ^; L - *((_DWORD *)v1 + 523) = word_558174;
) Y. n/ w; V& X9 w) N - v7 = (const char *)*((_DWORD *)v1 + 522);) }- `5 E' m" [
- v52 = v6;
; |( F3 ?: f0 `0 n9 z; U$ } - v51 = v7;, V8 P3 h9 Q) o! \, \" c! o
- v50 = "Screen resolution is %d x %d.\n";# f5 [0 u0 u9 C- t U5 a( }
- v1[2076] = *(_DWORD *)&word_558174 == 67109632;, R, V+ k. ^ ~8 K7 }$ Z/ M- d
- v8 = (FILE *)sub_4D7E8F(v50);
( l" |- C1 F8 U7 Z; Z - fprintf(v8 + 1, v50);
p0 l1 K2 X2 y* j; i. s - v9 = *((_DWORD *)v1 + 522);
# d) s" ]$ J4 w5 B) ?6 L - v54 = (const char **)*((_DWORD *)v1 + 523);
! u! I; w X+ y+ x - v10 = v54;
' e7 _# c! d; I - *((_DWORD *)v1 + 396) = v9;
, t* {0 t9 @9 ?' u - *((_DWORD *)v1 + 397) = v10;
( x- v+ g6 V) N5 d" M - v55 = (double)v9 * 0.0009765625;
7 v) ]( k8 B l1 H7 P - v11 = v55;8 W1 j% _1 i2 ~4 q4 j0 f; \, R# V
- *((float *)v1 + 520) = v55;$ R$ U0 R6 y9 I! l1 M5 E! N
- v55 = (double)(signed int)v54 / 768.0;7 X4 x; ~( C3 ^9 G* V
- v12 = v55;9 M/ d1 @. c8 W+ Q# R6 N
- *((float *)v1 + 521) = v55;5 k2 A0 W; ]1 o7 z
- *((_DWORD *)v1 + 524) = (signed int)(v11 * 1024.0);
! H( p. r" D9 U - v52 = (const char *)1;/ e- z6 O; p8 q8 n
- v51 = (const char *)(v54 + 11);, \ \2 b1 f9 j7 I6 U5 l$ j- K
- v50 = (const char *)(v9 + 6);* r- T; G5 w7 u+ @( u) C. q
- *((_DWORD *)v1 + 525) = (signed int)(v12 * 512.0);" b3 U$ w/ g' v& D8 X I
- *((_DWORD *)v1 + 515) = 0;! h3 Z" O9 z9 ^* U
- *((_DWORD *)v1 + 517) = 1024;; ]. f* Q; `% q. |8 C/ r- P
- *((_DWORD *)v1 + 516) = 128;
+ s0 t* g6 H+ L7 x$ X- W - *((_DWORD *)v1 + 518) = 640;5 u" R9 B, Q, {5 Q, N' `
- MoveWindow(hWnd, 0, 0, (int)v50, (int)v51, (BOOL)v52);$ b* v7 w6 | \ T9 F1 z
- if ( (*(int (__stdcall **)(_DWORD, _DWORD, signed int, int, signed int, signed int))(**((_DWORD **)v1 + 384) + 48))(. u, `, ^- H/ X6 a/ f$ c( U0 P
- *((_DWORD *)v1 + 384),
6 y( v8 S1 s1 S - 0,
! ]! x# E# t/ w# w# H9 s - 1,
: X7 _, o% |! p- k0 I+ d- w+ v( G - v61,9 R2 e4 T" p& N. |( k" ]$ U& y+ ^
- 21,5 Q6 p" P( s" U
- 75) < 0 )! H% j- X2 ?# I3 V
- {4 Q1 S1 V3 H& g# ^) N$ m
- v52 = v5;
0 {/ t9 H& h6 W - v51 = v13;
$ R# R1 ~5 @7 I( i5 }$ ~! v - v55 = COERCE_FLOAT(&v51);
. t" J0 G' b- m - sub_456DD0("Direct3D initialization failed. No appropriate Depth/Stencil-Buffer-Format found.");+ }% p* T# R3 n+ u) i* B
- v50 = v47;
% x+ J! V) J/ T F5 d - v54 = &v50;
j: w8 A. Q! Z6 I# e* P - v62 = 0;7 d7 N3 u( `6 \
- sub_456DD0("cCougarGraphics::cCougarGraphics");! ^! j0 t+ E. C1 W" @
- v49 = 118;
" w+ h! Y$ e. \ - goto LABEL_28;
, I$ S! z( @7 Z8 [- n - }+ P3 |5 x+ q; E# i# Y
- v52 = "Depth/Stencil Buffer is D24S8.\n";" i, b) J" s9 ~0 X, D- B9 V, p7 p
- *((_DWORD *)v1 + 576) = 24;
" J% J8 z! m+ h/ g% P - *((_DWORD *)v1 + 577) = 8;
) Y8 M+ @7 q; t5 l8 l2 L+ [. P" A - *((_DWORD *)v1 + 406) = 75;
3 f7 K! t2 g! n* Q( \- j - v14 = (FILE *)sub_4D7E8F(v52);+ S# ]( G( z3 ]1 y4 z. ]
- fprintf(v14 + 1, v52);
6 ?9 Q5 k9 y# J: V4 H7 e4 O, f% b - *((_DWORD *)v1 + 409) = 1;
( B4 A2 ]" [* Q; M9 A - if ( dword_558178 != 4& x/ C6 U& W# \* l
- || (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384)
1 F8 p# J+ t, f# H: s - + 44))(# J# D% O9 k! i: w
- *((_DWORD *)v1 + 384),
6 {1 n1 l. y( E( P/ @2 a7 R& G - 0,
/ m$ M4 ?, H5 a. S; z - 1,
- R9 [* ?# {* r! N( X: ~# z9 o$ o - 21," p2 `, `3 l9 z4 l( a
- *((_DWORD *)v1 + 404),* Q$ g; _. x; Z) J
- 4,
6 s6 ~) d K% @7 n E1 x" ] - 0) )
+ a- g9 `3 C& D9 J# C6 G; O/ H - {, M4 c& X7 f- @1 b3 `8 P
- if ( dword_558178 != 2
' ~8 I) d1 C" R1 A: L - || (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384)
/ ^- B, k, V0 L- t9 P0 Y( Q - + 44))(0 m- x3 W: T9 a% t' C( x6 w e
- *((_DWORD *)v1 + 384),
$ m+ j, ^- a0 H - 0,
4 \$ C$ k) Y+ S - 1,
+ h' C1 ?3 T7 a& E - 21,7 h2 T2 n- a! l% R" Q3 r7 N, [. e5 `
- *((_DWORD *)v1 + 404),
, \& g' n3 a, c% g) J6 l' J1 q - 2,. R" [* W# t& _' O2 u
- 0) ); o7 N, \4 E7 {
- {# L$ s. ]( I- r: j4 Y
- if ( (unsigned int)dword_558178 > 0
7 C) A1 [# ~( g0 {4 v# A - && !(*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, const char **))(**((_DWORD **)v1 + 384) + 44))(
* c4 n. P5 r/ E2 {% j - *((_DWORD *)v1 + 384),
0 R* ~* L) g+ d2 @. Y - 0,
Z! L2 Q/ G/ S" X `; v5 W& t - 1,2 `1 `0 _8 P7 |! X
- 21,6 N3 t& U* i1 x) J( p
- *((_DWORD *)v1 + 404),. q/ w/ N) \9 u& R( D( N! @7 ^% c
- 1, j- r: E& t5 |" w( K
- &v56) )4 Z' r' ?; B# \$ h9 m0 z, E; r
- {
$ O, I' |) y y1 V6 L - v15 = (unsigned int)v56;
3 g( W& E8 E7 L% [; W; U - *((_DWORD *)v1 + 400) = 1;- T8 G x6 D" [% z5 t( V
- v16 = dword_558178;. U4 T: y% \& f/ n) Z/ a
- if ( dword_558178 >= v15 )% W- O5 C0 N& Z2 D
- v16 = v15;
[2 _( y3 V4 c2 Y: ~4 C" s - *((_DWORD *)v1 + 401) = v16 - 1;7 m% g, H1 Q5 C* @0 S2 G/ `
- if ( dword_558178 < v15 )
; K. |: [' u8 Z' C7 r) v* f - v15 = dword_558178;
! |4 M* Z3 G9 v - *((_DWORD *)v1 + 578) = v15;) L2 k3 H3 A' W( G8 w0 H
- }& ]1 D! r& |1 a# u2 I: n8 ]
- }
2 K1 m% [+ c$ o) D1 W6 S6 x0 i9 { - else* B$ `. L* ~4 e% R1 G
- {! I! H6 b- e K" _: U( j
- *((_DWORD *)v1 + 400) = 2;
: I5 F- w+ A" h# H0 L - *((_DWORD *)v1 + 578) = 2;
- y1 b1 a, K- F+ M4 X6 w - }
3 }/ C0 X/ \3 A' a8 x1 W0 K6 f - }4 @3 u( ^* O0 [: S
- else* C7 u0 q6 Z, ^$ n
- {
5 }$ [5 w5 Z, a- }* F - *((_DWORD *)v1 + 400) = 4;9 n6 w* y8 f5 M" q
- *((_DWORD *)v1 + 578) = 4;
_* y- P2 _- d# c* O- `! s- a - }7 U) K( p6 v/ `( h
- v52 = (const char *)*((_DWORD *)v1 + 578);+ A8 n/ Y5 Y* ~8 p! w% C: { _
- v17 = (FILE *)sub_4D7E8F("AntiAliasing is %d.\n");
6 z" o! ], V" V - fprintf(v17 + 1, v51);
" Z9 B& e3 t9 D9 z - v18 = *((_DWORD *)v1 + 384);4 I. M8 [- L" x! }4 }3 r8 S
- v19 = *((_DWORD *)v1 + 578) == 0;
6 F8 j# u+ k' x% K, Y5 ^ - v52 = (const char *)827611204;
. ?& n, t* w! q$ F) ?. R% K6 r( W - v51 = (const char *)3;8 |; g, v1 I: J+ [+ S
- v50 = 0;) Q& e- f; |0 L! r* p# j
- *((_DWORD *)v1 + 402) = 2 * v19 + 1;
* X: v' l; e6 P/ F: i - v20 = (*(int (__stdcall **)(int, _DWORD, signed int, int, const char *, const char *, const char *))(*(_DWORD *)v18 + 40))(
5 t$ ]3 z ~* a6 M, J0 D - v18,' ?; A) ^: G# I2 `. Z: i* C/ i4 |2 t
- 0,5 j* E/ m& |/ u! b' U8 a& p
- 1,2 `7 ]' Z& L8 f0 D
- v61,
& @3 S4 n) A4 M$ J9 a- i - v50,
, U& }$ ] ^9 [( E# X7 f - v51," p- [& ]6 ]3 |. h; `0 ?3 a
- v52);" j' ?8 Z4 n' y& @( S! x
- v21 = *((_DWORD *)v1 + 425);$ K( m" ? N8 f
- v22 = v20 < 0;% L) M" G9 ?$ U
- v23 = *((_DWORD *)v1 + 384);
8 G+ A* L |* G/ }. u - v1[2316] = !v22;
, Q" T2 f9 t0 z8 w/ Y m - v52 = v1 + 1540;
1 p* n3 Q# E c0 @5 o" w8 b - v51 = v1 + 1584;: S$ ^* n+ V$ r, E6 J; s3 ~
- v1[2317] = (v21 >> 14) & 1;: X+ K: g. D. F! j
- v5 = (const char *)(*(int (__stdcall **)(int, _DWORD, signed int, HWND, signed int, const char *, const char *))(*(_DWORD *)v23 + 64))(
2 q3 x, z9 R5 S0 ~& u: J - v23,
1 D( }- P0 {" ^( M3 B+ [ - 0,
% l2 O2 f/ @) J/ e- Q6 c+ | - 1,- z- e9 ~0 [. x9 y# |2 t6 y
- hWnd," i) ^/ t6 B+ `+ n7 R
- 64,
2 X2 M2 D2 m2 N% E0 i - v51,
$ n! X+ @) |- ~& P3 V+ p - v52);+ _8 n7 Y0 B+ D
- if ( (signed int)v5 < 0 ). V9 G l) m! B+ c) i' @8 j7 `
- goto LABEL_27;
$ h) \' C- J* q - if ( dword_558180 && ((v24 = *((_DWORD *)v1 + 425), v24 & 2) || v24 & 0x100) )3 y0 d. a' m- v$ v# C% l
- {, H9 f ~; p$ ]
- v25 = *((_DWORD *)v1 + 609);
8 v. W5 ~- L8 {4 p* U) i/ K; i - v26 = sub_418670(*((_DWORD *)v1 + 522));! p$ b$ _9 K4 z* b7 \! V4 V2 `
- v52 = (const char *)*((_DWORD *)v1 + 523);7 ^$ F' c; ~) K) w3 f
- v27 = *((_DWORD *)v1 + 609);
: j# S7 p- B# U& C+ O" f9 K+ \6 F$ w - *((_DWORD *)v1 + 496) = v26;
; m$ t7 N ^ w3 R - v28 = (const char *)sub_418670(v52);" M0 P8 @- l; T- C( M
- }- a" b: |- F. [- X) d) i& \9 f
- else; ?: D% f2 a( X9 p2 r# C9 ~$ Z
- {9 v5 c$ M7 @: S( ~2 N3 R8 L
- v28 = (const char *)*((_DWORD *)v1 + 523);/ L+ U7 n' `3 N6 b. @
- *((_DWORD *)v1 + 496) = *((_DWORD *)v1 + 522);5 k) _; G9 v8 {$ `" X& c" M
- }
" b6 P6 c( L% S/ P1 Q8 e - v29 = (const char *)*((_DWORD *)v1 + 496);
9 E4 c. ?1 v+ r! b& F - v52 = v28;
2 Q+ X, x5 a0 W# n; I6 B7 L' o& j - v51 = v29;$ h! h' x* N; O" }+ }9 \3 O
- v50 = "PostProcess Surface is %d x %d.\n";4 b B% G+ A$ {, t4 G0 S( H
- *((_DWORD *)v1 + 497) = v28;
4 ] z5 n3 W* @9 x0 q8 P - v30 = (FILE *)sub_4D7E8F(v50);
9 j* ^+ s. F# Y8 t6 c, k - fprintf(v30 + 1, v50);
5 b$ d2 ~! n* d& R( X9 _; t - (*(void (__stdcall **)(_DWORD, _DWORD, char *))(**((_DWORD **)v1 + 385) + 88))(*((_DWORD *)v1 + 385), 0, v1);% L! s9 Z; W1 h6 g
- sub_413100(v1);
1 y5 W" t$ Q+ F, R& C2 ` - sub_411D60(v1);% z9 F; Q( i$ j
- v31 = malloc(0x78u);
% n& i! c9 S, R# n - v32 = -0.5 / (double)*((signed int *)v1 + 522);( _ F* @! k7 M) T3 t, y
- *((_DWORD *)v1 + 599) = v31;: G; c% P1 I; ?1 X1 I$ c
- *((_DWORD *)v1 + 600) = 0;
! \# D! ]/ @ x7 i. I$ B - *((float *)v1 + 526) = v32;+ H8 y, P# l+ \6 e
- *((float *)v1 + 527) = -0.5 / (double)*((signed int *)v1 + 523);
7 S7 e6 C3 e/ k" W0 x3 X6 N3 S0 b - sub_411CC0(v1);
0 c% [) Y/ N3 K4 b" X+ Q - v33 = v53;1 e' c$ R. _1 a* C
- v5 = (const char *)(*(int (__stdcall **)(int, signed int, signed int, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)dword_559B7C + 104))($ l- n! b' D5 H6 y6 b5 d, v! [) o5 g
- dword_559B7C,7 D' I+ k s( l. B
- 80,
0 t3 M$ s) w6 n) N: v2 M8 S - 8,
! u9 O& b; V) l# j4 h - 258,9 y2 v& k3 s E) J' q
- 1,
2 b% j+ m0 Z2 l$ T$ j1 i - v53,
: m& V& k h9 V* n( y% d( R - 0);, _( Z7 J6 |3 x- V+ c
- if ( (signed int)v5 < 0 )+ |7 h+ X& @; V# Z
- {
! z5 Q7 S2 m" @. Y* z4 R0 Y - LABEL_27:! p/ C' V9 f: q0 [% l+ Q, y3 ?
- v52 = v5;
0 e' I' J( N- e( d2 | - v51 = v4;- I) G4 D/ s! F
- v55 = COERCE_FLOAT(&v51);+ }6 ^) Q; Q( ^1 A4 O! p2 C
- sub_456DD0("Direct3D initialization failed.");
# \/ @& J+ Y9 U! ]6 A$ Z1 ^ - v50 = v48;. M2 z( C$ i; O/ y' k _# ?1 X: ?8 ?/ o
- v54 = &v50;
' M ]3 C/ x3 Q/ i: Q9 g - v62 = 1;
5 S7 a1 H, w4 i, ` - sub_456DD0("cCougarGraphics::cCougarGraphics");
: \1 a; u( N' A - v49 = 205;4 O8 U; T* `: i9 Y, E& Y
- LABEL_28:% \5 t2 G# l; s: p% f6 n: u
- v62 = -1;
+ z$ U. }9 X0 C - sub_40CB30(1, ".\\source\\class_graphics.cpp", v49, (char)v50, (char)v51, v52);
) O9 ?& | m: \- z- Z - }4 b* h6 t& P# l; n+ L5 ?
- (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD **, _DWORD))(*(_DWORD *)*v53 + 44))(*v53, 0, 0, &v53, 0);
0 T6 d5 k" h+ \ - v58 = -1.0;" }( h1 r7 U6 t) F" ^2 J8 P# U
- *(float *)v53 = -1.0;
2 v9 H( R2 A9 u# q - v59 = 1.0;0 Z! q9 d" Y5 J1 Z' [3 h% s
- *((float *)v53 + 1) = v58;
4 e/ |8 k( ~) W+ H! W* @ - v57 = -1.0;
0 s G( t: [4 P) I0 s' Y - v58 = 1.0;2 ]1 H: o4 @0 _ Y
- *((float *)v53 + 2) = v59;
* L+ D- f" @7 _" K2 A* r# B - v59 = 1.0;; L/ e" A* R; N0 G! i
- v34 = (float *)v53;4 W( R+ f/ a! m! m
- v35 = v57;$ D; w1 ~# i/ ~' X |
- v57 = 1.0;
4 z2 a* q* J# t+ Z0 q - v36 = v58;
! {- w* ?3 t$ z - *((float *)v53 + 5) = v35;
5 l: W1 H+ f6 b9 S- s; g+ ?1 h - v37 = v59;1 c5 {4 W; X+ S! t) {* T
- v59 = 1.0;
" M, w0 `6 p) Q8 u8 v" A) x - v34[6] = v36;
. O2 g# I! j0 K t* m1 T - v38 = v57;
+ B- a& S0 N, D3 y9 b" Z5 |/ P; k% T - v58 = -1.0;
+ i' B$ b0 `/ G8 N) ^* V! u4 i" Y - v34[7] = v37;
: |1 `3 y6 W8 B1 s3 r$ G3 F - v39 = v58;* z+ l {) z. W1 ]& {6 i; u, c
- v57 = 1.0;
+ H2 ~4 B: H, C9 l0 ^ - v58 = 1.0;" i( k G! R5 g; g; q& x! T
- v40 = (float *)v53;1 Q, O. g# I3 J% X
- *((float *)v53 + 10) = v38;3 e! U9 W% X# P, l* m& \' J6 G
- v41 = v59;3 |5 e% Y; @ V7 O
- v59 = 1.0;
7 n Z' t) W6 }; A" U - v40[11] = v39;
/ }6 U7 L; g' _9 Y - v42 = v57;
! t9 I' P; {: ], { - v40[12] = v41;
B" ]& K6 D; X# N: p b7 c) P - v43 = v58;
+ y( }% Z9 D% J0 w - v44 = (float *)v53;1 J; w+ a$ |. [9 z9 U
- *((float *)v53 + 15) = v42;" o$ f( g" z3 w' i- m: ~
- v45 = v59;2 J) n; \/ z# ^1 [
- v44[16] = v43;4 [3 w/ C3 l Z, f: C9 I9 W
- v44[17] = v45;. V' r3 M( u' W7 A( R" B4 R! {0 t
- *((float *)v53 + 3) = 0.000099999997;
U8 `9 D! t a - *((float *)v53 + 4) = 1.0001;7 z! v2 I- m4 R8 E" p6 L- L
- *((float *)v53 + 8) = 0.000099999997;5 ^8 n/ h9 v; E$ R. [4 a% L4 ]
- *((float *)v53 + 9) = 0.000099999997;+ e: ]% U7 R K4 @5 G. r
- *((float *)v53 + 13) = 1.0001;0 `0 L! N( |( M9 j5 w% @. n- ?
- *((float *)v53 + 14) = 1.0001;
4 i1 p2 V" H# v/ K - *((float *)v53 + 18) = 1.0001;
4 F+ m+ q1 L9 S; U3 u - *((float *)v53 + 19) = 0.000099999997;
+ g6 y) f3 N# l% F g* l1 \ - (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v33 + 48))(*v33); W7 p8 c8 j$ r2 G
- return 0;5 C0 k+ S. B6 V; ?: [4 h. o1 T
- }
复制代码 3 a& y+ j1 x3 \3 r% r; x* w- u
用Cheatengin寻找一个字幕之后,在以下地方断下$ ~2 k3 T* _. c& i: U+ ]7 P
- <div>ocd.exe+425B9 - 0FB6 D9 - movzx ebx,cl</div><div>004425B9</div>
复制代码
# j4 V8 U3 _+ j$ p: Q, L5 h6 O! ]; r3 l/ ]2 B* X0 V2 q
在ida pro下查看,是这个函数,从代码看a2字符像是索引号。
! ]0 _) D5 ]6 ]6 G9 L& r稍后需要仔细分析。字幕显示函数应该在本函数上下。
5 }+ U7 ~' h6 V3 d5 Z- int __thiscall sub_442510(unsigned __int8 **this, int a2)
复制代码 & }6 @9 \0 D) n+ v- M
4 S; i. E( L" R
& r$ D3 L' i; T |