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