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