本帖最后由 shane007 于 2023-8-23 13:25 编辑
* h. H$ \# M* y9 }4 ^9 B$ R% P( E( Z; n
SDL是4大图形API之一,其他几个是directx,directdraw,opengl
$ J+ r% |+ F0 K. ?! l/ S6 j# d3 Q& o6 O0 g" U& U1 {
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
# w3 e# {; y% S6 o- b a打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
1 g6 _- [- `7 c( c9 g游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
9 B: D. e. |$ q) L但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。* t. q' A8 t6 W# J
& a9 }; W q# H$ x/ `) t: \最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。) h& L; I9 U; H; {) g
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
# X1 ^- [; b- E7 ^; ?9 P(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)2 K! r" l. Q! F/ H( b) |5 K
为了方便观看,用excel做成层级调用关系图。' ?( k% b$ c& N' F1 ^
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
0 ]3 W" N$ l) q( q(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)! j3 K7 I% o+ f7 I! q" ^" [, `
& B9 G3 H" k1 i- 对话字幕断点处, M- D. ]% c! J2 T0 ^
- + c& w3 t6 e% C0 r+ ?. Y U
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
7 v- N3 Z% N7 C5 |6 Q% |& w. L - " E H1 ~0 ]1 M/ L( V4 o
- 对话字幕显示函数
& O) c0 w4 S0 [- T. o' b5 _" T
6 i( R: [7 Q8 h" t0 t2 ]5 A- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
/ Q e& r4 K0 [' ?: X% S3 U* N! C. H3 h3 H
# t0 {+ o2 M5 J/ }* q* L5 Y1 X! V: g7 J3 c
* ?% _( s& n9 u( T |