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