本帖最后由 shane007 于 2023-8-23 13:25 编辑 $ E; I9 C/ {- @+ p- y
1 P6 _/ e- v. d4 \2 n6 bSDL是4大图形API之一,其他几个是directx,directdraw,opengl
2 I& ?( `7 C8 T8 t! ]
2 |$ R( M# P) t/ ?- F- L断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。4 `2 M# T1 N" g, }
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。6 r& ?! p$ E$ m4 S8 k7 }. }
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
* K! K0 n# w% E9 h |: d但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
" E3 k- x' F5 @, O- A$ _& Y
8 }& K7 P1 z2 p* g最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。! [' C' \) I# ]% s+ I
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。- s5 S% c4 m) |! A8 z, Y" m
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
6 [' u8 k V9 P& u- I为了方便观看,用excel做成层级调用关系图。0 B2 {9 N& g; y9 z
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。% ?( B6 u- A' T2 r, |) ?
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
" {+ E% V9 N$ z, K7 U
8 W$ [' ~3 W4 Q- 对话字幕断点处
7 i, ^; M$ O1 m+ F( d. k - 2 X3 H( O( O5 n. s( r, t
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |, f: V, i* b; v/ ]* Z* O. ?# D1 l
- " K Z6 Z- Q6 {- n# W/ Q. A
- 对话字幕显示函数3 l( C1 l. _2 _4 p3 }. W7 d
% O, W9 D4 V9 y* ?- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
# B4 u Y! z$ r0 ]6 W0 l
: Z( S: U; D/ I/ ^* u: o2 s
8 Z6 n$ R4 [, v1 ~9 K! W% R' Z- s8 W9 D y% C" F- G# G8 F; d
- R6 }7 t7 J2 ?& K- Y! Y& J! \ |