本帖最后由 shane007 于 2023-8-23 13:25 编辑 ! K! H1 M; y% a/ \: m" \( w3 c
- y" j4 t5 L; ^( `) i5 j
SDL是4大图形API之一,其他几个是directx,directdraw,opengl8 p: n& E3 b8 H1 N* Z5 \
$ U$ o4 b8 M8 B( @! N$ g# u3 X断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
9 g1 ~. X( U9 i4 r V9 m1 o' X+ u打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。* C: P ?4 K3 `( P) e) E$ u9 O' ?
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
: P; a5 D2 L+ [" m* y但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。
5 |! X( F1 F, J! ~- O- r1 [, {& |+ s" U* }
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。* ?& a; n$ M# S" V. n; M' F8 Q0 I0 T
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。+ j/ M6 u7 _' E u( I1 f) V
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
* ]# r$ D2 L5 f4 l+ c/ B为了方便观看,用excel做成层级调用关系图。4 X1 J2 M7 m# V# w% ?1 V( w
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。0 C/ L; D" ^# d4 F% o
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
! P* \- [3 I9 z% {; n% H* {6 a8 c) b7 S; w9 Z- b# c+ l1 p0 S+ d; @
- 对话字幕断点处
- j0 y3 v0 {' u. q( o( s$ E
" H7 a, T( M, M1 c0 B) z- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
8 T5 Y8 k2 q# P c) o4 i9 `8 r - ( s+ W: ^) K- r- A
- 对话字幕显示函数' e. _, G1 S8 t6 k, r' S, x( |
- n9 K* c+ K( a0 A* K6 N
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 - `3 }2 ^; v" _- y, I
) V$ Z; j) O2 {6 m1 Q& o4 b a0 i
2 @+ j9 ^+ e" K
* [7 f- ^: ~. `- N: _ Y' m# W. G2 s' E6 x' l( R+ f4 `
|