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