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