本帖最后由 shane007 于 2023-8-23 13:25 编辑 ) P |* Q; }7 [; U8 Y+ i
. f! ~/ s, k. _8 W: L. C. \9 Q
SDL是4大图形API之一,其他几个是directx,directdraw,opengl2 L' \! j" [ `. r2 Q$ X6 J
- |1 k# q6 v x8 f) H' v; _
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。' z. D3 o* g6 G& R# ?5 ~. H8 q2 q. s
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。. d1 h" J3 U4 F# A
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
8 f& t' o/ A* N" y但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
- L- g4 ?8 ], ?/ c# \& R+ `# E8 r' ^; }4 i
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
1 r7 R h' b$ L( M7 C( f结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。$ D9 v4 B& p" v G
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)$ a- d {; k- l- p
为了方便观看,用excel做成层级调用关系图。
2 _- E2 ]& S, W) `1 O下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。- O# X1 ?/ v1 \- p4 ^& f9 H
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)7 f( _3 @: M$ y; a
6 `: }+ X2 [8 \' |) d7 x6 R$ \
- 对话字幕断点处. C. ~! o y' @7 U; i2 h* K ?
2 |* Q: y+ w" Q5 i% E- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |+ j" J8 y' d6 N, z- s
. o8 c8 |7 `! r8 V2 j) X: J2 P" m- 对话字幕显示函数
: q, u/ D0 S% ?0 a- S1 ~ - # y9 a3 G7 C% U
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
0 a" x: _( t1 Z4 I+ M% @. o! h: p
$ A) G+ }9 u" f( a; U) L6 e4 L/ |
& f8 b1 D/ H+ m7 f6 ~. A8 g5 a% ]& ]; z0 k- S4 R' h8 P# u
|