把仙剑奇侠传5的音乐从pkg里请出来变成mp3吧

仙5卖得真的很火爆啊,我到现在还没拿到货。委屈

于是迫不及待地下载了数字版,安装。

看完了CG过场动画,感慨着女一号竟然在游戏还没有结束就香消玉殒了啊。悲催的小凡子。

然后实在对着这个4GB的家伙没事做了,那就拆解了它吧。

破解就不玩了,一是不怎么合法吧,二是脱壳技术菜,我不知道要脱到猴年马月啊……

听仙5的音乐吧……听音乐它还非要弄个PKG文件。

用WinHex打开呗,标识为PK3.0,这不是zip的吗?直接改ZIP解压错误。

悲剧了,看了下文件大小,转16进制,和第二行的数据好接近啊,那第二行前四字节就是有效数据的大小了吧,接着的四个字节不知道是什么东东……

然后就是一堆一堆数据了。起初打开music.pkg时没有注意细节,以为pkg文件用了压缩算法。

但打开sound.pkg文件,看到了RIFF字符,这不是wav文件的块名吗?于是便在music.pkg里找mp3。

FF FB 90 04就是mp3块的分割长整字节啊。但是这四个字节咋就那么多呢,不能作为一个文件的标识啊。

截出两个文件比较了一下,每个mp3文件FF FB 90 04开头后都会有32个00。

那还说什么,写个程序把所有家伙都搬出来啊。


#include <conio.h>
#include <stdio.h>
#include <alloc.h>

int readdata() {
FILE* f;
FILE* out;
unsigned long p = 0;
int x1,x2;
unsigned long px = 0;
int count = 0, fcount = 0;
char r = 0;

out = fopen("h:\\pal5.txt","wb+");
f = fopen("h:\\game\\pal5\\music.zip","rb");

printf("open pal5.txt to output...\n");
printf("open music.zip to read data...\n");

   while(!feof(f)) {
      r = fgetc(f);
      px++;
      if(r==0) {
	 if(count==0) p=px;
	 count++;
      } else {
	 if(count==32) {
	    p=p-5;
	    fwrite(&p,4,1,out);
	    fcount++;
	 }
	 count = 0;
      }
   }
fclose(f);
fclose(out);
printf("finish initializing...\n");
return fcount;
}

void outputdata(int n) {
   FILE *f,*out,*mc;
   char data[1024];
   unsigned long p1=0,p2=0;
   int i;
   char buf[1024] = {0};

   mc=fopen("h:\\game\\pal5\\music.zip","rb");
   f=fopen("h:\\pal5.txt","rb");

   printf("[start output music]\n");

   for(i=0;i<n-1;i++) {
      printf("%2d ",i);
      if((i+1)%10) printf("\n");

      sprintf(buf,"h:\\pal5\\%d.mp3",i);
      out=fopen(buf,"wb+");
      fseek(f,4*i,0);
      fread(&p1,4,1,f);
      fseek(f,4*i+4,0);
      fread(&p2,4,1,f);
      fseek(mc,p1,0);
      p1=p2-p1;
      while(p1>0) {
	 if(p1>1024) {
	    fread(data,1024,1,mc);
	    fwrite(data,1024,1,out);
	    p1-=1024;
	 } else {
	    fread(data,p1,1,mc);
	    fwrite(data,p1,1,out);
	    p1=0;
	 }
      }
      fclose(out);
   }
   printf("\n");
   fclose(f);
   fclose(mc);
}

void main() {
   clrscr();
   outputdata(readdata());
}

上面程序没有截取最后一个mp3,自己查下pal5.txt的输出,然后从偏移开始到最后把它取出来就ok了。

然后62首mp3就在文件夹里了,开听……

有兴趣还可以搜搜model,毕竟仙5用的ReaderWare嘛……

以上仅供学习使用哦……-_-/// 得支持下正版~~~



J.Y.Liu

2011.07.09

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值