本帖最后由 shane007 于 2023-8-23 13:25 编辑 4 J7 K* l) C4 d, r$ g: I
. r. ?$ @ N: |8 O" g& s
SDL是4大图形API之一,其他几个是directx,directdraw,opengl* I& h5 K4 R/ w7 ?, P2 t8 r
4 _7 v! ~9 b2 ^' w2 X$ ?断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
6 {8 P" h t1 ]1 z2 `2 c5 {1 [打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。1 k! f/ T2 X8 U% `; x
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。- M! J) s; ~6 E, ^9 S
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
f3 M" h2 c! r! B7 p" u: G8 a( f! `# ?4 S- S& n9 [) ]
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。2 F! s7 u; o# x& w9 F3 [' O" W
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。6 R2 i3 H& e' A* g! o
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)% A) `: Y; _4 I2 P* d
为了方便观看,用excel做成层级调用关系图。; V6 @& G6 j* ^" H8 I0 |! q
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
1 J/ s$ b, X& B( E(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
; V5 x" g9 J, M4 w# W" \; ^' x0 t. @
- 对话字幕断点处1 [* Z2 c: x' p* V
- ! Q3 p$ ^% S, u& u) q
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |5 A v- b: P5 ^( q) H
+ c; O$ B1 y1 F7 C- 对话字幕显示函数
, f3 F2 D( J& Q: H4 A' o
+ R! F4 n; c$ p/ u) z- g- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
8 h# G8 M* T5 Z; h, |" X5 l8 r" }: J6 p* v- _! v/ F4 H: r
7 a8 V0 T0 Y/ J! N0 U: A( z) M4 n B
$ e+ e% j/ E7 f& b
|