本帖最后由 shane007 于 2023-8-23 13:25 编辑
6 E* v1 V$ v' H9 S1 z4 d) R: Z- s
( _* z% X& z( [# E* ~* ~7 P& MSDL是4大图形API之一,其他几个是directx,directdraw,opengl( W! q; Y5 i7 \; X- I+ F
$ X# j0 `* D: |2 W% |" B6 a5 R
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
2 \+ R* i, J. C4 V1 m8 I, J打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
& g. j# J. _5 H游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
+ v- H8 a% F" Z2 x- i( b9 k4 C但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。3 e$ |) L0 [/ P; E
6 N. ]/ Z" e3 \# O. |% M! ~最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。$ E" x3 `6 z. S
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
! I2 Z6 [6 P( i' u& V(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)( ~2 c) S1 u2 P
为了方便观看,用excel做成层级调用关系图。+ `1 p" Z- J: f7 h* v7 G2 R
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
/ g9 s8 e0 D! ]& c6 P9 n( G(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
' Q) E' ], A2 i3 j0 q0 u! L% E
8 x8 D+ L& ?* d. y! ^- 对话字幕断点处
6 K8 s* K1 V+ Y" F
" I: y% G: O3 [/ M( I. y- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
3 z& G2 i3 f( v( ~5 ]% F u1 g9 B - 5 ~1 `& h2 Z w7 @& k1 ]8 Y
- 对话字幕显示函数
( R a" `6 @& d4 E+ c9 H# u& m - 3 u, A% v* p6 E9 ]; i e
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 ) Q F$ t+ M+ O6 A: |
r& x6 q# E6 L4 V1 o* C$ W
9 s H0 x% d6 i) b7 H$ O' ~
) H1 k$ D- H7 V" t% l! ~; X# c) t
|