标题: 英杰传系列LS格式压缩文件解析
性别:男-离线 van

平曲侯泸川军节度使

Rank: 13Rank: 13Rank: 13Rank: 13
柱国(正二品) 工神
组别 节度使
级别 军师将军
好贴 3
功绩 475
帖子 984
编号 25461
注册 2004-11-24


发表于 2004-11-26 23:54 资料 主页 文集 短消息 只看该作者
英杰传系列LS格式压缩文件解析

经过长时间的摸索,终于发现了英杰传系列所专用的文件格式“LS”的一些信息。下面作一些描述。
三国志系列的文件一般是不压缩的,而英杰传则不同,它的文件一般是LS11(英杰或孔明传)或LS12(曹操传)格式。这是一个压缩文件,因此我一直以来都无法破译其中包含的信息。最近我终于搞清楚了具体的解码算法。我还是直接给出代码,这样可能比说要清楚。
(在三国志7和9中的M_Msg文件也是这种格式的)

typedef integer Type;

static Type nc;
static unsigned char c;
static Type rc;

void GetData(char *FileName,long Pos,long n)
{
FILE *f,*f1;
char *a,b[256];
f=fopen(FileName,"rb");
fseek(f,16,0);
fread(b,1,256,f);
fseek(f,Pos,0);
a=new char[n];
if (DeCode(f,n,a,==-1)
{
printf("Error!");
getchar();
}
else
{
f1=fopen("h:\\temp.dat","w");
fwrite(a,1,n,f1);
fclose(f1);
}
fclose(f);
delete []a;
}

Type DeCode(FILE *f,Type n,char *a,char *
{
Type i,t,nc,c=0;
while (n>0)
{
t=getCode(f);
if (t==-1)
return -1;
if (t>=0x100)
{
t-=0x100;
if (t>c)
return -1;
nc=getCode(f);
if (nc==-1)
return -1;
nc+=3;
//*a++=t;
//*a++=nc;
for (i=0;i<nc;i++)
{
*a=*(a-t);
a++;
}
n-=nc;
c+=nc;
}
else
{
*a++=b[t];
n--;
c++;
}
}
if (n<0) return -1; else return 0;
}

Type getCode(FILE *f)
{
Type t=0,t2,n=0;
do
{
t2=getbit(f,1);
if (t2==-1)
return -1;
t=(t<<1)+t2;
n++;
} while (t2);
t2=getbit(f,n);
if (t2==-1)
return -1;
return t2+t;
}

Type getbit(FILE *f,Type n)
{
Type ct,t=0;
while (n--!=0)
{
if (nc==0)
{
//c=fgetc(f);
if (fread(&c,1,1,f)==0)
return -1;
nc=8;
rc++;
}
nc--;
ct=c&0x80;
t=(t<<1)+(ct>>7);
c<<=1;
}
return t;
}

[ 本帖最后由 恋芸 于 2006-9-10 09:06 编辑 ]


精华帖
顶部
性别:未知-离线 金圭子

白衣伯爵中大夫

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14
组别 白衣卿相
级别 征西将军
好贴 4
功绩 265
帖子 4926
编号 27961
注册 2004-12-16


发表于 2004-12-30 19:15 资料 文集 短消息 只看该作者
问问这儿的是LS11还是LS12的?

恬着脸问问有没有现成的压缩解压缩的程序?


精华帖
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2004-12-30 19:46 资料 文集 短消息 只看该作者
个人推测LS11和LS12只在压缩上不同,上面的程序是解压的,在我的帖子里有位朋友写了个压缩的程序。
精华帖
顶部
性别:未知-离线 金圭子

白衣伯爵中大夫

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14
组别 白衣卿相
级别 征西将军
好贴 4
功绩 265
帖子 4926
编号 27961
注册 2004-12-16


发表于 2004-12-30 19:48 资料 文集 短消息 只看该作者
现在大家对比如data.e5等等压缩过的文件内的东西进行处理,是解压完了修改好了再压缩回去?
精华帖
顶部
性别:未知-离线 金圭子

白衣伯爵中大夫

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14
组别 白衣卿相
级别 征西将军
好贴 4
功绩 265
帖子 4926
编号 27961
注册 2004-12-16


发表于 2004-12-30 19:51 资料 文集 短消息 只看该作者


QUOTE:
原帖由Maxwell于2004-12-30, 19:46:31发表
个人推测LS11和LS12只在压缩上不同,上面的程序是解压的,在我的帖子里有位朋友写了个压缩的程序。

是这个么?
http://www.xycq.net/forum/index.php?showto...pic=35276&st=30
的第三个

手头没有vc啊 T_T,vb倒有………………
(如果实在没现成的压缩解压程序只能自己用vb参照写一个了…………嗯……我是懒人  )
精华帖
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2004-12-30 19:57 资料 文集 短消息 只看该作者
http://www.xycq.net/forum/index.php?showto...ndpost&p=430924

gameplore的代码包括压缩和解压,我给的代码只有解压。
精华帖
顶部
性别:男-离线 博雅张生
(张生手持石鼓文)

象郡公中书令枢密直学士

Rank: 19Rank: 19Rank: 19Rank: 19
资政殿大学士(从一品)
组别 经略使
级别 前将军
好贴 3
功绩 1118
帖子 1730
编号 28805
注册 2004-12-26


发表于 2005-4-1 17:46 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
void GetData(char *FileName,long Pos,long n)

请问这个程序在什么版本下能够正常运行?

Pos和n应当怎样确定?

我在运行这个程序的时候,发现n比较小时尚能解压出一些东西,n稍微大一点就会出错。
精华帖
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2005-4-4 12:19 资料 文集 短消息 只看该作者
pos和n都在文件头中有记载或者可以推测出来的。
精华帖
顶部
性别:未知-离线 asdfgh123456
(VoId)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 14
编号 79149
注册 2006-8-15


发表于 2006-9-10 07:25 资料 短消息 只看该作者
data.e5是压的几个文件??
精华帖
顶部
性别:男-离线 恋芸
(司徒飞麟)

楚国公
监管使
枢密副使
河东路经略使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
资政殿大学士(从一品)
组别 经略使
级别 大将军
好贴 3
功绩 3357
帖子 12529
编号 871
注册 2005-9-24
来自 上海
家族 轩辕学院


发表于 2006-9-10 09:06 资料 个人空间 短消息 只看该作者 QQ
修复主题
精华帖
顶部
性别:未知-离线 mayulei2007

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 8
编号 114222
注册 2007-2-28


发表于 2007-9-27 12:39 资料 短消息 只看该作者
8 错,不过很想知道,van是怎么摸索的?靠察看文件二进制编码吗?

还得到一个信息:看了之后也才知道,不是所有的游戏都压缩,还有只打包不压缩的。

继续学习。
精华帖
顶部
性别:男-离线 小行者

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 讨逆将军
功绩 32
帖子 698
编号 41928
注册 2005-6-29


发表于 2010-11-22 14:57 资料 文集 短消息 只看该作者 QQ Yahoo!
顶楼的两个小图片,显示的地址是

请问覆盖了源程序的什么代码?
精华帖
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2010-11-22 15:37 资料 个人空间 短消息 只看该作者


QUOTE:
原帖由 小行者 于 2010-11-22 14:57 发表
顶楼的两个小图片,显示的地址是

请问覆盖了源程序的什么代码?

B)
精华帖
顶部
性别:男-离线 小行者

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 讨逆将军
功绩 32
帖子 698
编号 41928
注册 2005-6-29


发表于 2010-11-23 17:50 资料 文集 短消息 只看该作者 QQ Yahoo!
谢谢godtype
,很久不玩C语言了。
精华帖
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-12-21 22:21
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.011203 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP