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