本帖最后由 shane007 于 2023-8-23 13:25 编辑 6 @+ B& K$ o+ |$ k; z
4 T2 \6 \. K- w4 p4 `SDL是4大图形API之一,其他几个是directx,directdraw,opengl* G" K) p' ?+ m$ t
. ~2 {" S+ e% O5 n2 G
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。 e# p r% E1 o* X/ k
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
0 \7 k9 m" k% M0 F1 a z# i2 T游戏界面是图片,图片的替换估计需要用打包工具来配合完成。2 k+ {9 r0 b$ z6 K: X! L
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。4 G3 I1 ~9 A- B- Q; i6 c
& x2 U, s3 x3 W! y最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
B, j0 E8 D2 e, d" D2 o5 y结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。4 y$ {7 u; r, l
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
: @; Y1 A9 j% B: ~为了方便观看,用excel做成层级调用关系图。, `2 {# ^- q6 p' c. _
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。3 U9 C) I% m% p
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)6 V/ R$ U: ]) Y/ `, c# x
" t9 B7 i% S- h- 对话字幕断点处
6 x9 D8 g9 N4 f - / {$ i9 J, m/ C- E1 l3 @9 W, ^
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |* ?8 d4 B! v/ Y; }( }2 x6 {% |# ~
( U; y3 L9 ]) h% C- x+ h- 对话字幕显示函数
/ p. Z0 I1 d# E
1 o- d' _- g3 j& z- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 : T; M! C p3 e# y
/ C" b' b) z p/ ]
& F, n/ M% h* P2 V2 O! O6 Z
7 S$ Y$ T( y2 K$ H! |! v' G! _) y! j$ h
0 J, N! n( O* x- ?- R4 R/ N: [: H, |
|