本帖最后由 shane007 于 2023-8-23 13:25 编辑 9 H) V8 W* @; g( _' p3 {9 _
" O4 Y3 n8 k2 f. ` C q4 TSDL是4大图形API之一,其他几个是directx,directdraw,opengl2 t4 x# @4 U9 d
. h5 D9 l b% \2 {
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
2 l: }3 L( a: s8 h( C; G打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
) Q% Y! }$ l, L7 F1 P% d) B4 {4 R游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
+ X' p8 m9 D, M& C( L但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
B$ b; m9 f& c* ~% R- b) r: y7 N8 Y
; y4 k% i# d) f* q% ^最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
! {; Q% k& `2 b1 h5 i& I. X* m结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。8 b* W) a [7 ~0 _! R
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)3 y: Z+ |5 h) y' Q% X
为了方便观看,用excel做成层级调用关系图。
. z8 d( B. ] H: |. V' s- }8 }* Y3 s下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。6 \# l* A" I @) ?
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)& \4 e( E+ o! `' y5 v8 }
" e/ g' C: U+ B' F1 H; j
- 对话字幕断点处' O, h/ l1 L3 a8 [" t8 N1 }
3 k7 q# B. z+ B- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
O: Y$ H, `5 N! s3 g1 @
$ V! u5 N1 I; o) V0 D8 H3 K- 对话字幕显示函数
# H7 M# J0 u# q
+ q u& r1 B3 s7 S$ M, G# W* [2 K- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
4 z6 A7 U( r" [0 n( I" m
3 C* X6 j& K [
* u; X: Q- F `' Q" i0 `1 u) e3 \) e. c
9 j0 s& |/ W6 J |