冒险解谜游戏中文网 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
call dword ptr [eax+40h]
; W: T! g* ]1 q) T0 @( v
call dword ptr [ebx+40h]
9 m3 X, d2 S- i9 e _5 I1 ~
call dword ptr [ecx+40h]
2 r& J$ [/ Q5 G" ~' [
call dword ptr [edx+40h]
- J% f# A! [) }5 F9 j' W1 G
复制代码
& _3 l: ~1 t( }5 D
9 a; @1 S) q3 @) F$ y s
搜寻结果如下
9 n6 L9 V1 Y1 [1 k
call dword ptr [eax+40h] 2处 OK
+ F, w* c. e+ l& A/ k8 m
call dword ptr [ebx+40h] 没有
P2 J/ ~" f+ G0 @5 W9 u5 A
call dword ptr [ecx+40h] 好几处,参数个数不对
: f3 z F2 |4 E3 ]6 h
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处
.text:10017F06 8D 4C 24 10 lea ecx, [esp+5C8h+var_5B8]
8 c2 y* @& e* ?5 e
.text:10017F0A 51 push ecx
+ g8 y- a2 ], G0 x
.text:10017F0B 8B 8D B0 00 00 00 mov ecx, [ebp+0B0h]
( G0 A) h' Y6 T A `
.text:10017F11 57 push edi
( u$ Z9 z- w% l0 W6 C; |: S
.text:10017F12 52 push edx
; k, \) ?. C! I, i# L3 K
.text:10017F13 8B 54 24 20 mov edx, [esp+5D4h+var_5B4]
) @% h) q& q3 O( J' X% P* l
.text:10017F17 51 push ecx
! k) s0 }' F7 O/ [: m& h& X8 q/ E4 v
.text:10017F18 53 push ebx
3 `* b5 s, C! I( v; B8 t
.text:10017F19 52 push edx
% w; V7 J% \$ L( h A5 X! T' F
.text:10017F1A 56 push esi
+ _8 Q+ u$ e9 W8 F' `
.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
.text:10017F2F 8D 4C 24 10 lea ecx, [esp+5C8h+var_5B8]
+ y* j& N+ r1 |9 J+ ^. O
.text:10017F33 51 push ecx
4 n% n' W1 }4 [
.text:10017F34 8B 8D B0 00 00 00 mov ecx, [ebp+0B0h]
8 Q- v, ?, C/ W) J# W% Q/ V
.text:10017F3A 57 push edi
$ ~0 c! k6 \8 S7 j
.text:10017F3B 52 push edx
" H2 i. V9 e- n
.text:10017F3C 8B 54 24 20 mov edx, [esp+5D4h+var_5B4]
5 e# a% o! k0 M$ W. x
.text:10017F40 51 push ecx
- r4 i# @1 [6 J$ a6 V
.text:10017F41 53 push ebx
4 K \) U0 f* @' r
.text:10017F42 52 push edx
b e/ W9 K3 I, v% v7 q# m
.text:10017F43 56 push esi
f. Y9 t2 ]7 E% E& }- ~2 w
.text:10017F44 FF 50 40 call dword ptr [eax+40h]
复制代码
7 _0 o" K* _" P1 I8 l
6 ]# Z; q: R6 X( U6 c
. `1 }6 W) O+ M" l
补充,CreateDevice也有可能是以下形式
1 H E+ k* \4 [1 [. l
.text:0041640D lea ebp, [esi+604h]
/ R! H% z1 i" ~6 J4 ?% b3 D
.text:00416413 push ebp
/ {$ V# F7 O$ z7 p
.text:00416414 lea ecx, [esi+630h]
|9 k& E/ j" M: h* f* [* c0 d" X5 e/ R
.text:0041641A push ecx
0 ^' {/ c0 |: m" W' p
.text:0041641B mov [esi+90Dh], dl
1 {' G' l! J; p c
.text:00416421 mov ecx, hWnd
: k# u+ {) d& L$ I7 j
.text:00416427 mov edx, [eax]
, U( r6 M6 n+ d' S: B3 d
.text:00416429 mov edx, [edx+40h]
; u+ P( N' H2 z' D3 ~6 E% T
.text:0041642C push 40h
% L/ |. S) e9 l' ?9 t7 b7 C& V
.text:0041642E push ecx
: \6 s2 M; O# Q% }
.text:0041642F push 1
, }' e! S+ b! q- Y) @) m
.text:00416431 push ebx
+ C0 D- Q' v* i8 @$ w! z
.text:00416432 push eax
9 X/ w4 o u& j% U9 o6 K
.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