本帖最后由 shane007 于 2023-8-23 13:25 编辑 ; r0 K5 u( S" x
6 N: s9 G4 X- `3 V) x% bSDL是4大图形API之一,其他几个是directx,directdraw,opengl
& X1 a" R, w+ g5 a2 [7 u$ c9 c& l, O! Y6 r( { Q
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。 ^% P; c# f- q8 f3 M% O" Z2 w1 l
打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。/ W! {- q0 F" ]2 b. E% {
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
: G" S1 q0 o h) x; F8 m但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
2 W' P. r$ {( Y- ?. Z9 e' N* Y3 Z* g, P: f
p" n& v( O Q9 ^2 e5 t' D, p; D最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
* z, I; _, D0 I6 [结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
" ~! d7 \: |. D+ }& C7 ](这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)) s' b/ I7 o3 w7 a6 f/ K
为了方便观看,用excel做成层级调用关系图。
_0 y& M/ U* |9 I- g$ v$ r下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
: R, ^4 Y9 C2 i) T) E* ~' F- i/ W(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)0 N' a1 m3 Q9 D. Y: z
( g- ^" m$ e! m
- 对话字幕断点处
5 a4 z. S6 a- V - + ~, a: V- s3 u
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |( P/ m0 Y/ j. D. _' g1 |
% _ Q3 D/ S+ t6 J- O' n- 对话字幕显示函数0 H9 f2 v7 y" e/ l1 p
4 ~& }7 {) E/ y- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
- J- @; E# h' F+ A4 D' `
9 b0 ~) ]" F$ j
! _+ \9 F+ ^( T6 ?
0 T( k* c" D3 ~0 K7 a; L- J! q7 B. }- k' F& f+ e2 Q: ` T8 M
|