本帖最后由 shane007 于 2023-8-23 13:25 编辑 - N8 ~0 t- u' H
8 N, C8 H, ^: S
SDL是4大图形API之一,其他几个是directx,directdraw,opengl/ S* T6 U! [ v7 h
% y+ T8 y6 j6 l' y8 m! _1 R
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
6 p( L8 q3 f) O6 u7 {( R9 R* B) n打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。 L+ g# ]" Q# f
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。2 D/ F g/ M8 _& K! b) k
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
3 H0 a' ~) K; D! w" E
$ n/ a$ E& y% X8 V7 j8 R2 ^# z6 ?最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
. c, {5 U6 r1 c$ c3 k0 o0 L) h结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
2 k/ B# i1 G% t0 ]- _" S(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便); _* m" h) e, U. K1 X/ F& G
为了方便观看,用excel做成层级调用关系图。$ C7 U( q) [4 ?7 x
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。/ s, @* G, z, R1 x3 c0 m
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)' L- C2 L' ~7 D% m
& O- @# Q$ {2 q% X; V1 m
- 对话字幕断点处
' x n2 F6 R# }( s0 P1 a
+ F# q* _! H( E# \) C0 M( n+ w6 l- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
4 C4 j+ V5 P7 G
1 @. |$ t/ q3 J0 ?. g' x* v, k- 对话字幕显示函数
; X. }3 b5 d7 z$ n' ?$ `) y r
/ m# g% \* W+ j, Z2 s/ V- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
" Q* F/ T( G3 w+ w: A M: H# b/ {$ _+ \1 I, G9 n
`; \" T/ r' g6 T
+ X/ o0 ~% o: E0 J4 W6 @% {) M% {# @6 ^5 H3 T' j8 C
|