本帖最后由 shane007 于 2023-8-23 13:25 编辑 $ O4 g1 A4 N% h, q9 [- E' x
+ j# g* l$ ^; W3 T
SDL是4大图形API之一,其他几个是directx,directdraw,opengl0 w" v; l8 D1 v
1 J3 c% _0 `) \' `0 s S, f断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
' i E5 \0 U# L E9 \; z打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。+ q4 i4 A* v7 z# q
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。. D: t3 V' f/ m! M
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。1 i: h4 I, \, Y+ |" h
! p# e: ^/ {, a+ A最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。; _2 f9 Z) f/ g# K4 N2 C
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。* ~1 [ J% `3 o6 r& a
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
% \# g4 B# y7 [ z) r* _为了方便观看,用excel做成层级调用关系图。 S1 {! r! K1 c$ M+ V
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
! j2 C8 K0 n( B) V) c(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)& I6 w/ r) e5 g" a& ^3 w" ~1 F
8 o9 a9 G, R1 D$ p! b( H# r( K4 x/ l
- 对话字幕断点处
, a9 H4 m4 V' ]% B
2 k6 f. n- ` ~& ?- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
g1 |0 r8 W N. }9 N+ D$ Z - 7 h3 _: r8 K6 j0 H( W
- 对话字幕显示函数& O' M2 T4 [) z
- 7 U) F) ] R% F7 r9 |( V8 C
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
2 ^7 y& `2 n$ a K1 C# j6 R, F+ U5 i& n* Z* @' l1 ^
2 f# q5 C1 p8 e$ J! N( d
7 D8 i" {1 V6 n
1 y3 A; T- `& _4 y9 Y2 S |