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