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