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