本帖最后由 shane007 于 2023-8-23 13:25 编辑 0 P2 o; \9 R3 E3 H J/ l
( A; V5 P" S! h+ e. x2 @SDL是4大图形API之一,其他几个是directx,directdraw,opengl
1 ~7 w6 ~& @/ c1 y3 f$ t5 m$ k: B9 k* \; \7 e
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。. ~ d n0 i& c+ W- M
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
4 X2 G( d$ v$ U) J m) R游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
* s9 x( U& D1 i2 ]- @8 k但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。7 a5 G9 j6 }4 s5 p. V# G3 n
r& q0 Q0 c/ j. \7 G9 _
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。+ d2 p9 `' Z9 M" }) l: X" `
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。: g9 O% ~7 `$ N+ A, d9 \
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)0 Z' j2 P$ \5 G: y* }! X/ m
为了方便观看,用excel做成层级调用关系图。
# W3 Y8 u0 @; H, \) o7 c7 r下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
c7 w9 g# W: s3 \0 ^(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象). B0 j" v1 ?$ ~4 P# I6 S9 Z* F) _
" X6 {; q) o4 e: X/ m) |2 h2 c- 对话字幕断点处) m$ {5 V. B9 O
* c4 Y# m/ c. H7 b" p3 V& X: O- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |5 q4 l0 h5 e* a: G* R. h
- * l8 i" Q$ N# B) T8 e) C: {; n& H8 X
- 对话字幕显示函数
3 w' Q2 S& I9 n" E w- |
% T$ z3 n( w( H; w- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
- ^" K7 a( f7 \1 k# S, B W0 D/ q4 n2 l0 X [- _8 Q; {1 \
* s8 v, {% X0 s6 f2 u: C
j: N9 L9 q U) J2 c; h" g
9 ~) x1 z& X( _( u" ^* { |