本帖最后由 shane007 于 2023-8-23 13:25 编辑 4 |0 u) v* ^- Z
( X% b$ j8 P& I: T
SDL是4大图形API之一,其他几个是directx,directdraw,opengl
3 C. r" s. M6 [4 y9 t, N% }7 M3 }, p
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。1 L1 b8 r" L+ m
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
$ y5 w5 l# Q9 Y游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
9 F5 U V/ f2 l) Z- m5 P但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。. z% X; E) ]6 f# K8 o }4 `7 [8 f
% d/ f! |- }* ]8 b S
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。8 }) i- L; I! d- w9 L6 W! V4 u6 z
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。! K6 B: B1 o' v# z \
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
' ?) D7 I- O' O V, Y5 P% y为了方便观看,用excel做成层级调用关系图。( D {1 ]' A- R+ c) o
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。2 P( t/ Q' Q& ~) }% f
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
- s% b: K1 j. K0 F) V/ b6 _0 S2 [. C
- 对话字幕断点处3 r+ I: \: K* g; |
; y- N9 _) n. h- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |" h4 V; O5 M' ?3 ]2 ~
- * g8 H( S8 i. A& z% D% F
- 对话字幕显示函数
+ L' I9 y( D1 { K - + n! E: x/ Z: j6 R. g' ^
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
2 {+ {2 [) Q/ J5 F3 e s- G$ @+ O; R* J
) ^( T8 O t% N( M- v" K; ~: R6 \2 w5 p) `" Z
# [$ t# o' y ?6 h' K4 P% e; | |