本帖最后由 shane007 于 2023-8-23 13:25 编辑
1 u: f2 r4 q. O0 O1 K/ g9 a8 d* h1 K& w) F
SDL是4大图形API之一,其他几个是directx,directdraw,opengl6 R/ u7 }$ m; v' C8 \
) D; z$ o3 c0 D, k断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。3 K6 K0 \( U& \5 N# A' N
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。! W4 w2 H0 Y- d3 D
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
' Y; T5 v w% B- I但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
+ V" Q+ |4 x( D7 B: x
+ z7 ~6 A# Y; ~& C; S最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。7 ]' k5 k0 L* x/ i+ y3 J
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。8 J4 D6 ^+ c2 b$ ^; K& x$ j
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)1 M; [4 Z, f# N9 N& w
为了方便观看,用excel做成层级调用关系图。/ C1 I [- O- @; | h) z2 u2 q
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
7 k0 U4 s4 |1 U' ~8 f0 t# F(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)( o8 X' D" X. o0 }) ~& U
2 l. e# [+ o+ p. x7 f9 N; R
- 对话字幕断点处8 k7 e8 P6 e" g
- 7 r4 u- I5 r# a$ ~9 \* K$ V/ `; e
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
% k/ q& y: J/ y' S
- ~1 [: i& G# I1 c8 ~) e9 ]- l- 对话字幕显示函数) ?/ N- t: N, I2 L; `1 ~
- 2 T/ j% q) C0 d# s; f q& {; j
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
7 E* b. _6 I; ^/ j6 _% ^) g1 g# C, b) y
+ a! ^* p% K! N$ t: X3 F+ R
5 y" G7 R) |! a: i# N2 |4 [1 y
+ K# M9 K& `( V2 b6 o, J |