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