本帖最后由 shane007 于 2023-8-23 13:25 编辑
% j& ?$ h: s: s& G; z
1 @& {* j9 t& G3 j oSDL是4大图形API之一,其他几个是directx,directdraw,opengl
: S6 ?2 h+ o$ \" W9 {$ m) A5 U2 _8 d) K
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。; Y6 M4 n1 \8 Z+ o$ C' d9 d
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。7 l% P& N4 S7 m& M/ y
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
( _. ?8 [' H' v3 p- W但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。& ~, r0 f3 s; p' C6 y% \4 L p% \1 g
- Z7 M& F1 Z2 L9 F, d" A
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。) l! X# H" L% i* ~& k" U$ T, \
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。; D% c: j/ f; T6 n1 T
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
4 a6 U, {3 ?, v2 g为了方便观看,用excel做成层级调用关系图。
9 K" M' a* e' n- l0 o( L2 G/ }/ F下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
1 H+ u/ ?& `- l1 Z: i8 T' W(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)% q' y& `2 T5 o b3 J% Q/ W
) u B3 j0 M* F: ]
- 对话字幕断点处& @0 ~1 W9 v. y! `# G
- 5 g0 Z4 z0 R; u- E
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |1 N$ w1 a1 ~/ [* W$ g
- % T) Y0 D2 P- R: u1 S% c
- 对话字幕显示函数
w2 ?" a2 t4 l* _
5 V$ r$ \% P; S/ `, ]- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 * {& ~ G, a# ]3 h5 f" R0 ^
3 I5 P _( k# k \
0 V2 \0 C- U: Q4 o. I* _: V: W
1 b' C/ q. Z; o4 k, P
* m/ ?2 ~( w& W* R5 L. g0 C |