本帖最后由 shane007 于 2023-8-23 13:25 编辑 ! T( l; D# L9 D
) i( D% y% ]! O+ ?8 `3 F7 s
SDL是4大图形API之一,其他几个是directx,directdraw,opengl6 { C$ Z$ O: e& y9 r& J& ]
5 `+ V6 G3 Q1 b断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
5 R" M5 T) H+ p- g/ q打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。% I9 k' g. C! C a7 m9 a
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
( s) P7 ^# i0 |# \1 {0 C% w: y但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
0 h) H; S. I& S. H: H0 F9 m; o8 B, H$ ^7 q# b! \
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
1 m1 `& V( I% Q4 A, B* J9 r结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
5 V4 V) e8 M: _ G: {- G(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)# n/ }8 p& ? G1 Y5 d5 s
为了方便观看,用excel做成层级调用关系图。
; h3 _+ ]0 Q/ G: o! e' R' a下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。% s" q# C. N: b
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)/ n) _1 L2 B8 W* H
, J3 h# G5 U0 d- 对话字幕断点处4 A. U% X, J. @2 ^
- + ^( C* D H' S
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |7 m+ h( Q9 o; _! r- \7 M1 q
- , q( x' {2 Z4 c- ~% K
- 对话字幕显示函数1 o" `/ T- H p2 O& q, e! f
9 D7 q. X2 O! ?3 J* ^% J: _) a- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
8 k* h. W6 }# t8 X# Q
0 T+ U# H. }. a9 o* b% |9 Q x/ Y
; X b. Y! E ]3 j( Y2 g% Z$ Q
# L0 [) j4 ` W' f% t& p8 P
$ _/ O9 [. d9 e+ n |