本帖最后由 shane007 于 2023-8-23 13:25 编辑
% U1 f( w, ?4 u) x+ X2 T( N" }8 ^& U0 j9 u
SDL是4大图形API之一,其他几个是directx,directdraw,opengl4 j" c1 c2 {* w& ~- X
9 P& ~6 ]* T7 S. R- ?
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。: ~5 S1 g" b! ^0 z
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
5 h. ?$ M8 T. P游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
* d* f4 a- @; e# t' S5 C但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
# x8 V4 X$ P$ h6 L$ W/ A5 I5 J5 w/ X8 O' g, {( t
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。. K$ \, {0 j3 D
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。% }5 F# N" K; x; H6 w2 m
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
$ S4 m( w$ d) ]. C y! a为了方便观看,用excel做成层级调用关系图。
$ W7 G( p5 f7 X# j3 l& v0 T E' T! _下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
7 ?: F! L6 m* q(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
6 X7 a- C5 `" g5 J& c" [" f9 Y% F; B, C# s2 p; D5 C# B
- 对话字幕断点处
( ~) D( I# K% ]+ a
_3 c. h3 y9 h9 @# r6 }5 K- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |9 u, j" B3 _# z9 e8 J
- " _! Y& u4 m6 ^! z7 P' ~
- 对话字幕显示函数
: ~7 a9 o& L/ Q4 _1 E1 E- a8 A4 P5 Z
9 G% r6 m0 U; K7 D# }- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
' e" a3 ?# v' i0 k
* [* @! a, F ^ ~3 z8 |
' B# P; m7 ?% }" ?7 w5 o- p7 V; m5 ?( t2 Q
3 G" z! o: q2 y- D2 Z
|