仙侣奇缘2 big 包压缩解压工具
本帖最后由 隔叶黄鹂 于 2011-10-7 22:49 编辑extract.exe: 在命令行中敲: extract -e talk.big char.big map1.big music.big ...
参数: -i: 看压缩包的信息; -l/-nf: 看压缩包中所有的文件; -pf: 看压缩包中所有的目录; -e 按目录解压到当前文件夹下.
注意每个开关对其后的文件生效, 比如 extract -i a.big -l b.big -pf c.big -e d.big 是看 a.big 的信息, b.big 的文件列表, c.big 的目录列表, 并解压缩 d.big.
compress.exe: 在命令行中敲: compress path.txt name.txt 生成的文件.big
path.txt 是目录名列表, 可以从 extract -pf 中生成
name.txt 是文件名列表, 可以从 extract -l/-nf 中生成
注:
1.根据我对 big 文件格式的分析, 大于 64KB 的文件是分块压缩的. 金山使用的算法是在索引表中写出分了多少块, 而我的算法是对地址作加法校验. 如果看到
warning: ../map2.big::\map\华东\杭州城.jpg(790209->784225)
这样的错误提示, 那就是地址加法校验失败了. 原因目前仍不清楚. 出现的机会也比较少.
2. ZipLib.dll 就是著名的 zlib, 金山把它改了个名字叫 bigfile.dll. 可以不用我包里的 ZipLib.dll 而直接使用游戏目录下的 bigfile.dll, 一回事.
另外: 有谁想编 big 包压缩解压程序的? 我已经完整地分析出了其文件结构, 需要相关资料的 m 我吧. 本帖最后由 隔叶黄鹂 于 2011-10-17 18:16 编辑
另外有谁能发个仙侣2的 img 图像处理工具? img 格式比 big 要复杂, 直接分析我没得到任何结果, 又懒得去追踪游戏主程序了, 有谁有就传上来吧.
2011.10.17 更新
想不到这么老的游戏还是有人关注. 这里应玄天真人的要求, 我把 big 文件格式的相关资料给晒出来吧.
仙侣奇缘 big 文件格式及文件名校验算法
第一部分: 文件头 (16字节)
这一块由如下四个部分组成:
文件格式识码 "xV4\x12" 4字节
压缩文件的数目 4字节
索引表数据偏移 4字节
目录文件数据偏移4字节
第二部分: 压缩文件
这一部分由 N(N=压缩文件数目) 块组成, 每一块的内容是:
压缩数据的长度 2*M 字节
文件的压缩数据
M是文件的块数. 对于超过64KB的文件, 全部是分成64KB的块压缩的. 上面这两个数组的内容是一一对应的.
第三部分: 索引表块
文件头第三个字段指向了索引表块. 索引表块由如下四部分组成:
块标识码 "\xAA\x55\xAA\x55"
索引表长度 4字节
索引表解压缩后长度 4字节
索引表压缩数据
解压缩之后的索引块内容以16字节为单元的、每个压缩文件的压缩信息, 内容是:
文件名校验码 4字节
文件压缩数据的偏移4字节
文件解压后的长度 4字节
分块个数(上文的"M") 4字节
注意:
索引块是按校验码自小而大排列的, 因此索引块中文件的次序和名称文件中的文件次序完全不同.
第四部分: 目录文件块和名称文件块
文件头的第四个字段指向了目录文件块, 目录文件块后面紧跟着的是名称文件块.
这两块的格式和上面索引块一样:
块标识码 "\x55\xAA\x55\xAA"
压缩后的长度 4字节
解压缩后长度 4字节
压缩数据
目录文件和名称文件的具体内容, 可以直接从我的解压程序中得到.
文件名校验算法:
索引文件中是用校验码确定文件名的. 校验码是对文件名串(大写变小写后)做了如下的计算. 这段代码在代码位置 0x0053F434 (push ebp) 到 0x0053F48B (ret) 之间. 注意 game.exe 是用 upx 加壳过的, 反汇编时需注意一下:
unsigned int calc_check_code(char * s, int l){
unsigned int v = 0;
for (int i=0; i<l; i++){
unsigned int a = 0, a1 = 0;
a = (s[ i ] * (i+1) + v) % 0x8000000B;
a1 = a;
v = (unsigned)((-a) << 4) - a1;
}
v ^= 0x12345678;
return v;
}
源码就不帖了, 反正有这些东西, 编程序只是体力活. 有谁有空就编个好用点的程序吧. 我比较懒........ 完全的看不懂。: zq0230280253 发表于 2011-10-7 21:22 static/image/common/back.gif
完全的看不懂。
呃, 我是图省事写了个命令行程序.
比如你要解压缩 talk.big, 就打开一个"命令提示符"(开始|附件|命令提示符), 进入到 talk.big 所在的文件夹,然后敲 extract -e talk.big, 就行了.
其它的东西是修改那些 big 包的内容时用到的. 不错,支持了
:哦 不错 不过新手可能看不明白 {:soso_e102:}谢谢了,先。
仙2早就被开发商放弃了,因为签给金山运营,开发商这边有外挂问题一直解决不好,金山运营一向也是稀里糊涂,两边合作很不愉快,开发商现在主打仙3,建议楼主研究仙3吧 ysws 发表于 2011-10-8 08:07 static/image/common/back.gif
仙2早就被开发商放弃了,因为签给金山运营,开发商这边有外挂问题一直解决不好,金山运营一向也是稀里糊涂,两边 ...
不错的主意. 本来破&解仙侣二的压缩包纯属娱乐, 等分析清楚了仙侣三压缩包的话再跟各位分享吧.
从解包的内容看, 仙侣二客户端的权力实在太大了, 可以做外挂的地方太多了. 如果各位看一看解出来的内容, 我想就会明白侣二的外挂问题. 这个很需要 隔叶黄鹂仙侣奇缘2 big 包压缩解压工具 相关资料有没有 我解开了 不知道怎么压缩了 没图啊 path.txt name.txt需要自己建立吗?? 我是解的开 压不回去了 玄天真人 发表于 2011-10-17 06:45 static/image/common/back.gif
path.txt name.txt需要自己建立吗??
是的, 我偷了点懒, 从 name.txt 中找到所有你要压的文件. 如果谁想写个更方便的程序, 我会提供相关资料的.
其实这两个文件内容很简单的, 后面我会给两个实际的例子, 我都是自己直接做这两个文件. 改 big 的方法是, 你把解出来后文件重新编辑一下, 或者创建一个新的文件, 然后用 compress path.txt name.txt path.big 得到 path.big, 然后在 目录下的 xlqy2.ini 的 这一节里加一行:
8=patch.big
就行了.
注意仙侣2会根据 中的文件重载已有的文件, 比如以前 char2.big 中已经有了 \Char\主角\法术\武士\001.txt, 在 中的某个 big 中也有这个文件, 那么你在游戏中看到的是 中这个文件的内容. 所以不需要修改游戏中已有的包, 直接做一个新的包放在 节里就行了. 而且, 用这种办法的话, patch 里面不需要放所有的东西, 只需要把你改过的文件压缩一下就行了.
最后是两个实际的例子, char.big 中的文件和目录. 如果自己写这两个文件的话注意一下 path.txt 中的次序, 先父文件夹再子文件夹, 不然解压的时候创建目录会出错的.
chra2.big 中 path.txt 的内容: 执行 extract -pf char2.big > path.txt 得到
\Char
\Char\主角
\Char\主角\法术
\Char\主角\法术\武士
\Char\主角\法术\法师
\Char\主角\法术\道士
\Char\任务
\Char\任务\关卡
\Char\动物
\Char\地图
\Char\地图\华东
\Char\地图\华东\桃花岛
\Char\活动
chra2.big 中 name.txt 的内容: 执行 extract -nf char2.big > name.txt 得到
E:\Media
\Char\主角\升级经验.txt
\Char\主角\法术\武士\001.txt
\Char\主角\法术\武士\002.txt
\Char\主角\法术\武士\003.txt
\Char\主角\法术\法师\001.txt
\Char\主角\法术\法师\002.txt
\Char\主角\法术\法师\003.txt
\Char\主角\法术\道士\001.txt
\Char\主角\法术\道士\002.txt
\Char\主角\法术\道士\003.txt
\Char\任务\乱葬岗.chr
\Char\任务\关卡\万年树妖.chr
\Char\任务\关卡\九尾冥狐.chr
\Char\任务\关卡\大力羊魔.chr
\Char\任务\关卡\媚影狐妖.chr
\Char\任务\关卡\巨斧熊魔.chr
\Char\任务\关卡\幽冥象魔.chr
\Char\任务\关卡\幽冥鬼王.chr
\Char\任务\关卡\牛头卫士.chr
\Char\任务\关卡\罗刹鬼.chr
\Char\任务\关卡\羊头卫士.chr
\Char\任务\关卡\荆刺猪王.chr
\Char\任务\关卡\血刀魔卫.chr
\Char\任务\关卡\血狼魔王.chr
\Char\任务\关卡\遗落宝箱.chr
\Char\任务\关卡\铁翼寒鹰.chr
\Char\任务\关卡\骷髅武士.chr
\Char\任务\恩惠盒子.chr
\Char\任务\枯木花妖.chr
\Char\任务\莲花.chr
\Char\任务\蓝灵兽.chr
\Char\动物\110.chr
\Char\动物\119.chr
\Char\动物\120.chr
\Char\动物\125.chr
\Char\动物\126.chr
\Char\动物\127.chr
\Char\动物\128.chr
\Char\动物\129.chr
\Char\动物\130.chr
\Char\动物\131.chr
\Char\动物\132.chr
\Char\动物\133.chr
\Char\动物\134.chr
\Char\地图\华东\桃花岛\凤头鹦鹉.chr
\Char\地图\华东\桃花岛\刺猬.chr
\Char\地图\华东\桃花岛\呆头鸭.chr
\Char\地图\华东\桃花岛\玲珑兔.chr
\Char\地图\华东\桃花岛\胖胖鸟.chr
\Char\活动\仙花.chr
\Char\活动\土1.chr
\Char\活动\土2.chr
\Char\活动\土3.chr
\Char\活动\土4.chr
\Char\活动\土魔.chr
\Char\活动\圣诞宝箱.chr
\Char\活动\圣诞树.chr
\Char\活动\圣诞老人.chr
\Char\活动\地仙.chr
\Char\活动\坟墓.chr
\Char\活动\天兵十夫长.chr
\Char\活动\天兵千夫长.chr
\Char\活动\天兵百夫长.chr
\Char\活动\天庭大将.chr
\Char\活动\小金猪.chr
\Char\活动\年兽.chr
\Char\活动\幽冥侍卫.chr
\Char\活动\幽冥战将.chr
\Char\活动\幽冥鬼众.chr
\Char\活动\幽冥鬼狐.chr
\Char\活动\张大妈.chr
\Char\活动\怒斩金将.chr
\Char\活动\慧缘禅师.chr
\Char\活动\易水.chr
\Char\活动\木1.chr
\Char\活动\木2.chr
\Char\活动\木3.chr
\Char\活动\木4.chr
\Char\活动\木魔.chr
\Char\活动\杨树.chr
\Char\活动\柳树.chr
\Char\活动\桃树.chr
\Char\活动\梧桐.chr
\Char\活动\榆树.chr
\Char\活动\水1.chr
\Char\活动\水2.chr
\Char\活动\水3.chr
\Char\活动\水4.chr
\Char\活动\水魔.chr
\Char\活动\火1.chr
\Char\活动\火2.chr
\Char\活动\火3.chr
\Char\活动\火4.chr
\Char\活动\火魔.chr
\Char\活动\灵鼠.chr
\Char\活动\炽火.chr
\Char\活动\烈金.chr
\Char\活动\焦土.chr
\Char\活动\白素贞.chr
\Char\活动\短柳.chr
\Char\活动\矮杨树.chr
\Char\活动\石牛精.chr
\Char\活动\绿杨.chr
\Char\活动\舞天.chr
\Char\活动\茶树.chr
\Char\活动\荒废的农田.chr
\Char\活动\藏仙.chr
\Char\活动\野1.chr
\Char\活动\野10.chr
\Char\活动\野11.chr
\Char\活动\野12.chr
\Char\活动\野13.chr
\Char\活动\野14.chr
\Char\活动\野15.chr
\Char\活动\野16.chr
\Char\活动\野2.chr
\Char\活动\野3.chr
\Char\活动\野4.chr
\Char\活动\野5.chr
\Char\活动\野6.chr
\Char\活动\野7.chr
\Char\活动\野8.chr
\Char\活动\野9.chr
\Char\活动\金1.chr
\Char\活动\金2.chr
\Char\活动\金3.chr
\Char\活动\金4.chr
\Char\活动\金魔.chr
\Char\活动\钥匙孔.chr
\Char\活动\铁匠杜衡.chr
\Char\活动\铁牛精.chr
\Char\活动\铜牛精.chr
\Char\活动\青木.chr
\Char\活动\颜桃树.chr 本帖最后由 隔叶黄鹂 于 2011-10-17 18:12 编辑
玄天真人 发表于 2011-10-16 19:58 static/image/common/back.gif
隔叶黄鹂仙侣奇缘2 big 包压缩解压工具 相关资料有没有
你是要压缩包的格式吗? 我找一下, 呆会直接写在帖子里面. 详见沙发帖. 谢谢哈 不知道你IMG图像弄的怎么样了 玄天真人 发表于 2011-10-17 20:24 static/image/common/back.gif
谢谢哈 不知道你IMG图像弄的怎么样了
IMG 我已经分析出一部分格式内容, 最近有点忙, 暂时没时间去分析这些代码, 所以把目前的进度帖出来, 希望有谁来解读一下 IMG 格式. 其实都是体力活了.
现在知道是 256 色的 BMP (一点也没压缩), 只是编码方式有点奇怪, 透明的地方在编码中大概是直接跳过的. 我已经追踪到解码函数, 目前追踪到这些代码:
005397F0 IMG 格式和 SPR 格式处理跳转到相同的处理函数地址 005397F0, 说明这两种格式没有差别.
005397F0 开始图像解码, 读图像大小 数目 颜色深度什么的
00539904 调用图像颜色转换代码:
++005399DD8 位颜色转换到 24 位颜色的程序, 调色板内存次序是 RGB (注意 Windows BMP 是 BGR)
++005399EF图像已经换码完毕
00539BEC 开始图像数据解码程序段
+00539CE7 调用行解码程序:
++0053FCBC开始行数据解码程序段
IMG 格式的全部内容就在这些代码里面. 最好写个程序
页:
[1]
2