本帖最后由 shane007 于 2023-8-23 13:25 编辑
R0 p V4 Z: v! z1 E0 Y( u0 M
4 U/ {0 J d5 f ]9 p' sSDL是4大图形API之一,其他几个是directx,directdraw,opengl
G1 s( s2 s- S7 g
0 A/ j$ ?$ {3 e( s7 A; u/ J断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
) V( c2 [ P$ T! I$ }; ^3 m打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。8 t8 n5 ~- I1 s6 B5 e. l( z$ l
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。3 _- r8 _3 m Y- c
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
0 O7 Z9 F1 j6 u: S! }1 ]* N# o
1 x4 m- {; `1 \( \0 P1 I最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。" Z5 @4 u( r+ C$ Y
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。0 g; U- S p& H7 \% i
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)! D: M7 F! c' d& X: ]2 U: c
为了方便观看,用excel做成层级调用关系图。
( S3 Q7 t1 ]1 @8 n& a下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。9 r! k1 p8 R) _* j- X
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
& _2 r. \5 ?/ [% C
4 u3 x/ C" {2 u; C, z+ N Y- 对话字幕断点处1 ?+ \6 U8 l+ r$ ?) x. ?" R
8 c Z* W5 B; C& A/ \5 S- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; | n" a4 S6 m1 e* S/ m
- ; O: w1 F9 m0 K
- 对话字幕显示函数% ?! t; ^# B3 ~$ N, C1 V( k
- V0 ?( H& T$ L3 V- T2 h4 S+ `- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 K) g/ e) o# o: L9 K0 E6 _( a- c
: M M& E- p) }0 r# r+ B g: r! r
- R1 Q( Z& J, S) l) q/ _$ F" R& q; T/ ]" r
$ }2 z1 ?& r) w$ D
|