本帖最后由 shane007 于 2023-8-23 13:25 编辑
4 ]5 t5 S0 _1 x. c: \& M3 g* w" G% a; C3 b
SDL是4大图形API之一,其他几个是directx,directdraw,opengl
y1 N2 O# \& m( \: C" N) V1 `! G2 X1 z
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
$ r0 l& |8 k# S6 K$ u& @ K打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。) R7 j% t7 l ]# X
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
1 x8 e5 R5 G! E; g) r o但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。$ g* ?, O# x" f) h# z) [
) O* z9 e' j2 e" ^
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。: K7 K8 e" W% w9 I m0 Y6 ]
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。* H( Z3 ?0 @% `" M$ Y
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便). e2 w& v' D" ^" d
为了方便观看,用excel做成层级调用关系图。 q' ~* J2 X" O6 S
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
& L0 T4 I, `/ x7 L(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
1 L8 v! L* y( o6 Z' D0 b1 Z
3 u, v3 Q/ E: K# R8 [1 n% m; U( F- 对话字幕断点处& S, r9 A+ y: O3 t1 ?& z6 V6 B
* o2 P. A" b/ S- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
+ i- M& {% s! e - [5 b K. Q2 r0 A v L
- 对话字幕显示函数
0 E& N* t! [/ }5 Z, l/ s7 X9 i
9 a1 r: l N- s. `- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 6 x- J" f. Y6 M+ @
8 d% B! R# \% _9 T+ w2 n4 g
9 K' D* p" s1 v( ?0 T% s+ U. _6 v' A1 l; o
/ Y/ K! a& M) z# P6 Z1 z3 h |