本帖最后由 shane007 于 2023-8-23 13:25 编辑
1 r! T# }0 ~' W. s% d; X: i: y+ l7 E; N- J9 V4 O
SDL是4大图形API之一,其他几个是directx,directdraw,opengl
3 {! o- c% \2 |) I1 k4 d
8 k# z1 D( {2 N- @7 A% x断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。" j. P9 Y! B/ @* R, m; O* @' p
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。. q8 B! p6 N3 O& s z: W$ Q' t
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。7 e/ W9 N N' r: n
但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。4 _1 h1 ~2 y/ c0 `8 p0 ?0 q- P
( E; |( ~1 A/ ^1 v; }
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。6 A6 i( Q# I$ j ?6 u
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。* M# Y1 L5 E% j" m- I s6 M
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
6 a4 |: F/ L! B& g: ?为了方便观看,用excel做成层级调用关系图。8 L$ M# d2 i+ T: D# q5 v+ A" N
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。$ E3 ^; a, F$ l
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)3 A& a% k- p9 s4 p/ @
: u& D7 R, R: l1 S- 对话字幕断点处
4 ?- H) m" v5 j0 c* I$ B - ! ^1 x8 \6 h8 o" `9 G/ i
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |+ \: n( a8 y# Z7 x/ U& {+ m* e
" H- ]. o/ M8 _2 ?1 L! T# _7 \9 s- 对话字幕显示函数, L+ g- y) i/ \! z
r3 D. Z4 \$ T* Z! N% h0 |- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
3 R- I( ]5 h {8 B1 |8 p
% [) F7 n0 Z2 E! d# Z/ f( p1 }! @1 D. C" A3 u
" L+ z9 |/ p( j+ \/ u& \2 P; [
/ F# E C6 Q: U) p
|