本帖最后由 shane007 于 2023-8-23 13:25 编辑 , W+ e0 [7 I% k8 k, w# @9 R. \
, d; i8 h2 O2 j+ x6 I
SDL是4大图形API之一,其他几个是directx,directdraw,opengl: \) M( F. A2 f0 w8 E5 k3 {
E' ~& C: C! ~1 P9 `8 [! i. F' S2 p* e
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
: ~" j _6 I9 k3 M6 s打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
# ]6 g- I1 |8 f) b9 V) C游戏界面是图片,图片的替换估计需要用打包工具来配合完成。! a3 v! E/ T- @9 P8 g" Y6 l+ h; U
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
7 }* L9 i4 w; X' n( I9 D% G% q/ f8 a2 C
. ?6 V9 i* k6 N5 o! E最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。- g) L# D+ ~+ f, G
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
- k' E) W5 t7 z/ u' b- l) P(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
8 |% L" l3 p+ e5 Q- ~$ n为了方便观看,用excel做成层级调用关系图。
$ c, z ?/ T- F% h( I4 z下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
9 R6 m, Z' c! P+ k5 J7 V) T2 W* G(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
# q9 \8 B8 P2 D5 z) v H- L
8 L0 t0 {: q# J- 对话字幕断点处
- y q; f5 b' X8 \4 F& \: W
% [5 @- i- d+ |5 d0 w- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |1 W! ]2 q$ V6 K: B$ {$ a
- # Z: m& c, Y- {' D Z3 _" M( @
- 对话字幕显示函数! b3 j2 g" ]5 S9 s" A
. o" Y# L, O# x5 H" T6 J ]- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 ; ~# T* L: \+ w$ I5 @6 ~
8 E9 _1 @+ r9 O0 X
/ m3 Z) U) D. n; i5 N3 i5 X) w" p: d/ g b" \( r
: ]% A: a; @8 B |