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