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