本帖最后由 shane007 于 2023-8-23 13:25 编辑
9 F& T2 {3 W% ?5 t2 p
4 V5 r v6 J0 S1 [SDL是4大图形API之一,其他几个是directx,directdraw,opengl
8 M- G5 T$ _1 O' @1 [- [; y5 g3 D, B0 U0 N
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
_( \. U8 M0 J4 J e/ M8 B打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。) F- U( m; |! E$ [. C6 _
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
, g; x! p# g* M+ {$ h7 p但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
4 Y; u/ A- h9 G$ F9 X* u. u/ h: d7 _. K' {; N
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
. z3 ^; D, R4 ^4 F& ]6 [结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
0 @1 k* F' w' n# H- ](这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
# l9 c" H7 t; T8 ?: \为了方便观看,用excel做成层级调用关系图。
; ?! @+ N$ W0 P6 s. y4 x下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
. Z4 k: c: ?. ^8 X* t# u" m1 ~(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)' P, W+ I3 d# s8 W6 a3 Z" L
" H% L% I' _: A3 D; {+ |' m u- 对话字幕断点处0 F0 r3 `, l# n) ?" L/ @7 y6 Y- A; b
- v8 |( N- a2 U1 o/ {# Z
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |/ }7 d o2 a0 n
- ' _# T$ H6 n& y8 M
- 对话字幕显示函数; U7 G. `) Z8 Z; c9 J# T
- * G* ?) |. D& _6 o
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
, H0 n; w: Z2 ^
4 H/ D& w) C/ @4 O4 r
5 c- G0 Y [+ p. ?% N! f+ O0 L H- a! o
! ?- A7 J5 j: w# \ S$ X |