冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2023-8-25 15:32
标题: 【Directx9游戏汉化 #3】 金发美女(So Blonde) 寻找CreateDevice
本帖最后由 shane007 于 2023-8-25 15:49 编辑
/ d" ?' O: {( t! Y0 ]% W$ K, q4 V* x' l
这是一个Directx9的游戏,不过对Directx9的初始化,并不是在exe里完成的,
  e) k2 g2 q2 D1 S1 K而是在RenderSystem_Direct3D9.dll里完成的。
# ]: D' f1 ^; x" n1 P3 w' h由于这个原因,本游戏用dxwnd.exe没法实现窗口化(也许是还没找对方法),需要手工修改才行。# P. b4 q' O  c
要修改窗口化,就要寻找调用CreateDevice的地方。
" T0 G1 Z: b8 k! p( N$ K4 g
. N# @: s# o2 v5 {6 E( Z; `$ {! z因为CreateDevice是com接口的第17个函数,因此调用处的代码不外以下几种类型,# s4 M" e" c( k, p: P
逐个在ida pro的反汇编窗口中检索一下就行。(此方法没见别人公布过,算是我的发明吧。)
) r# @& k( v- B* }9 D
  1. call    dword ptr [eax+40h]
    5 S7 ^0 B( k- J; T2 T
  2. call    dword ptr [ebx+40h]
    8 ]7 D9 T6 U" J- L, \! C9 x2 c8 Q
  3. call    dword ptr [ecx+40h]1 c4 s: U/ G: k8 i
  4. call    dword ptr [edx+40h]
    ( r! \* o; X$ q/ Z1 B! W
复制代码

* j0 ~) R: Q* w& k: Z( p/ j
9 _# F; ?" c/ a4 P搜寻结果如下
* P% n% V' e: B, c$ A* U
  1. call    dword ptr [eax+40h]  2处 OK+ u! C1 K/ N1 Q+ O1 d
  2. call    dword ptr [ebx+40h]  没有; D0 R, a7 C( t/ b# X
  3. call    dword ptr [ecx+40h]  好几处,参数个数不对2 b. c5 G" E& b2 Q$ _) C) A3 _. J
  4. call    dword ptr [edx+40h]  1处,参数个数不对
复制代码

7 L& a7 ^9 \* Y1 y0 x# q* \) ?* k8 T( F9 x1 P% }
结论很简单,call    dword ptr [eax+40h] 的2处,参数个数正确,应该就是调用处。( h' K) M  ~' o$ y  ]7 ?6 Y( }: d+ ~
代码如下
" Q) P' {) e% ]0 ?# M# j第1处
  1. .text:10017F06 8D 4C 24 10                                lea     ecx, [esp+5C8h+var_5B8]
    : q/ u& k" C2 M5 z1 x: X
  2. .text:10017F0A 51                                         push    ecx
    2 h0 ]- S+ t. r/ L# n
  3. .text:10017F0B 8B 8D B0 00 00 00                          mov     ecx, [ebp+0B0h]% J4 m2 I2 F) x! ?
  4. .text:10017F11 57                                         push    edi
    # A0 z9 _5 ~# c, L% w4 N
  5. .text:10017F12 52                                         push    edx
    8 j4 ~. e- J! \: ?, [% ^
  6. .text:10017F13 8B 54 24 20                                mov     edx, [esp+5D4h+var_5B4]
    7 M* ~: q" O) V# j8 j
  7. .text:10017F17 51                                         push    ecx
    ( M' s  O# _  b' V& `
  8. .text:10017F18 53                                         push    ebx5 z/ L0 u7 n1 a- _4 E: S
  9. .text:10017F19 52                                         push    edx
    8 y) g# J" v2 v1 u% h" ^
  10. .text:10017F1A 56                                         push    esi
    : n" Y+ p, B  i$ M7 y: A
  11. .text:10017F1B FF 50 40                                   call    dword ptr [eax+40h]
复制代码

1 t5 C& j& Z1 R7 Z: e" E" x# w
7 y$ z# x6 s2 Z% A1 N. ^
4 A5 ]& T7 H; H, w) [第2处6 E6 B& N; s+ D$ f% P2 N
  1. .text:10017F2F 8D 4C 24 10                                lea     ecx, [esp+5C8h+var_5B8]4 h% X9 w0 i& L$ P$ m) h7 Y5 u
  2. .text:10017F33 51                                         push    ecx
    7 ?! x1 z# s9 U4 k2 T# z+ }. |( ^. ~
  3. .text:10017F34 8B 8D B0 00 00 00                          mov     ecx, [ebp+0B0h]
    / u4 u' u! I  y8 q* G# S0 @  r
  4. .text:10017F3A 57                                         push    edi
    2 ?  I7 }* r7 \
  5. .text:10017F3B 52                                         push    edx
    8 x, S- f6 M* Y( C  L. U
  6. .text:10017F3C 8B 54 24 20                                mov     edx, [esp+5D4h+var_5B4]
    * P$ M+ v! c/ C8 j
  7. .text:10017F40 51                                         push    ecx) H( O, R, t; o/ D6 s* i7 O3 E, ^
  8. .text:10017F41 53                                         push    ebx1 ~# w5 x; ^; y  b1 V0 F" g- e' c- L
  9. .text:10017F42 52                                         push    edx
    " P0 n8 ^5 U3 j; s3 i$ X% n9 W
  10. .text:10017F43 56                                         push    esi
    ' d' `' {7 d' K; |* }* @/ x
  11. .text:10017F44 FF 50 40                                   call    dword ptr [eax+40h]
复制代码
" S0 |: b7 G: i) ?: a  D

4 u4 }0 Z% H+ [! B) q
6 k7 c) V2 M5 b- Y+ i补充,CreateDevice也有可能是以下形式8 U" c3 Q" i. o7 x
  1. .text:0041640D                 lea     ebp, [esi+604h]
    1 Z* D. H" a- T
  2. .text:00416413                 push    ebp
    1 H% I% k( c3 O8 V7 I' C2 r& T( M! t# H
  3. .text:00416414                 lea     ecx, [esi+630h]) {4 X: `1 p3 h# ~2 Q
  4. .text:0041641A                 push    ecx$ Z/ E) @) ~' p
  5. .text:0041641B                 mov     [esi+90Dh], dl' O; _$ S& ^' a  s4 {% T+ P- m
  6. .text:00416421                 mov     ecx, hWnd
    # {: F+ Y8 O: A6 g8 b( C  Q; I, l
  7. .text:00416427                 mov     edx, [eax], k6 H1 |3 B+ U! T0 D7 P  w; y+ ^0 c
  8. .text:00416429                 mov     edx, [edx+40h]# d, q; }" Y5 d6 h1 m
  9. .text:0041642C                 push    40h
    ! }1 \2 n, [8 P. I2 V
  10. .text:0041642E                 push    ecx, U8 `0 f% o+ J
  11. .text:0041642F                 push    1
    3 T+ T) Q0 u: b0 f6 L- X4 L
  12. .text:00416431                 push    ebx
    & _& @5 L" b/ M) \
  13. .text:00416432                 push    eax4 P0 u) j, r6 O3 c$ z; Y6 x
  14. .text:00416433                 call    edx
复制代码

; t- S4 V3 g' C5 w- _) W+ T6 u* W. M9 t7 z" C# }+ ^
5 o( E& i& k# A; \

: a, I% Z0 l# n' d
# g: x! S6 H; F9 h6 W& @




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