本帖最后由 shane007 于 2023-8-23 13:25 编辑
5 a% `- g1 H2 }* M) m
# l7 b2 t; {4 |3 x8 dSDL是4大图形API之一,其他几个是directx,directdraw,opengl% z7 g7 K9 E/ p6 H0 D _4 l9 X& J
! ~' B7 Q) _* \1 k3 o1 L& p
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
% j) Y9 Q, G) t) ]6 W打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。4 q4 b$ D2 \) ]
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。* S1 i" O' D" J* t V
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
/ p; \3 v2 I/ j
' t5 A1 E! b8 r; p+ J# g最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
4 B( z, d& |3 c7 s+ N8 }结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。% L& T: Y2 x$ v8 k6 g$ Y/ a% K
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
* h' Z, L% H/ A6 t F, q! a为了方便观看,用excel做成层级调用关系图。
9 {, ]* H6 l* e" d/ F$ c下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。) G$ N: h8 X v- c* x; [, W
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
( a3 L$ B& l4 n" F
0 }( V* Z( j/ Z# ]6 |$ O5 T5 @0 o- 对话字幕断点处+ G, m" Y) U; y M
- + G7 u/ K6 E0 p3 x* p3 o
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
6 Z( H' I! h# c3 Z N( i! L
" F( M& a5 A* ^& j7 o& T( F- V- 对话字幕显示函数* \* J2 p4 |$ x2 v: A
/ Z O( j1 @# C: [( D- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
2 u5 q- ?9 c& d0 n7 F7 T
1 d q6 T) v, A8 F: ~% E
/ S: n& y# c0 U# m L& f
( I, l4 ^; K6 R7 g
8 d7 S7 G7 e% a) {- u |