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