本帖最后由 shane007 于 2023-8-23 13:25 编辑 / z" E' J( Z0 B0 B5 g
- A- r) D6 v& r
SDL是4大图形API之一,其他几个是directx,directdraw,opengl
# [& U2 [. }/ w. G' o; ^, V3 q* ]# h; b4 W, U
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
0 [0 @8 _: f0 n* f, n- t8 M# F/ M打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
0 q# P0 X6 j" H' S游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
5 d' p) t6 j2 }) [# `% A5 ?但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。% G# I [0 K' }) Z- n
, ]( K0 W" |; V* R/ G7 J最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。4 T$ u+ N9 U$ u1 a& m. t1 r2 @! ^8 M
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。; P; O1 Q1 _# z7 Y- \# @
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
2 ~# U( `/ r, Z1 ?0 E% Z为了方便观看,用excel做成层级调用关系图。
/ X {* N( H- Q9 I( u$ c下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。# M" E: @1 v2 |2 c
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
# u0 |' ?% y& t6 `: N" A& J- I' I9 F* A4 e. M6 f' k! J3 B
- 对话字幕断点处. @3 R! ?2 {" _- i `4 D
- 2 r/ p) I& A4 j4 S
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |* d( K0 Q0 T; o: J: n" E
- Q! f) U1 [/ n
- 对话字幕显示函数
; k2 g/ |5 g" }* ?/ p - ; U& H/ g2 J6 L9 I
- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码
' Y% o6 h j! }7 B F2 T5 \( b3 ?' F5 M
! l/ g3 l5 i; b$ v( {* P3 ^0 R: ]) u0 z8 X B- m
4 `9 D( \7 o+ y( B! _' h
|