本帖最后由 shane007 于 2023-8-23 13:25 编辑 * ^" ]! m/ \+ ~7 f6 F" @' g
( D. m* q8 S: p
SDL是4大图形API之一,其他几个是directx,directdraw,opengl
6 e& o/ y/ f' d3 P+ k
- p1 P; I# o: ]* D1 u8 v2 r断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
# }- b4 R" A! p {; N: A0 }打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。; B, o. o* E) U$ y
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。; o# D1 i0 j! S. V" z
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。/ B4 D5 p+ H# [8 `* y; C
7 `+ f5 i. g) V- ~/ `% B5 q最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
9 \3 @) B+ e1 T* B" W结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。" T4 B$ f9 e5 J8 H5 n3 G
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)3 p, l2 b+ F" b O e
为了方便观看,用excel做成层级调用关系图。
2 O1 j+ e! S, P9 u4 W下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。% g4 @0 v. W" m$ S) x
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象), L' h" E# l" q% P) n4 `6 B+ P
% B$ O1 x" Q' h t, w- 对话字幕断点处
, y+ t7 k* L" n7 N4 n# M
' `* N Y" C( D/ s- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
0 L4 J$ `# q0 P9 B - - p8 ]; [ O/ v6 c; a$ ~
- 对话字幕显示函数
. ^7 x1 O- P: t. w1 i" q+ ~
/ H, w1 P0 } s& E/ I' r3 I- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 : {2 @0 \0 A3 R7 {
J% P: B. d4 {' `1 Q/ g9 _2 Y% D# A
' }: T' @, t! C
6 n6 L4 |" u! P' W
|