本帖最后由 shane007 于 2023-8-23 13:25 编辑
9 y/ K, s6 H9 e" f5 i0 n& V& C' Z2 ^/ G- F' P! O
SDL是4大图形API之一,其他几个是directx,directdraw,opengl+ I" |- @+ j3 u5 |, Q. I+ x
0 f& }+ K$ P' n+ I& Y0 j' E: F
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
( _9 y" R$ Q8 O打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
! L/ J0 W3 E1 u# ^3 }( ~游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
! h( I4 D8 s, e2 Z b: @5 Q但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
& O7 @+ d! r+ {# X+ h: x5 r/ o# o( T2 y( L( N4 U
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。( H; B+ M& x5 F5 z9 I
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
: k2 A8 c9 m b8 V0 A(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
9 c) z. C2 c0 t# j0 z. j! y4 C为了方便观看,用excel做成层级调用关系图。- U3 n+ { h; S8 k c' u5 ]
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。4 M" O/ L* {7 P# g
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)1 n+ [! @# p* p
1 b: S+ w' H8 p" I
- 对话字幕断点处# x/ {: l6 _4 Y7 h M7 I
- $ o& `# E6 b) _3 D9 Z* j4 S6 q- ?
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; | W% T1 J( k: R! W
* T! m# j* q7 h$ T- 对话字幕显示函数4 `" j g7 j$ ~5 l& R3 Q, o7 R
- 3 r2 ?) s& f" }% I1 c
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 9 k1 a" F" h: Q- Q
2 `8 d# g% E7 a9 o
- ~; B3 y% }: |$ K7 E& C- ^6 e+ |( _
7 d+ h$ z$ e. U8 ? D& ]8 | K7 h7 ?: F i+ W
|