冒险解谜游戏中文网 ChinaAVG

标题: 【Directx9游戏汉化 #3】 金发美女(So Blonde) 寻找CreateDevice [打印本页]

作者: shane007    时间: 2023-8-25 15:32
标题: 【Directx9游戏汉化 #3】 金发美女(So Blonde) 寻找CreateDevice
本帖最后由 shane007 于 2023-8-25 15:49 编辑 8 g4 M9 G4 |  m
7 }5 i8 j, J7 Z; S: ]: u( n
这是一个Directx9的游戏,不过对Directx9的初始化,并不是在exe里完成的,' P& N2 n5 `5 J: X9 `( q/ A
而是在RenderSystem_Direct3D9.dll里完成的。( R' }( n- B' g7 F
由于这个原因,本游戏用dxwnd.exe没法实现窗口化(也许是还没找对方法),需要手工修改才行。+ v- v. \; g# i: K# v, N: Y5 C
要修改窗口化,就要寻找调用CreateDevice的地方。' i1 u/ T& A7 T  ]$ c: o

. l4 p3 ^. Q  n  U& w7 Z因为CreateDevice是com接口的第17个函数,因此调用处的代码不外以下几种类型,
8 Q4 _8 e9 [8 R6 v1 d5 n4 b, G逐个在ida pro的反汇编窗口中检索一下就行。(此方法没见别人公布过,算是我的发明吧。)
& {0 ~, c  L5 |3 k7 q' I# J! ]5 q
  1. call    dword ptr [eax+40h]
    ; W: T! g* ]1 q) T0 @( v
  2. call    dword ptr [ebx+40h]
    9 m3 X, d2 S- i9 e  _5 I1 ~
  3. call    dword ptr [ecx+40h]
    2 r& J$ [/ Q5 G" ~' [
  4. call    dword ptr [edx+40h]
    - J% f# A! [) }5 F9 j' W1 G
复制代码

& _3 l: ~1 t( }5 D9 a; @1 S) q3 @) F$ y  s
搜寻结果如下
9 n6 L9 V1 Y1 [1 k
  1. call    dword ptr [eax+40h]  2处 OK+ F, w* c. e+ l& A/ k8 m
  2. call    dword ptr [ebx+40h]  没有  P2 J/ ~" f+ G0 @5 W9 u5 A
  3. call    dword ptr [ecx+40h]  好几处,参数个数不对: f3 z  F2 |4 E3 ]6 h
  4. call    dword ptr [edx+40h]  1处,参数个数不对
复制代码
" ]9 A, L- D9 s# q: }

) z( G9 \/ R9 J& ~( F结论很简单,call    dword ptr [eax+40h] 的2处,参数个数正确,应该就是调用处。
6 C& D8 t8 B* Q) u3 ^7 ~  Z) x; L代码如下
; s1 ?  V! d/ l- P第1处
  1. .text:10017F06 8D 4C 24 10                                lea     ecx, [esp+5C8h+var_5B8]
    8 c2 y* @& e* ?5 e
  2. .text:10017F0A 51                                         push    ecx+ g8 y- a2 ], G0 x
  3. .text:10017F0B 8B 8D B0 00 00 00                          mov     ecx, [ebp+0B0h]
    ( G0 A) h' Y6 T  A  `
  4. .text:10017F11 57                                         push    edi
    ( u$ Z9 z- w% l0 W6 C; |: S
  5. .text:10017F12 52                                         push    edx
    ; k, \) ?. C! I, i# L3 K
  6. .text:10017F13 8B 54 24 20                                mov     edx, [esp+5D4h+var_5B4]
    ) @% h) q& q3 O( J' X% P* l
  7. .text:10017F17 51                                         push    ecx! k) s0 }' F7 O/ [: m& h& X8 q/ E4 v
  8. .text:10017F18 53                                         push    ebx
    3 `* b5 s, C! I( v; B8 t
  9. .text:10017F19 52                                         push    edx
    % w; V7 J% \$ L( h  A5 X! T' F
  10. .text:10017F1A 56                                         push    esi
    + _8 Q+ u$ e9 W8 F' `
  11. .text:10017F1B FF 50 40                                   call    dword ptr [eax+40h]
复制代码
: V. W5 }& ?, X2 x7 E/ F) k+ o

" n/ n3 [6 t6 D: ?$ n" n, R. ]2 K& [6 h! e+ P9 M1 V
第2处
2 {) ?, p) t, x3 |: [2 S
  1. .text:10017F2F 8D 4C 24 10                                lea     ecx, [esp+5C8h+var_5B8]+ y* j& N+ r1 |9 J+ ^. O
  2. .text:10017F33 51                                         push    ecx4 n% n' W1 }4 [
  3. .text:10017F34 8B 8D B0 00 00 00                          mov     ecx, [ebp+0B0h]
    8 Q- v, ?, C/ W) J# W% Q/ V
  4. .text:10017F3A 57                                         push    edi
    $ ~0 c! k6 \8 S7 j
  5. .text:10017F3B 52                                         push    edx" H2 i. V9 e- n
  6. .text:10017F3C 8B 54 24 20                                mov     edx, [esp+5D4h+var_5B4]5 e# a% o! k0 M$ W. x
  7. .text:10017F40 51                                         push    ecx- r4 i# @1 [6 J$ a6 V
  8. .text:10017F41 53                                         push    ebx
    4 K  \) U0 f* @' r
  9. .text:10017F42 52                                         push    edx  b  e/ W9 K3 I, v% v7 q# m
  10. .text:10017F43 56                                         push    esi  f. Y9 t2 ]7 E% E& }- ~2 w
  11. .text:10017F44 FF 50 40                                   call    dword ptr [eax+40h]
复制代码

7 _0 o" K* _" P1 I8 l6 ]# Z; q: R6 X( U6 c
. `1 }6 W) O+ M" l
补充,CreateDevice也有可能是以下形式
1 H  E+ k* \4 [1 [. l
  1. .text:0041640D                 lea     ebp, [esi+604h]/ R! H% z1 i" ~6 J4 ?% b3 D
  2. .text:00416413                 push    ebp/ {$ V# F7 O$ z7 p
  3. .text:00416414                 lea     ecx, [esi+630h]  |9 k& E/ j" M: h* f* [* c0 d" X5 e/ R
  4. .text:0041641A                 push    ecx
    0 ^' {/ c0 |: m" W' p
  5. .text:0041641B                 mov     [esi+90Dh], dl1 {' G' l! J; p  c
  6. .text:00416421                 mov     ecx, hWnd
    : k# u+ {) d& L$ I7 j
  7. .text:00416427                 mov     edx, [eax], U( r6 M6 n+ d' S: B3 d
  8. .text:00416429                 mov     edx, [edx+40h]
    ; u+ P( N' H2 z' D3 ~6 E% T
  9. .text:0041642C                 push    40h
    % L/ |. S) e9 l' ?9 t7 b7 C& V
  10. .text:0041642E                 push    ecx: \6 s2 M; O# Q% }
  11. .text:0041642F                 push    1, }' e! S+ b! q- Y) @) m
  12. .text:00416431                 push    ebx
    + C0 D- Q' v* i8 @$ w! z
  13. .text:00416432                 push    eax9 X/ w4 o  u& j% U9 o6 K
  14. .text:00416433                 call    edx
复制代码
% K5 |/ f+ v# U( H: @
, v; l. `  L3 a( h
5 [* k+ ^) m# E* }) o
8 O$ d9 o& K# ?; W4 ^
/ j) f/ T3 q0 R, I9 B





欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2