本帖最后由 shane007 于 2023-8-23 13:25 编辑
1 D+ }8 e8 C; u# Y% I. c3 ^, [
$ J k6 x( O* R) T" H+ ?) CSDL是4大图形API之一,其他几个是directx,directdraw,opengl+ X7 [! H8 j) [; c2 g$ {& k
8 }) O: _$ }% [
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。2 {4 J; U, q* [) f5 K
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
, E& s' P/ F9 C2 D; m( `游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
7 n l' Z |& a N但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。# G# Z* e, H2 J! A; k7 E: @: _, U
9 e" l) y z! K
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。; x' p6 V W7 w. h& f
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。/ B; F/ H! D% K/ ]7 r% E8 a' z
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)6 E+ I6 b" l* Z8 ^; `
为了方便观看,用excel做成层级调用关系图。
5 W1 N' x8 ]# |下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。, Q/ V' ]6 E; Z& ~
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
7 B9 @7 d( u5 _; g4 y# D' d4 ]' C4 a7 p9 v( p) q. n
- 对话字幕断点处2 l- j/ L% [9 G( {
- % e3 ?* F; {: ?6 C
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
" p0 C- y) W3 _/ L t
! b# o5 U4 {& g' _: p# z- 对话字幕显示函数+ S- T4 A' T6 Q& D
5 `4 `7 S. }8 o" B6 M0 @, e- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 7 H/ b5 Z9 d; X: w. H- E1 q+ Y
* n( n) y" d1 l' h' J" N/ f9 ]% T4 L* I4 s- W5 L' J* d
- r# t8 v6 f( a$ u+ W
2 r+ B$ A. I8 X( o0 V |