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