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