本帖最后由 shane007 于 2023-8-23 13:25 编辑 0 r- i& w! m" Q, k5 S' S
6 D& G* C" m8 N# Y1 ^- O+ I8 \+ }
SDL是4大图形API之一,其他几个是directx,directdraw,opengl7 ]6 }# W7 V! L( [1 R L3 i
6 [* O. [. ^+ B
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。0 a9 C: J7 B& Q
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
( {) y2 o" ~8 m% K7 z) B游戏界面是图片,图片的替换估计需要用打包工具来配合完成。: |3 G0 F' z1 T8 p, U w. \, o& s. O
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。* x1 o( u, v# Y5 h
$ [5 B# z" H* o+ q) g( C1 Y
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
) z5 R, X: ?' Q. n d- `结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。2 |0 g" |& M" L T1 T2 `
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)' x' l# i+ a2 V7 y" v
为了方便观看,用excel做成层级调用关系图。
2 H5 v" b+ R3 S* Z1 O" I! c0 ]下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
5 G* q9 \8 D! U! L! S(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)1 E" \+ a C: @" O
4 [- j F# W9 F& Z1 l
- 对话字幕断点处, H0 G! e; |( X: ~( i# x
% z6 V8 ~- A3 m" [: F# l- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
" t2 n1 B* `# ?. F7 z - ) ~! y0 D$ A2 B0 `* ]
- 对话字幕显示函数: g; h$ T$ K T$ k. m. q) x. J$ e7 D
- / k- U+ F' }* y
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 3 q7 ^9 r* D( P9 z) J' y/ v
$ Q7 I) D) o4 M3 P
; d8 X" j6 m* d# E, G, o. ?% I5 U4 y5 l
" v6 W, D l4 `7 Q4 c6 J |