本帖最后由 shane007 于 2023-8-23 13:25 编辑
% w" ~9 |7 r7 G( Y* u% q4 n
& a9 M3 A" w4 MSDL是4大图形API之一,其他几个是directx,directdraw,opengl
3 Q, I9 w3 [- w6 d& z7 _. E' h2 n$ D4 p) t" ]- ^3 B
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。1 g) s" c$ |6 e' `8 l& J
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
8 A. W+ Q# N& H7 W游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
8 C3 t; ?: P9 V1 o( S4 \/ E( A& Z8 b但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。' o, n9 k7 h4 ~ C9 x% K
7 V; n) U( _, ?/ a* ~' p1 h: F
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。5 |% F7 ?' ~) x1 ]$ W& E. h6 t! k% ]- \
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。 c6 r. {* _6 @! K* \
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
& {5 A) c: U6 o; o8 D Z( Y( X" g为了方便观看,用excel做成层级调用关系图。( V8 K" v% R4 u6 A8 h4 U) _
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。* `; m" `; r6 Z0 s' L ^
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
/ M8 O& Y3 P: ?8 w# g6 \& E b4 u# k$ Y5 X/ e
- 对话字幕断点处: H9 y* l2 g1 ]1 \6 f
- 6 x+ ~2 v; u1 X1 [5 J& C* Y
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |8 P' d1 \7 E6 ^0 f% _1 {2 K
- ' k& X% p0 {: v
- 对话字幕显示函数! W" Y9 ~+ |; U5 ]$ ^" {* P& b
* ]/ ]2 }5 |9 B; ?/ x) Y- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 # @0 @# ]( ~& c K. _
& k2 d J! x1 f9 @7 f( e- U: I$ t0 x3 o* ?& B
" y& K" K _. U; T0 N+ j, r
2 e, }1 ?0 @8 b# [ b" _+ M
|