本帖最后由 shane007 于 2023-8-23 13:25 编辑 / l3 O( j+ _ h1 q6 `) u
/ O" Q/ b9 E7 e) o( z. d/ g2 g
SDL是4大图形API之一,其他几个是directx,directdraw,opengl
% \( E7 M9 @2 s8 E0 ~
6 J8 ^1 ]" C* K6 J- C断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
5 a& a5 z9 H; p打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
, f# {0 f, l/ O8 t1 k游戏界面是图片,图片的替换估计需要用打包工具来配合完成。8 K2 {" P q' F4 G, r. z( B% i
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。9 W+ d2 A2 s: T( ^0 ^
0 _4 E5 X' l# p. d5 _
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。3 V# w& p2 g5 K% S* v4 {1 n
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。 V2 \( k1 ^# j" l/ ^
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便) @( O, m" |3 }. ^
为了方便观看,用excel做成层级调用关系图。& L$ R6 [ r6 d+ m1 V3 o
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
5 X- j- [: i6 m' c(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
" d- q6 k5 M. o( v3 k( T4 e5 w6 l8 B/ l; K4 X0 [( N# X
- 对话字幕断点处" K. M( k) c; k4 }* I% [+ Q
# u4 H6 C. u" O' V! s- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |) c8 q' C" `/ s0 S# @, p1 _
& O8 }& P+ b" i* P- 对话字幕显示函数
. [1 a: E+ c: ^ b G" O5 \: r - 4 g, q/ d* w3 f, F* F. W ~' t
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 8 T+ X) X' n- y
( N! G7 k; }4 q2 D/ W. e7 x* N
& Q: [' @1 `9 x% B. n" n+ I E# a8 Q r0 `2 ]' r8 e
8 I! H( l V5 F9 S: }/ _. X% X: y Z( | |