本帖最后由 shane007 于 2023-8-23 13:25 编辑
4 O* G( R; `" Z9 n( K0 T( [
5 B. Y7 V1 Z, P0 f# Z# m' ~SDL是4大图形API之一,其他几个是directx,directdraw,opengl
: G- r4 b/ d& T& ^4 e2 o' A1 a0 f* A; }9 u) K6 E* K0 ~
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
! [3 @0 M- x& U. a打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。2 G r. P9 k$ R- a! I
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。" s- y% b. B! Z2 L
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
5 W0 o7 A" L1 d/ i7 X2 H3 ]# w h
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
+ T0 S5 U( @' @1 R结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
0 C) {1 C1 g9 S$ ~. k0 p(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)3 y2 u# U" X! F: Z, {
为了方便观看,用excel做成层级调用关系图。0 `& e3 ~% t' D. f/ ~
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
8 U1 h! S6 ] ](需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)' P3 T4 ]6 f6 J! c6 Q
: f( F# @9 w- X) C5 q9 }
- 对话字幕断点处
2 N& Y) J5 n+ [- z2 `7 \$ c( G
' E, ?9 r& h9 } f# S7 X' k1 q! T- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |( |6 q0 {8 w- a
% k; q/ T4 P2 V0 N; R- 对话字幕显示函数5 _4 y* L/ i( P, w
( o$ w. C' E- [0 ?3 @9 Y/ n* Z+ H* z- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
: V7 C! z% d$ v: u/ a2 _% X( t1 B. ?) l' w0 P0 D6 \2 H
* K1 x& [; c* J ?. T c
" s, i6 ]5 n6 { |
; T% O5 S6 e% k% _1 B$ _! v5 }2 O |