冒险解谜游戏中文网 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
call dword ptr [eax+40h]
5 S7 ^0 B( k- J; T2 T
call dword ptr [ebx+40h]
8 ]7 D9 T6 U" J- L, \! C9 x2 c8 Q
call dword ptr [ecx+40h]
1 c4 s: U/ G: k8 i
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
call dword ptr [eax+40h] 2处 OK
+ u! C1 K/ N1 Q+ O1 d
call dword ptr [ebx+40h] 没有
; D0 R, a7 C( t/ b# X
call dword ptr [ecx+40h] 好几处,参数个数不对
2 b. c5 G" E& b2 Q$ _) C) A3 _. J
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处
.text:10017F06 8D 4C 24 10 lea ecx, [esp+5C8h+var_5B8]
: q/ u& k" C2 M5 z1 x: X
.text:10017F0A 51 push ecx
2 h0 ]- S+ t. r/ L# n
.text:10017F0B 8B 8D B0 00 00 00 mov ecx, [ebp+0B0h]
% J4 m2 I2 F) x! ?
.text:10017F11 57 push edi
# A0 z9 _5 ~# c, L% w4 N
.text:10017F12 52 push edx
8 j4 ~. e- J! \: ?, [% ^
.text:10017F13 8B 54 24 20 mov edx, [esp+5D4h+var_5B4]
7 M* ~: q" O) V# j8 j
.text:10017F17 51 push ecx
( M' s O# _ b' V& `
.text:10017F18 53 push ebx
5 z/ L0 u7 n1 a- _4 E: S
.text:10017F19 52 push edx
8 y) g# J" v2 v1 u% h" ^
.text:10017F1A 56 push esi
: n" Y+ p, B i$ M7 y: A
.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
.text:10017F2F 8D 4C 24 10 lea ecx, [esp+5C8h+var_5B8]
4 h% X9 w0 i& L$ P$ m) h7 Y5 u
.text:10017F33 51 push ecx
7 ?! x1 z# s9 U4 k2 T# z+ }. |( ^. ~
.text:10017F34 8B 8D B0 00 00 00 mov ecx, [ebp+0B0h]
/ u4 u' u! I y8 q* G# S0 @ r
.text:10017F3A 57 push edi
2 ? I7 }* r7 \
.text:10017F3B 52 push edx
8 x, S- f6 M* Y( C L. U
.text:10017F3C 8B 54 24 20 mov edx, [esp+5D4h+var_5B4]
* P$ M+ v! c/ C8 j
.text:10017F40 51 push ecx
) H( O, R, t; o/ D6 s* i7 O3 E, ^
.text:10017F41 53 push ebx
1 ~# w5 x; ^; y b1 V0 F" g- e' c- L
.text:10017F42 52 push edx
" P0 n8 ^5 U3 j; s3 i$ X% n9 W
.text:10017F43 56 push esi
' d' `' {7 d' K; |* }* @/ x
.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
.text:0041640D lea ebp, [esi+604h]
1 Z* D. H" a- T
.text:00416413 push ebp
1 H% I% k( c3 O8 V7 I' C2 r& T( M! t# H
.text:00416414 lea ecx, [esi+630h]
) {4 X: `1 p3 h# ~2 Q
.text:0041641A push ecx
$ Z/ E) @) ~' p
.text:0041641B mov [esi+90Dh], dl
' O; _$ S& ^' a s4 {% T+ P- m
.text:00416421 mov ecx, hWnd
# {: F+ Y8 O: A6 g8 b( C Q; I, l
.text:00416427 mov edx, [eax]
, k6 H1 |3 B+ U! T0 D7 P w; y+ ^0 c
.text:00416429 mov edx, [edx+40h]
# d, q; }" Y5 d6 h1 m
.text:0041642C push 40h
! }1 \2 n, [8 P. I2 V
.text:0041642E push ecx
, U8 `0 f% o+ J
.text:0041642F push 1
3 T+ T) Q0 u: b0 f6 L- X4 L
.text:00416431 push ebx
& _& @5 L" b/ M) \
.text:00416432 push eax
4 P0 u) j, r6 O3 c$ z; Y6 x
.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