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