本帖最后由 shane007 于 2023-8-23 13:25 编辑
M7 z0 D' X4 _- Q$ g" T: m+ f
) l1 c c( t1 X- S& `SDL是4大图形API之一,其他几个是directx,directdraw,opengl
( P3 y d2 f. p, G1 C p
$ [1 a4 Z( v' R' n1 d9 u! q断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
/ l( t. k# K: r$ r打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
) Z" j7 W' x6 C0 Y! d `# p游戏界面是图片,图片的替换估计需要用打包工具来配合完成。; o# y0 D; d6 H9 X/ n7 ~! }: I% d e
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
' ~" e% r4 W. E a, [
- V+ U$ E4 j8 {2 v, b" S最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。+ S2 r3 i7 x: {( H: _6 Q
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
0 o4 H# Z5 M9 l1 ?4 h(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)( u- w5 _( s% O1 }: V
为了方便观看,用excel做成层级调用关系图。
/ ~& D: u' \1 S) G, V下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。$ O" V$ m6 h! A) c
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)7 ^" _1 { K2 y' U" T
$ B# w) i3 }; o" A5 M
- 对话字幕断点处* O/ N2 E4 W9 _* X& A
- , @0 ?% T1 f4 K* ~ {& N
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |$ M4 t" R- V4 d% Y1 A. s& r
; q8 G9 n+ q! u" V9 I- 对话字幕显示函数
0 K7 e) B3 ~9 U; m$ R9 ^
* H/ e; z7 q$ c# G- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
# Y' q6 v% w7 @6 a- B v# V8 l$ N0 y! n" N1 \
/ }; w$ _& U; u% x; x& V
0 u i* W* f; w) P6 i7 H
, y% a# J9 ?% |' X0 | |