本帖最后由 shane007 于 2023-8-23 13:25 编辑
5 C7 r* n+ U+ U3 F& m6 W' h! p
. p. c) ]/ A- l4 fSDL是4大图形API之一,其他几个是directx,directdraw,opengl0 c: e7 t7 L7 Z) S0 [% N* d3 K. T
8 }' H% K0 Z6 [9 E+ ^
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。6 d( K' b3 Y1 h! O0 w
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。 H& }. L% Q5 p6 C1 V
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。9 d( h( i! |- G: Q
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
3 E1 K- x/ k9 W
7 [- L* T# q, T$ C% l/ ?最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。5 d8 H+ J! J$ Q3 M; N. e
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
8 D, i" f% y, h1 m% m0 x$ ^(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
$ `. [+ U0 {( B u5 [为了方便观看,用excel做成层级调用关系图。
/ P, M1 Z; X9 N( m4 }5 U' ?! ]* w下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。; o$ ^' y L4 K6 ~ U! ?1 j
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)6 X7 u( G" g. H f
$ G8 q, r# V( ]) D- 对话字幕断点处( J& I( p6 \1 P8 I2 U( I
% L+ r% m: v+ x- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |8 K R5 |! t3 [' w5 @
4 ~* w4 h0 w! ~/ S5 ~- 对话字幕显示函数
) m$ b# n/ o: [3 u3 O - + R9 e: J% H) y# _$ J
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 2 `6 l$ U. G5 @9 @( |' r" l
9 |' I' w/ U9 \% Z
4 H3 A k* g: q! v% ^
1 U- v1 M3 _9 m! i% _6 f. o, W. \2 M" c
|