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