本帖最后由 shane007 于 2023-8-23 13:25 编辑 " e! D0 k, m& x7 b
2 n. M9 v) ^7 L- A1 p4 i% D' }SDL是4大图形API之一,其他几个是directx,directdraw,opengl
' G; }2 p6 j6 |
6 X# n* w' i) k, [! r断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
5 C. p3 S( W0 A0 i' B H6 m& G2 A$ |0 v打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。+ P$ G- D3 x, e% Z8 b) Q& Q+ H7 ~7 [
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
2 l- U n! S+ P9 F/ d* `" o但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。7 ^! a- w$ H; P6 m i0 g
" [: ~. Y) ~5 z' Q! g/ Y2 `! E( c最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
/ ~. h% V% I! w& K& g5 I8 w% y' T) Q结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。5 T; @+ W- n' @' ]( D7 Y
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
6 c) W' [: z- z) ]为了方便观看,用excel做成层级调用关系图。
- r/ t' ]; ]& h3 E4 d# K9 v; d! p6 Q下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。& E$ ^+ \& ~# I5 w/ l
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)/ }* O6 ~0 S( g6 q! |0 J& p0 L/ R- ?) E
) P0 k! [ K: w V! w
- 对话字幕断点处/ p- k: r+ B1 Q
- ; f3 D& d0 G( D9 O* W1 T
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |- c' q$ J( M u2 ]4 h' w) ~
- 1 _7 b( q; V r* s
- 对话字幕显示函数( B- Q/ Z" H' p
& _. c# `0 v. ~5 {- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 7 I. ?4 g+ m$ o# Y1 [3 V
+ U! [; n6 w F5 s, N4 s3 K( l
7 f6 p" [* n5 k) k* }+ M* [5 d% O: b7 Q ]" i9 b9 A5 @1 g
) ^+ K( w6 K+ g1 x" R( _ |