spk文件打包解包

合集下载

解包和打包exe文件的方法

解包和打包exe文件的方法

解包和打包exe文件的方法1.引言1.1 概述概述:在软件开发过程中,我们经常会遇到需要解包和打包exe文件的情况。

解包exe文件是指将经过编译的可执行文件进行还原,以获取其中的源代码、资源文件等内容。

而打包exe文件则是将源代码和相关资源文件重新打包成可执行文件。

这两个操作在软件开发、软件逆向工程和软件调试等领域中都有广泛的应用。

解包exe文件的方法可以分为使用解包工具和手动解包两种方式。

使用解包工具是指使用专门的软件工具来进行解包操作,它能够自动分析可执行文件的结构并提取其中的内容。

手动解包则是通过一些常见的手段,如二进制文件编辑器或调试器,以手动的方式逆向还原可执行文件中的内容。

打包exe文件的方法也可以分为使用打包工具和手动打包两种方式。

使用打包工具可以方便地将源代码和相关资源文件打包成可执行文件,它提供了简单易用的图形界面和各种打包选项。

手动打包则需要开发人员手动进行文件的整理和编译操作,相对来说比较繁琐。

总结起来,解包和打包exe文件是软件开发中常见的操作,通过解包我们可以获取到可执行文件中的源代码和资源文件,有助于我们理解和调试软件;而打包exe文件则可以将我们的源代码和资源文件重新打包成可执行文件,方便我们发布和分发软件。

在进行解包和打包操作时,可以根据需要选择使用相应的工具或手动操作的方式,以达到我们的目的。

1.2 文章结构文章结构负责为读者介绍本文的组织和内容安排。

本文主要围绕解包和打包exe文件的方法展开讨论。

在本文中,我们将首先提供一个引言部分,概述本文的背景和目的。

接下来,将详细介绍解包exe文件的方法,包括使用解包工具和手动解包。

然后,我们将探讨打包exe文件的方法,包括使用打包工具和手动打包。

最后,我们将通过总结解包和打包exe文件的方法,提供一些结论和建议。

通过本文的阅读,读者将能够全面了解解包和打包exe文件的技术和方法,并且可以根据自己的需求选择适合的方式进行操作。

路由器固件的解包与打包

路由器固件的解包与打包

路由器固件的解包与打包一、概述当前大学生都被校园网的客户端困扰,然而南京工程学院公布了Linux客户度解决方案,或者Mentohust解决方案,可以在Ubuntu系统的计算机上运行了。

但进一步的工作就是如何令其在路由器上工作,以达到真正的路由功能。

假定笔者已经把电脑上完美运行的客户端进行了交叉编译,生成了要在路由上运行的拨号程序(假定为Client),且笔者的路由器有合适的固件(假定为firm.bin)。

那么要在路由器上运行Client有三种方法:1.可以把Client上传到路由器的/jffs目录下。

(本文不讨论这种情形)2.刷写dd后,由于剩余容量太小导致无法加载jffs,那么每次启动路由后,可以将程序Client 上传到刷写了firm.bin路由的/tmp目录下,然后令其运行。

简单的说,就是在内存里运行Client。

其缺点就是每次路由断电,你必须重新上传。

(本文不讨论这种情形)3.当路由器无法加载jffs时,可以考虑将Client程序增添至固件,并且在自启动命令里输入正确的命令方式,以达到每次路由插上电,都可以自动运行拨号程序的完美效果。

以下讨论的为如何将Client固化至固件的方法。

所需软件为firmware-mod-kit,大致步骤为:1.先用解包软件解包路由器固件将会得到固件核心文件。

2.再把Client复制到固件的某个文件夹内,且注意赋予可执行的权限。

3.用build-ng.sh进行最终的封包,生成新的固件。

操作环境:Ubuntu 11.04版参考资料:/p/mentohust-wrt//p/firmware-mod-kit/ Firmware Modification Kit并感谢第一个项目的作者给我的指导和帮助。

我只是把他没有写明白的步骤,以我自己的理解方式重述而已。

二、详细步骤1.首先下载firmware-mod-kit封包软件,并进行编译,将会得到所需文件。

1.1下载firmware-mod-kit封包软件并在终端窗口里输入以下命令:svn checkout /svn/ firmware-mod-kit-read-only耐心的等待之后,会在你的本地硬盘上生成一个目录firmware-mod-kit-read-only,其中包含branches,tags,trunk,wiki四个文件夹。

路由器固件的解包与打包2024

路由器固件的解包与打包2024

引言概述:路由器固件解包与打包是指将嵌入式设备(如路由器)上的固件进行解开和重新打包的过程。

这个过程对于嵌入式设备的软件开发和定制化非常重要。

本文将详细介绍用于解包和打包固件的工具和步骤。

正文内容:一、解包固件1.1提取固件文件:从路由器设备中提取固件文件,可以使用DD命令或者串口控制台提取。

1.2解压固件文件:使用解压工具,如binwalk,将固件文件进行解压,得到固件的各个组成部分。

1.3分析固件:通过分析解压后的固件文件,了解各个组成部分的结构和功能。

二、打包固件2.1修改固件:根据需求,对固件文件进行修改,如添加新的软件包、修改配置文件等。

2.2重新打包固件:将修改后的文件重新打包成固件格式,可以使用mkimage等工具进行打包。

三、固件的烧录与更新3.1硬件烧录:将打包好的固件通过串口或者JTAG接口烧录到设备的闪存中。

3.2固件更新:将新的固件通过WEB界面或者命令行进行更新,确保设备上的固件是最新版本。

四、错误处理与调试4.1解包错误处理:解包固件时可能会遇到一些错误,如文件损坏或者解压失败,需要进行错误处理。

4.2打包错误处理:打包固件时可能会遇到一些错误,如文件格式不兼容或者依赖关系错误,需要进行错误处理。

4.3调试固件:使用调试工具,如GDB,对固件进行调试,查找和修复潜在问题。

五、固件安全性5.1固件签名:为了确保固件的可靠性和完整性,可以对固件进行签名,防止被篡改或者恶意替换。

5.2固件加密:对固件进行加密,防止固件被逆向工程或者泄露敏感信息。

5.3固件验证:通过验证机制,如校验和或者哈希值等,确保固件在传输和存储过程中的完整性。

总结:路由器固件的解包与打包对于定制化和软件开发非常重要。

通过解包固件,可以深入了解嵌入式设备的软件和硬件组成部分。

通过打包固件,可以将所需的修改和定制化应用到设备上。

固件的烧录与更新、错误处理与调试以及固件的安全性也是不可忽视的。

通过掌握解包与打包固件的技术,可以更好地定制和管理嵌入式设备的固件。

使用tar命令打包和解包文件和

使用tar命令打包和解包文件和

使用tar命令打包和解包文件和tar命令是Linux及Unix系统中常用的文件打包和解包工具之一。

它可以将多个文件或目录打包成一个归档文件,并且可以通过解包还原出原始文件和目录结构。

本文将介绍tar命令的主要用法和一些常见的应用场景。

一、tar命令的基本用法1. 打包文件:要打包文件,可以使用tar命令的-c参数,结合-f参数指定归档文件名。

例如,要将当前目录下的所有文件打包成一个名为archive.tar的归档文件,可以执行以下命令:```shelltar -cf archive.tar *```2. 解包文件:要解包已经打包好的归档文件,可以使用tar命令的-x参数,结合-f 参数指定归档文件名。

例如,要解包名为archive.tar的归档文件,可以执行以下命令:```shelltar -xf archive.tar```3. 查看归档文件内容:要查看归档文件中包含的文件列表,可以使用tar命令的-t参数,结合-f参数指定归档文件名。

例如,要查看名为archive.tar的归档文件中包含的文件列表,可以执行以下命令:```shelltar -tf archive.tar```4. 同时打包和压缩文件:tar命令还支持和gzip、bzip2等压缩工具结合使用,以实现同时打包和压缩文件的功能。

例如,要将当前目录下的所有文件打包成一个名为archive.tar.gz的压缩包,可以执行以下命令:```shelltar -czf archive.tar.gz *```二、tar命令的高级用法1. 打包指定目录:如果只需要打包指定的目录或文件,可以在tar命令中指定路径。

例如,要打包指定目录/dir下的所有文件,可以执行以下命令:```shelltar -cf archive.tar /dir```2. 排除某些文件或目录:有时候我们希望在打包文件时排除某些文件或目录,可以使用tar 命令的--exclude参数。

C语言——文件的打包与解包

C语言——文件的打包与解包

C语⾔——⽂件的打包与解包要求:将多个⽂件打包到同⼀⽂件,然后进⾏解包,解包时如果⽂件名重复进⾏标号。

PS:这⾥只有打包功能,没有对⼤⼩进⾏压缩。

先考虑两个问题:(1)解包时如何将不同⽂件分开?我们可以在写⼊⽂件内容前,提前写⼊⼀个结构体,这个结构体存有⽂件的⼤⼩和⽂件名,这样在解包时,我们总是先读出⼀个结构体,得到下⼀个⽂件的⼤⼩和⽂件名,然后按照⼤⼩读出内容即可。

(2)如何判断⽂件名是否重复?因为是C语⾔,没有map映射,所以⼿搓了⼀个哈希函数进⾏标记(但模数不是很⼤,打包⽂件较多容易冲突)。

⼀些细节的完善请⾃⾏实现。

打包程序如下:1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 #include <time.h>5#define USER_NAME_LEN 1006#define EMAIL_LEN 1007#define TIME_BUF_LEN 1008#define FILE_NAME_LEN 3009#define BUF_LEN 2010#define DWORD unsigned long11 typedef struct FileStruct12 {13char fileName[FILE_NAME_LEN];14int fileSize;15 } FileStruct;16char name[FILE_NAME_LEN];17char buf[BUF_LEN];18int getFileSize(char *fileName)19 {20 FILE* fp;21if((fp=fopen(fileName,"rb"))==NULL)22 {23 printf("⽂件打开失败!\n");24return -1;25 }26 fseek(fp,0L,SEEK_END);27int s=ftell(fp);28 fclose(fp);29return s;30 }31int main(void)32 {33 FILE* dfile;34 printf("输⼊⽬标⽂件名(含路径):");35 scanf("%s",name);36if((dfile=fopen(name,"wb"))==NULL)37 {38 printf("⽂件打开失败!\n");39return0;40 }41int kase=0;42 FILE* sfile;43while(1)44 {45 printf("输⼊要打包的#%d⽂件(含路径):",++kase);46 scanf("%s",name);47if(strcmp(name,"exit")==0)break;48if((sfile=fopen(name,"rb"))==NULL)49 {50 printf("⽂件打开失败!\n");51return0;52 }53 FileStruct f;54 f.fileSize=getFileSize(name);55if(f.fileSize==-1)return0;56 strcpy(f.fileName,strrchr(name,'\\')+1);57if(fwrite(&f,sizeof(FileStruct),1,dfile)!=1)printf("file write error!\n");58int len=0;59while((len=fread(buf,1,BUF_LEN,sfile))>=BUF_LEN)60 {61 fwrite(buf,1,BUF_LEN,dfile);62 }63 fwrite(buf,1,len,dfile);64 }65 printf("打包结束!\n");66 fclose(dfile);67 fclose(sfile);68 getchar();69 getchar();70return0;71 }解包程序如下:1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 #include <time.h>5#define USER_NAME_LEN 1006#define EMAIL_LEN 1007#define TIME_BUF_LEN 1008#define FILE_NAME_LEN 3009#define BUF_LEN 2010#define DWORD unsigned long11#define ull unsigned long long12 typedef struct FileStruct13 {14char fileName[FILE_NAME_LEN];15int fileSize;16 } FileStruct;17 FileStruct f;18char name[FILE_NAME_LEN];19char buf[BUF_LEN],ans[BUF_LEN];20char dic[FILE_NAME_LEN];21int cnt[19260817];22 ull base=131,mod=19260817;23 ull hashs(char* s)24 {25int len=strlen(s);26 ull ans=0;27for(int i=0;i<len;++i)ans=(ans*base+(ull)s[i])%mod;28return ans;29 }30char* div(char* dname)31 {32 memset(ans,'\0',sizeof(ans));33char* leave;34 leave=strrchr(dname,'.');35int i=0;36while(dname+i!=leave)37 {38 ans[i]=dname[i];39 ++i;40 }41return ans;42 }43int main(void)44 {45 printf("输⼊⽬标⽂件夹:");46 scanf("%s",dic);47 printf("输⼊要解包的⽂件:");48 scanf("%s",name);49 FILE* sfile;50 FILE* dfile;51if((sfile=fopen(name,"rb"))==NULL)52 {53 printf("⽂件打开失败!\n");54 getchar();55 getchar();56return0;57 }58while(fread(&f,sizeof(FileStruct),1,sfile)==1)59 {60char temp[BUF_LEN],part[BUF_LEN]="(0)";61 strcpy(temp,dic);62 strcat(temp,"\\");63 strcat(temp,div(f.fileName));64 ull res=hashs(f.fileName);65if(cnt[res]++)66 {67 part[1]+=cnt[res];68 strcat(temp,part);69 }70 strcat(temp,strrchr(f.fileName,'.'));71if((dfile=fopen(temp,"wb"))==NULL)72 {73 printf("⽂件解包失败!\n");74 getchar();75 getchar();76return0;77 }78int left=f.fileSize;79while(left)80 {81int Size=left>BUF_LEN?BUF_LEN:left;82 fread(buf,Size,1,sfile);83 fwrite(buf,Size,1,dfile);84 left-=Size;85 }86 }87 printf("解包结束!\n");88 fclose(sfile);89 fclose(dfile);90 getchar();91 getchar();92return0;93 }。

hpk文件解压方法

hpk文件解压方法

hpk文件解压方法概述hpk文件是一种常见的压缩文件格式,通常用于打包和分发软件、游戏等应用程序。

本文将介绍hpk文件的解压方法,帮助读者了解如何提取和使用hpk文件中的内容。

解压工具在进行hpk文件解压之前,我们需要准备一个可靠的解压工具。

以下是几个常用且功能强大的解压工具推荐:1.7-Zip:一个免费且开源的解压缩软件,支持多种格式,包括hpk文件。

它提供了直观易用的界面和高度可定制化的选项。

2.WinRAR:一款功能强大而且广泛使用的解压缩软件,同样支持hpk文件。

它具有快速解压速度和稳定性,并提供了丰富的功能和选项。

根据个人需求和偏好选择适合自己的解压工具,并确保已经正确安装和配置。

解压步骤下面是一般情况下使用7-Zip或WinRAR进行hpk文件解压的步骤:1.打开7-Zip或WinRAR软件。

2.在界面中找到并选择要解压的hpk文件。

可以通过点击“浏览”按钮或直接拖放文件到软件窗口来选择文件。

3.点击软件界面上的解压缩按钮或右键点击hpk文件,在弹出的菜单中选择“解压缩到指定文件夹”选项。

4.在解压设置中,可以选择解压缩后的目标文件夹和其他选项。

确保选择一个合适的目标路径,并根据需要进行其他设置。

5.点击“确定”按钮开始解压过程。

软件将会自动将hpk文件中的内容提取到指定的目标文件夹中。

6.解压完成后,可以在目标文件夹中查看和使用解压出来的文件。

注意事项在使用hpk文件解压时,需要注意以下几点:1.确保已经正确安装并配置了相应的解压工具。

如果没有安装相关软件,可以从官方网站下载并按照提示进行安装。

2.选择一个合适的解压路径。

避免将大量文件解压到系统盘或其他重要位置,以免占用过多磁盘空间或覆盖重要数据。

3.如果hpk文件被密码保护,需要提供正确的密码才能成功解压。

确保已经获得了正确的密码,并在解压时输入密码以完成操作。

4.在某些情况下,hpk文件可能由多个部分(例如分卷压缩)组成。

在解压之前,需要确保所有部分都位于同一目录下,并选择其中的一个文件进行解压。

APK应用程序的解包、修改、编辑、汉化、打包及应用

APK应用程序的解包、修改、编辑、汉化、打包及应用

APK应⽤程序的解包、修改、编辑、汉化、打包及应⽤第⼆部分:三星闭源系统apk⽂件的处理,汉化和签名在这⼀部分,我们要进⼊实战。

⾸先,利⽤⼀个具体的例⼦来阐述apk⼯具包的使⽤,对apk⽂件进⾏解包、汉化、打包和签名。

然后,我们来对付三星闭源系统的apk程序,达到我们修改、汉化和美化的⽬的。

我们假定所有apk⽂件都是单个独⽴⽂件,不含odex⽂件(在官版ROM中,通常每个apk都分成两部分,第⼀部分是apk,第⼆部分是odex。

将它们合并是另⼀个题⽬,这⾥不作叙述)。

1. 配置框架(Framework)环境在处理APK⽂件时,apktool需要框架⽂件(framework-res.apk)来解码和打包。

apktool已经包含了标准的框架,所以在⼤多数APK⽂件的解包时,不需要另外提供框架⽂件。

但是,某些制造商(例如三星)使⽤了他们⾃⼰的框架⽂件,为了解包,就不得不从⼿机中或从ROM中把框架⽂件(framework-res.apk)提取出来,然后安装到计算机。

安装命令是:apktool if framework-res.apk安装后就会得到:~\apktool\framework\1.apk注意:三星系统(例如:I897)有两个框架⽂件:framework-res.apk和twframework-res.apk。

在使⽤apktool之前,要安装这两个框架⽂件。

安装⽅法同上:apktool if framework-res.apkapktool if twframework-res.apk安装后就会得到:~\apktool\framework\1.apk和~\apktool\framework\2.apk。

许多⼈拿来apktool⼯具包⽤,说解不开包,运⾏出错。

原因是没有配置框架环境。

2. akp⽂件的汉化和修改我⾸先来讲对⼀般的(⾮三星)apk应⽤程序进⾏解包、汉化和打包。

为你们⽅便和叙述⽬的,我在上传的apktool和apk manager⼯具包⾥都带了⼀个⼩的apk应⽤程序SilentBoot_EN.apk。

打包解包与软件结构教程

打包解包与软件结构教程

我们今天的课程:解包打包与软件结构准备工具:Sis编辑器首先介绍一下我们需要的工具:本站"大罗"开发的sis编辑器,这也是以后我们以后解包打包的必备工具所谓汉化,就是把外文的软件中文化,我们就要修改软件里的语言文件来实现中文化,那么如何得到语言文件呢?这就需Sis编辑器解包出来才能得到解包:大家跟着一起来做,首先打Sis编辑器,按选项→选择打开sis/sisx文件,现在我们看到两个选择盘,打开任意一个会以文件管理方式来显示在我们的眼前如图现在我们以课件里的aRed软件为例,找到之后按选择,选择之后,页面会回到Sis编辑器智能界面如图现在我们看到"程序名称""程序UID""程序版本""程序语言""程序提供""程序提供(本地)""安装类型""创建日期""创建时间""目标设备""文件列表"等如果我们要找到语言文件必须要在"文件列表"里面找,现在我们按选项→编辑,现在出现我们眼前有好几个文件如图在这我必须要说一下,我们要找的语言文件后缀一般都是在rsc里面,语言文件也可以是r01…r16…的情况,r01是英语,r16是俄语,r31是中文,如果你在rsc里面找不到要汉的语言可以在相应的语言后缀里面找找到之后我们可以按左键选项提取出来汉化,提取出来的语言包可以放在C盘E盘,其中File_0.txt文件是安装时弹出的信息,可以提取出来编辑,编辑时可以是本站宣传信息和免责声明如:=掌握智能共享天下本程序由Amril、麦子汉化出品更多精彩请访问:八神智能天下提醒您:本程序不保证能兼容所有手机硬件,您必须自行担负所有可能因使用本程序而发生的风险!打包∶当你汉化完成的时候,需要打包软件才能实现软件安装,现在要做的就是要将你刚才提取出来的语言包并汉化完成的来替换"文件列表"里面相应的文件,然后按返回现在我们主要是修改界面的文字如"程序名称"的"aRed"可以改成"红键切换""程序UID"和"程序版本"不要改,"程序语言"打开可以添加语言,按选项→添加语言→选择中文,然后把光标移到中文按确认,"程序提供"是作者名字,尊重作者不要改"安装类型"有‘标准程序[SA]’‘主题/系统插件[SP]’‘程序升级/补丁[PU]’‘预装程序[PA]’‘预装补丁[PP]’我们要选择的是"标准程序[SA]"其他的等你们慢慢搞明白,剩下的"创建日期"创建时间"目标设备都不要改如图修改完后按选项→保存就算是打包了最后给大家提醒下,汉化测试最重要,汉化也不是单靠翻译还要靠理解,有些单词翻译出来语不成句,我们就要去理解该功能的作用来汉化好了,这节课就讲到这。

文件(含多级子目录)的打包和解包(下)

文件(含多级子目录)的打包和解包(下)

⽂件(含多级⼦⽬录)的打包和解包(下) 现在咱们说说解包,⼀个.dat⽂件,⾥⾯不知道包含了多少个⽂件/⽂件夹的信息,我们怎么解包呢?⼜怎么保证⽂件与⽂件之间、⽂件与其⼦⽂件之间的分级对应关系呢?下⾯我们来回顾⼀下打包的过程:把⽂件/⽂件夹的外部信息(⽂件名、⽂件名长度、⽂件的长度)/(⽂件夹名、⽂件夹名长度、⽂件的长度、⽂件的相对路径信息、⽂件类型)以结构体的形式存放在.dat⽂件中,内容也保存到.dat⽂件中 解包参数设置: bool UnPackFileAndDirectory(const string& inputzipfile, const string& outputpath) 其中第⼀个参数inputzipfile是要解包哪个⽂件(全路径),第⼆个参数outputpath是解包在哪⼀路径下(给定路径) 解包按照打包接⼝逻辑的话:⽂件、⽂件夹的顺序读取内容即可,当然啦,两边的结构体信息要定义相同,这样⼤家的协议就⼀样,解包便不会出现问题了。

解包流程:1.定位解包⽂件;2.解包⽂件部分(⽂件外部信息+⽂件内容),写⼊到指定路径下;3.解包⽂件夹部分(⽂件夹外部信息,没有内容哈,⽂件夹的内容为0),创建⽂件夹,并建⽴在指定路径下1bool UnPackFileAndDirectory(const string& inputzipfile, const string& outputpath)2 {3 FILE *rfp = NULL;4 rfp = fopen(inputzipfile.c_str(), "rb");5if (rfp == NULL)6 {7 cout << "解包:⽂件打开失败!" << endl;8return false;9 }1011//⽂件部分12int filecount;13 fread(&filecount, sizeof(filecount), 1, rfp);1415for (size_t i = 0; i < filecount; i++)16 {17struct FileInfo packFile;18 fread(&packFile, sizeof(packFile), 1, rfp);1920 cout << "filename:" << packFile.FileName << ", nameLen:" << packFile.fileNameLen << ", fileLen:" << packFile.fileSize << endl;21string path_file = outputpath + '\\' + packFile.FileName; //path_file:全路径2223 FILE *unpackFile = NULL;24 unpackFile = fopen(path_file.c_str(), "wb");25if (unpackFile == NULL)26 {27 cout << "⽂件:⽂件创建失败!" << endl;28 }2930 unsigned char*tmpBu = new unsigned char[packFile.fileSize];31 fread(tmpBu, packFile.fileSize, 1, rfp);//当然也可以不借助缓冲区32 fwrite(tmpBu, packFile.fileSize, 1, unpackFile);3334 }35 cout << endl;3637//⽂件夹部分38int folderCount;39 fread(&folderCount, sizeof(folderCount), 1, rfp);4041for (size_t i = 0; i < folderCount; i++)42 {43struct FolderInfo folder;44 fread(&folder, sizeof(folder), 1, rfp);4546//⽂件夹的基本信息47 cout << "FolderName:" << folder.FolderName << ", nameLen:" << folder.FolderNameLen << ", FolderSize:" << folder.FileSize << ", path:" << folder.Filepath << ", type:" << folder.type << endl; 4849string path_folder = outputpath + '\\' + folder.Filepath; //解包后全路径50const char * Lpath = path_folder.c_str();5152if (folder.type == 0 ) //⽂件类型53 {54 FILE * unpackFolders = NULL;55 unpackFolders = fopen(path_folder.c_str(), "wb");56if (unpackFolders == NULL)57 {58 cout << "⽂件夹:⼦⽂件创建失败!" << endl;59 }6061 unsigned char*readFolder = new unsigned char[folder.FileSize];62 fread(readFolder, folder.FileSize, 1, rfp);63 fwrite(readFolder, folder.FileSize, 1, unpackFolders);6465 }66if (folder.type == 1)//⽂件夹类型67 {68 ::CreateDirectory(Lpath, NULL); //创建⽂件夹69 }70 }7172return true;73 } 细⼼的⼩伙伴都发现了,我在⽂件解包和打包的过程中,都⽤到了临时的缓冲区:unsigned char*tmpBu = new unsigned char[fileSize];我为什么不直接从⼀个⽂件读再写⼊⽬标⽂件呢?主要是我之前就是那么⼲的,结果发现有的⽂件解包出来与原来的⽂件并不⼀致。

pak文件的打包和解包

pak文件的打包和解包

pak⽂件的打包和解包pak格式的⽂件⼀般游戏有资源游戏素材会打包放进去⽐如游戏语⾳游戏多加点语⾳多加⼀些贴图资源外部⽂件实现的素材--->pak⽂件--->⽤的时候从⽂件中取出来⽂件的打包1 #include<iostream>2 #include<fstream>//观于⽂件的头函数3using namespace std;45struct fileInfo6 {7int fileSize;//⽂件⼤⼩8int fileOff;//⽂件在pak中的偏移9int fileNameSize;//⽂件名的长度10char* fileName;//⽂件名11 };12int main()13 {14 fileInfo pic[4] = { { 0, 0, 0, "背景.jpg" }, { 0, 0, 0, "⼈物.jpg" }, { 0, 0, 0, "箱⼦.jpg" }, { 0, 0, 0, "⽬的地.jpg" } }; 15//初始化结构体给结构体内存放数据16int listNum = 4, listSize = 8;1718 fstream resFile[4];//源⽂件19 fstream srcFile;//打包之后的⽂件20for (int i = 0; i < 4; i++)21 {22 resFile[i].open(pic[i].fileName, ios::in | ios::binary);//打开⽂件⽂本或⼆进制⽂件23 resFile[i].seekg(0, ios::end);//将⽂件指针移动到⽂件末尾end24 pic[i].fileSize = resFile[i].tellg();//得到⽂件的⼤⼩tellg25 pic[i].fileNameSize = strlen(pic[i].fileName);//求⽂件名长度26 listSize += 4 + 4 + 4 + pic[i].fileNameSize;//加上单条索引表的长度27// ⽂件⼤⼩4 +⽂件偏移量4+ ⽂件名⼤⼩4 +⽂件名长度28 }29for (int i = 0; i < 4; ++i)30 {31if (i == 0)//第⼀个⽂件32 {33 pic[i].fileOff = listSize;//第⼀个⽂件的偏移量就是索引表⼤⼩34 }35else36 {37 pic[i].fileOff = pic[i - 1].fileOff + pic[i - 1].fileSize;38//计算后⾯的⽂件偏移量39 }40 }41 srcFile.open("new.pak", ios::out | ios::binary);//准备写⼊⽂件4243 srcFile.write((char*)&listSize, sizeof(int));//写⼊索引表的⼤⼩和索引表的个数44 srcFile.write((char*)&listNum, sizeof(int));4546for (int i = 0; i < 4; ++i)//写索引表47 {48 srcFile.write((char*)&pic[i].fileSize, sizeof(int));49 srcFile.write((char*)&pic[i].fileOff, sizeof(int));50 srcFile.write((char*)&pic[i].fileNameSize, sizeof(int));51 srcFile.write(pic[i].fileName, pic[i].fileNameSize);52 }5354for (int i = 0; i < 4; ++i)//写⼊⽂件内容55 {56 resFile[i].seekg(0, ios::beg);//将⽂件指针移动到⽂件开头57while (!resFile[i].eof())//写⽂件58 {59 srcFile.put(resFile[i].get());60 }61 srcFile.seekp(-1, ios::cur);//删掉⼀个字节避免多写⼊数据62 resFile[i].close();//写完关闭63 }6465 srcFile.close();666768 cin.get();69return0;70 }//运⾏后将⽂件打包到new.pak中⽂件的解包1 #include<iostream>2 #include<fstream>3using namespace std;45struct fileInfo6 {7int fileSize;//⽂件⼤⼩8int fileOff;//⽂件在pak中的偏移9int fileNameSize;//⽂件名的长度10char fileName[128];//⽂件名11 };121314int main()15 {16 fstream file;17 file.open("new.pak", ios::in | ios::binary);//读取⽂件18 fileInfo pic[4];//写⽂件的时候⼤⼩可能不⽌四个19int listSize, listNum;// Num是索引表的个数2021 file.read((char*)&listSize, sizeof(int));//读到索引表的⼤⼩22 file.read((char*)&listNum, sizeof(int));2324//读取每条索引的内容25for (int i = 0; i < listNum; ++i)26 {27 file.read((char*)&pic[i].fileSize, sizeof(int));28 file.read((char*)&pic[i].fileOff, sizeof(int));29 file.read((char*)&pic[i].fileNameSize, sizeof(int));30 file.read(pic[i].fileName, pic[i].fileNameSize);//需要注意\031 pic[i].fileName[pic[i].fileNameSize] = '\0';32 cout << i << "个⽂件的内容------------------" << endl;33 cout << pic[i].fileSize << endl;34 cout << pic[i].fileOff << endl;35 cout << pic[i].fileNameSize << endl;36 cout << pic[i].fileName << endl;37 }38 fstream res[4];//⼤⼩其实⽤vector或者new好⼀点 listNum394041//前⾯有⽂件⼤⼩和⽂件偏移量如果读取特定的⽂件可以直接⽤索引中的⼤⼩和偏移量读取42for (int i = 0; i < listNum; ++i)43 {44 res[i].open(pic[i].fileName, ios::out | ios::binary);45for (int j = 0; j < pic[i].fileSize; ++j)46 {47 res[i].put(file.get());48 }49 res[i].close();50 }515253 file.close();//关闭⽂件54 cin.get();55return0;56 }//运⾏exe⽂件将图⽚⽂件解包。

APK文件的解包打包和修改

APK文件的解包打包和修改

APK⽂件的解包打包和修改APK⽂件的解包打包和修改相信每位玩机的⼈对APK⽂件都不陌⽣。

你可能每天都与APK⽂件打交道,⽆论是安装和卸载有⽤的应⽤⼯具、插件、好玩的游戏等等。

你可曾知道这些每天都伴随着你的APK⽂件是什么吗?怎样对它们作些修改呢?⽐如说:对英⽂版进⾏汉化、修改功能、修改⽂字描述、去掉⼴告等等。

本⽂介绍APK的基本知识、结构、APK⽂件的解包、打包及签名,以及对APK⽂件的常规修改。

1.APK⽂件简介APK是Android Package的缩写,即即Android application package ⽂件或Android安装包。

每个要安装到Android平台的应⽤都要被编译打包为⼀个单独的⽂件,后缀名为.apk。

APK⽂件是⽤专业软件eclipse编译⽣成的⽂件包,其中包含了应⽤的⼆进制代码、资源、配置⽂件等。

通过将APK⽂件直接传到Android⼿机中执⾏即可安装。

APK⽂件其实就是zip格式,但其扩展名被改为apk,⽤解压软件可以直接打开。

通过WinRAR或UnZip解压后,你会看到有⼏个⽂件和⽂件夹。

⼀个典型的APK⽂件通常有下列内容组成:AndroidManifest.xml 程序全局配置⽂件classes.dex Dalvik字节码resources.arsc 编译后的⼆进制资源⽂件META-INF\ 该⽬录下存放的是签名信息res\ 该⽬录存放资源⽂件assets\ 该⽬录可以存放⼀些配置⽂件下⾯对这些⽂件和⽬录做些基本的注释和介绍。

AndroidManifest.xml该⽂件是每个应⽤程序都必须定义和包含的⽂件,它描述了应⽤程序的名字、版本、权限、引⽤的库⽂件等等信息。

需要解包后才能加以阅读。

classes.dex⽂件classes.dex是java源码编译后⽣成的java字节码⽂件。

dex是Dalvik VM executes的全称,即Android Dalvik执⾏程序,并⾮Java ME的字节码⽽是Dalvik字节码。

ROM制作教程之二——打包和解包

ROM制作教程之二——打包和解包

ROM制作教程之二——打包和解包了解完android ROM结构,至于修改什么这个要看每个版本的需要了。

下一步就是ROM打包了。

System打包需要工具:mkyaffS2image在system文件夹目录下使用mkyaffs2image命令如下mkyaffs2image –f –c2048 ./system system.img./system 是指system文件夹,里面是ROM必要文件app、etc、bin、xbin、framework、media、fonts、lib、usr、build.propSystem.img是要生成的system.img镜像文件,这个可以命名为其他文件名打包完system之后就是刷机了,后面再细讲刷机fastboot flashsystem system.imgData 打包Data下主要是预置一些出厂软件,很多论坛和厂家都会把自己的推荐软件放在data/app下在任意目录下创建一个data文件夹,在data文件夹下再创建一个app文件夹,然后把需要推荐的APK软件拷贝到app文件夹下,然后就是打包,打包方法和system是一样的,命令mkyaffs2image –f –c2048 ./data userdata.img然后把userdata.img 刷到手机中就可以fastboot flashuserdata userdata.imgSystem解包需要工具:unyaffs解包system.img比较简单,只需要在system.img的存放目录上使用unyaffs工具就可以,命令如下Unyaffssystem.img,这时候就会得到如下图的文件和文件夹然后作相应的修改,添加APK,删除APK,修改版本号等如果是system.img.ext2格式文件就不能用unyaffs了System.img.ext2里面的东西可以挂载system.img.ext2到某个文件夹下复制里面的内容到system文件夹下再操作sudo mount -o loop /home/dunha/system.ext2 /mnt进入/mnt文件夹中,然后再做修改。

(手机端)【SIS编辑器 解包、打包 教程】

(手机端)【SIS编辑器 解包、打包 教程】

(手机端)【SIS编辑器解包、打包教程】QUOTE:本帖用到的工具SISEditor,手机端sis/sisx文件解包、打包和签名工具,八神智能天下大罗作品。

支持sis/sisx包的编辑,可更改创建基本信息;支持编辑sis/sisx文件列表,包括程序组件也能编辑:支持新建sis/sisx包,暂未完善。

支持对sis/sisx包程序组件的修改操作:添加,删除,替换,提取,属性编辑(可进行4种操作),上下移动,批量导出等等SISEditor在操作界面上,比智能解包更为友好,易于上手;速度更是超快,解包、打包,转瞬即可;功能详细,跳过pkg繁复的界面,简易手动操作。

目前本人测试,仅发现少数软件因打包方式特别,SISEditor不能解包,此种情况可用智能解包来解决;其余大部分程序SISEditor皆*可正常解包。

下面,我将图文讲解SISEditor的打包、解包操作。

那么,先安装SISEditor,免签,而是不用Python平台,真方便。

SIS编辑器解包详解QUOTE:打开SISEditor—选项—打开sis/sisx文件(直接按中键也行),如截图01,找到要解包的sis/sisx文件,打开截图01打开界面如截图02、03,往下拉可查看程序的各参数,可自己DIY各种参数,此处暂不解释参数,下文再详解截图02截图03将光标移到“文件列表”栏,点击进入后,如截图04,是安装包内部组件列表,同样的,文件可自由编辑、添加、删除,但此处暂不讲解;截图04PS:截图04中可看到文件列表中有IF语句,IF语句根据判断机型信息或者用户选择,而对组件选择安装。

可以看出,SISEditor虽不显性使用pkg文件,但pkg语句还在起作用;而不足的是,目前SISEditor无法自建IF语句等内容,新建sis/sisx功能明显很薄弱OK,继续解包演示,在文件列表中—选项,如截图05,可看到“提取文件”、“提取全部”选项,“提取文件”指的是提取当前光标处的文件,而“提取全部”即解包全部文件;截图05我此处选择“提取全部”,出现目录选择,随便选择吧,找得到即可,点击确定;不得不说,SISEditor的速度确实快,1M的安装包,几秒钟完成解包;解包完成后,找到!:/Data/SISEditor/目录下,可看到以软件名称命名的文件夹,解包的文件就在该目录下,如截图06截图05我此处选择“提取全部”,出现目录选择,随便选择吧,找得到即可,点击确定;不得不说,SISEditor的速度确实快,1M的安装包,几秒钟完成解包;解包完成后,找到!:/Data/SISEditor/目录下,可看到以软件名称命名的文件夹,解包的文件就在该目录下,如截图06截图06其中感叹号!指不定盘符,即安装程序时选择的盘;而!目录下resource、private等文件夹指什么呢?以!:/resource/apps/TTPodSigned.mif为例,实际上安装天天动听时,系统就将TTPodSigned.mif这个文件解包到安装盘:/resource/apps/目录下所以程序安装的过程,其实是解包程序文件至对应目录,并在手机中写入安装信息的过程sis/sisx文件解包,已经完成,可用解包出的文件进行DIY了;怎样,非常方便吧?SIS编辑器打包详解QUOTE:上文说到,SISEditor不显性使用pkg文档,打包过程与智能解包略有不同;此处,我将sis/sisx文件打包分两种:一、修改打包;二、新建打包一、修改打包先讲修改打包,较大的程序DIY修改,比如新增皮肤、精简多余文件、替换图标声音文件等,修改完要打包成sis安装包;全部重新打包,不仅浪费时间,而且显得笨,因为选择安装组件、编辑文件属性,将花费你大量时间精力用原软件安装包,进行修改,再打包,可省下许多时间精力比如此处,我找到一组天天动听皮肤—“简约蓝”简约蓝(请解压).rar (78.7 KB),要将该皮肤添加至天天动听安装包;同解包过程类似,进入SISEditor,打开天天动听原安装包,即上截图02、03界面;此处对各参数解释一下“程序名称”——此处即软件安装后,在程序管理中显示的名称,按中键可修改自定义“程序UID”——即程序的识别编号,各不相同,所以建议不要更改“程序版本”——即程序版本号咯,不必修改,以免错误“程序语言”——安装程序提取语言,按中键可修改,自己添加或删除语言种类,支持近100种语言“程序提供”——指软件作者、厂商,可不修改;如果想添加打包作者也行,按中键修改吧“安装类型”——标准程序[SA],指独立安装包,按中键可修改:主题/系统插件[SP],指独立安装包的升级、补充程序,或者系统插件(主题),不可独立安装,可独立卸载;程序升级/补丁[PU],指独立安装包的升级程序,不可独立安装,不可独立卸载“创建日期”、“创建时间”——不必修改,想改自己改“目标设备”——指程序支持的机型,一般不必修改;按中键进入可添加、删除设备,添加对新平台或新机型的支持“文件列表”——就是程序组件,上文说过;DIY的重点“软件签名”——指当前程序签名状况,SISEditor有签名、去签名功能,自带5权限30年专用证书和19权限根证书(破'解才可使用),你也可将个人证书、key文件放入!:/Data/Certificates/目录下,用SISEditor为软件签名OK,我此处是为天天动听添加一组皮肤,前面参数不动它;点击进入“文件列表”选项—添加文件,如截图07,找到已下载的皮肤文件“简约蓝.ttb”,确认。

chrome的pak文件打包解包工具5月7日更新

chrome的pak文件打包解包工具5月7日更新

chrome的pak文件打包解包工具5月7日更新
chrome使用的资源文件,都使用pak进行了打包。

你可以在chrome目录下面找到许多pak文件。

pak文件格式比较简单,也没有压缩,所以我们很容易就能解包。

但是里面只存储资源的ID,即使解包后也无法准备还原文件名,并不方便二次修改。

所以我做了一个工具,方便进行二次修改,解包pak文件时可以自动识别约40%的准确文件名。

pak.exe只认resources.pak文件。

第一次运行时,会在解包后会生成一个resources文件夹和resources.json文件。

resources文件夹下是解包后的文件内容。

其下的guess是猜测了扩展名的文件,unknown是无法识别的文件。

resources.json保存文件名和资源ID的索引关系,在打包时需要用到。

如果检测到当前目录下有resources.json,pak.exe就会自动执行打包操作,注意备份你的resources.pak。

另外,chrome的翻译也是放在pak里面的,诸如zh-CN.pak这样的语言包资源。

但是内部包含很多零散文件,不便于翻译,因此转换成一个单独json文件方便修改
把pak文件拖到pak2json上面会生成locale.json
运行json2pak会把locale.json生成locale.pak。

C语言打包与解包程序

C语言打包与解包程序

//测试通过#include <stdio.h>#include <string.h>#include <stdlib.h>typedef unsigned int uint;typedef unsigned char byte;// 包文件中最大可容纳的文件个数#define MAX_FILE_COUNT 10// 全局包文件指针FILE* g_pMasFile = NULL;// 资源包文件头结构typedef struct SMaseFileHeader{uint uFileFlag; // 包文件头标记: 'MASE' uint uFileCount; // 包内文件个数uint uFileListOfs; // 文件列表偏移uint uMaxFileCount; // 最大子文件个数uint uFileSize; // 包文件的大小}MaseHeader;// 包内文件信息结构typedef struct SFilesMessage{uint uFileOfs; // 本文件在包内的偏移uint uFileSize; // 本文件的大小char szFileName[260]; // 本文件的路径}FilesMsg;// 打开包文件int OpenMasFile(const char* path, const byte onlyOpen) {uint uWriteCount; // 写入文件信息次数byte bIsNew = 0; // 是否新建的MaseHeader header; // 文件头结构定义FilesMsg msg; // 文件信息结构定义g_pMasFile = fopen(path, "rb"); // 用来判断是否存在if (g_pMasFile == NULL){if (onlyOpen == 1) // 只打开不新建return -1;bIsNew = 1;g_pMasFile = fopen(path, "wb");if (g_pMasFile == NULL)return -1;}//先关闭,然后在用"rb+"方式打开二进制读写打开文件fclose( g_pMasFile );g_pMasFile = fopen(path, "rb+");if (g_pMasFile == NULL)return -1;if(bIsNew == 1)// 新建的文件{header.uFileFlag = 'ESAM';header.uFileCount = 0;header.uFileListOfs = sizeof(MaseHeader); //紧跟着就是文件列表header.uMaxFileCount = MAX_FILE_COUNT;header.uFileSize = sizeof(MaseHeader)+ (MAX_FILE_COUNT * sizeof(FilesMsg));//写入头信息fwrite(&header, sizeof(MaseHeader), 1, g_pMasFile);memset(&msg, 0, sizeof(FilesMsg));uWriteCount = MAX_FILE_COUNT;//写入文件列表用0占位while(uWriteCount--)fwrite(&msg, sizeof(FilesMsg), 1, g_pMasFile);}else//文件存在{//则读取头文件信息fread(&header, sizeof(MaseHeader), 1, g_pMasFile);}//检查文件头标记if (header.uFileFlag != 'ESAM'){fclose(g_pMasFile);printf("文件头标记不对,错误!\n");return -1;}//检查数据是否完整if (header.uMaxFileCount != MAX_FILE_COUNT){fclose(g_pMasFile);printf("数据不完整,错误!\n");return -1;}return 0;}//写文件到包里int WriteFileToPak(const char* path){FilesMsg fileMsg; //此文件的文件信息结构MaseHeader header; //包文件头结构定义uint uFileSize;uint uFileListEndOfs;byte* pBuff;FILE* pFile = NULL;if (g_pMasFile == NULL)return -1;memset(&fileMsg, 0, sizeof(FilesMsg));fseek(g_pMasFile, 0, SEEK_SET); //定位到文件头,读取头文件信息//则读取头文件信息fread(&header,sizeof(MaseHeader), 1, g_pMasFile);uFileListEndOfs = header.uFileCount * sizeof(FilesMsg) + header.uFileListOfs;pFile = fopen(path, "rb");if(pFile == NULL)return -1;fseek(pFile, 0, SEEK_END);uFileSize = ftell(pFile);fseek(pFile, 0, SEEK_SET);//文件名长度不能超过260strcpy(fileMsg.szFileName,path);fileMsg.uFileOfs = header.uFileSize;fileMsg.uFileSize = uFileSize;// 写入文件信息// 将文件指针定位到uFileListEndOfs处,以便写入新的文件信息结构fseek(g_pMasFile, uFileListEndOfs, SEEK_SET);fwrite(&fileMsg,sizeof(FilesMsg),1,g_pMasFile);// 申请空间pBuff = (byte*)malloc(uFileSize);fread(pBuff,uFileSize,1,pFile);// 写数据到包文件里fseek(g_pMasFile,header.uFileSize,SEEK_SET); fwrite(pBuff, uFileSize, 1, g_pMasFile);// 释放内存free(pBuff);//重新填充headerheader.uFileCount += 1;header.uFileSize += uFileSize;fseek( g_pMasFile,0,SEEK_SET);// 重新写入包文件头fwrite(&header,sizeof(MaseHeader),1,g_pMasFile);return 0;}//从包文件里读数据int ReadFileFromPak(const FilesMsg msg, byte* _dst) {if ( g_pMasFile == NULL )return -1;fseek(g_pMasFile, msg.uFileOfs,SEEK_SET);fread(_dst, msg.uFileSize, 1, g_pMasFile);return 0;}//获取包中某个文件的信息int GetFileMessage( const char* path, FilesMsg* msg) {FilesMsg fileMsg; // 此文件的文件信息结构MaseHeader header; // 包头结构uint uFileCount; // 文件个数if ( g_pMasFile == NULL || msg == NULL )return -1;// 则读取头文件信息fseek(g_pMasFile, 0, SEEK_SET);fread(&header, sizeof(MaseHeader), 1, g_pMasFile);uFileCount = header.uFileCount;while (uFileCount--){fread(&fileMsg, sizeof(FilesMsg), 1,g_pMasFile);// 判断是否是要获取的文件if (stricmp(fileMsg.szFileName, path) == 0 ){*msg = fileMsg;return 0;}}return -1;}// 关闭包文件int CloseMasFile( void ){if ( g_pMasFile == NULL )return -1;fclose( g_pMasFile );g_pMasFile = NULL;return 0;}//这是打包主函数int main( void ){int ret;ret = OpenMasFile( "E:\\PhotoPak.bin",0);if ( ret == -1 )goto __exit;WriteFileToPak( "E:\\珍贵.jpg" );WriteFileToPak( "E:\\123.docx" );WriteFileToPak( "E:\\456.txt" );__exit:CloseMasFile();return 0;}//查看打包中的文件,并且可以解包查看int main( void ){byte* pBuff;FILE* pOutFile;FilesMsg getFileMsg;int ret;ret = OpenMasFile("E:\\PhotoPak.bin", 1);if (ret == -1)goto __exit;ret = GetFileMessage("E:\\123.docx", &getFileMsg);if(ret == -1)goto __exit;pBuff = (byte*)malloc(getFileMsg.uFileSize);ret = ReadFileFromPak(getFileMsg, pBuff);if(ret == -1)goto __exit_free;pOutFile = fopen("E:\\123_out.docx", "wb"); // 注意使用的是二进制模式if(ret == -1)goto __exit_free;fwrite( pBuff, getFileMsg.uFileSize, 1, pOutFile );fclose( pOutFile );__exit_free:free( pBuff );__exit:CloseMasFile();return 0;}参数源文件要装入到编译程序中的文件的路径.文件名必须是字符串,不能是任何变量. 它可以是一个相对路径(使用 .\ 或者 ..\ 等在路径中)目标路径结尾带有反斜线符号的目标路径,脚本程序运行时将把嵌入文件解压到此位置.此参数接受变量.标志[可选参数] 此标志参数用以决定是否覆盖已存在的文件:0 = (默认)不覆盖已存在的文件1 = 覆盖已存在的文件返回值成功: 返回值为1.失败: 返回值为0.注意/说明FileInstall 函数的用途是装入文件到编译后的AutoIt 脚本程序中.这些内嵌的文件将在编译好的脚本程序运行时被"解压"出来.这里要提醒一下的就是装入某些文件如图片文件等可能会导致编译后的脚本程序大小剧增.源文件(来源文件)参数只接受字符串而不接受变量,计算式或者函数CALL,以便编译器能正确取得文件名并装入文件.源文件参数不能含有通配符.若在未编译的脚本中使用此函数则程序将执行一次文件复制操作(这样是为了方便进行预编译测试).装入的文件将保持原本的创建时间/修改时间等时间戳信息.目标目录必须存在才能调用此函数,不然FileInstall将会失败, 返回0 并不会创建文件和路径. 参考DirCreate() 函数关于创建目录路径.已存在的文件属性可能导致函数覆盖失败.请使用FileDelete() 或者FileSetAttrib() 确保文件能够被覆盖.。

最简单解除解析包方法

最简单解除解析包方法

最简单解除解析包方法解除解析包是指将文档或文件中的加密保护解除的过程。

在某些情况下,我们可能需要解除文档中的解析包,以便更方便地查看或编辑文件内容。

下面我将介绍最简单的解除解析包方法,希望能对大家有所帮助。

首先,我们可以尝试使用专门的解析包解除软件来进行操作。

这些软件通常可以在互联网上找到并免费下载。

在使用解析包解除软件时,我们只需打开软件并选择需要解除解析包的文件,然后按照软件提示进行操作即可。

这种方法操作简单,适用于大多数常见的解析包格式。

其次,如果我们无法找到合适的解析包解除软件,还可以尝试使用在线解析包解除工具。

一些在线工具可以直接在浏览器中使用,无需下载安装。

我们只需将需要解除解析包的文件上传到在线工具平台,然后按照提示进行操作即可完成解除解析包的过程。

这种方法操作便捷,适用于一些特殊格式的解析包。

另外,有些文档编辑软件也自带了解析包解除功能。

在使用这类软件时,我们只需打开需要解除解析包的文件,然后在软件的菜单栏或设置中找到解除解析包的选项,按照软件提示进行操作即可完成解除解析包的过程。

这种方法操作便捷,适用于一些常见的文档格式。

需要注意的是,在进行解除解析包的操作时,我们应该确保自己有合法的使用权限。

未经授权解除他人文档中的解析包是违法行为,应当引起足够的重视。

另外,在解除解析包之后,我们也应该注意文档内容的保密性,避免泄露重要信息。

综上所述,解除解析包是一个相对简单的操作,我们可以通过专门的解析包解除软件、在线解析包解除工具或文档编辑软件来完成。

在进行操作时,我们应该注意合法性和文档内容的保密性。

希望以上方法能够帮助到大家,谢谢阅读!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

spk文件打包解包
123.exe 参数-p打包,参数-u解包。

txt乱码是因为加密的,重新下载明文spk文件来解。

修改掉率
相关文件:item/item_rand.txt,object/cha_drop.txt,item/drop_type/
item_rand.txt是基础掉率文件
id直接关联cha_drop.txt中的怪物掉落。

minroll最小掉落次数
maxroll最大掉落次数
drop_kind掉包种类,1是直接掉物品,2是掉落包,关联item/drop_type/中的包。

drop_id填物品或者包的id
drop_prob掉率该物品/包的概率,所有掉落概率相加不超过1
cha_drop.txt是怪物掉落
feature_drop,world_drop,still_drop三个值都可以添加item_rand.txt中的id item/drop_type/这个文件夹中是掉包文件
field1这个是注释名
field2这个是物品id
field3这个是物品权重,物品权重/权重和=物品在该包中的产出率。

添加宝石
相关文件:item/gem_item.txt,item/gem_item_link.txt,item/gem_variety.txt
gem_item.txt是宝石基础文件
id宝石的id
type填gem_variety.txt中的type值
lootlevel宝石名字显示的颜色,11是绿色,16是金色,17以后是红色
variety填gem_variety.txt中的id值
varlevel宝石的进阶关联。

variety相同的宝石,varlevel决定了宝石的升阶。

tip注释文本
icon图标\zh_cn\bin\data\gui\icon\item\bs\可以自己添加
use_id1021是镶嵌宝石use
bound_mod 0是非绑,2是绑定
requires 100*0是物理宝石,100*1是法术宝石
datas宝石属性,atb\trait_list.txt中的属性
fuse_variety,fuse_varlevel是融合宝石相关设定
gem_item_link.txt是绑定和非绑定宝石关联文件
添加宝石要添加绑定和非绑定两套,然后在这个文件中关联,不然镶嵌宝石或掉落包时可能会跳错。

drop_var是掉落该宝石的包,不用填。

gem_variety.txt是宝石种类设置文件
type是添加纹路的种类,添加宝石要选择已有的值,不然还得去改纹路添加。

200龙纹,201虎纹,202凤纹,213孔雀,214麒麟
inlay_equips宝石能镶嵌的位置,参考item_type的equip_slot值。

21武器,25配饰,22副武器,31时装帽,32时装衣,24翼装,11,18,19肘,项链,戒指,12,14,15,16腕,胸,腿,腰,10,13,17锦囊,护膝,护符
no_compose_gem_two融合宝石就填1,填不填没关系
添加属性
相关文件atb\modify_player.txt,atb\modify_grade.txt,atb\atb_fun.txt,atb\trait_list.txt trait_list.txt是属性的详细设置
id属性id,装备或者宝石的data就是填的这个
modify_id属性的类型,填modify_player.txt的id
modify_var属性的数值,百分比的数值这里要填万分位数,比如200表示2%
color属性表现的颜色
modify_player.txt是属性的定义
id属性id
treeid固定定义,不能改,添加新属性类型只能在基础定义上做文章,
iscent是否百分比属性
modify_grade.txt是属性的优先文件
id同modify_player.txt的id
fGrade属性的优先性。

数值越大,在公式计算中排序越靠后。

ntype,1物理,2法术
atb_fun.txt计算公式
atb[n] atb中的n为modify_player.txt中的treeid
modifier[n] modifier中的n为modify_player.txt中iscent为0的行的id
modifier_pct[n] modifier_pct中的n为modify_player.txt中iscent为1的行的id
添加物品
相关文件item\item_list.txt,ect\use_list.txt,item\item_type.txt
item_list.txt
idid
type类型
lootlevel颜色
variety统类值,比如打造中会引用材料的统类值而不是材料的id。

varlevel物品作用等级
tip注释文本
icon图标
consume消耗类型,0表示可叠加,4表示不可叠加。

consume_par叠加数量或其他上条定义的值
life_mode是否限时,1表示限时
life_second限时时间(s)
use_id填use_list.txt中的值
use_par使用效果,一般有以下格式:0*掉包id,物品id*数量,数量*合成需用物品id,204*学会技能id,获得数值……
bound_mode绑定模式,常用的有0非绑定,1装备绑定,2绑定,4帮会绑定
sell_price出售价,use_self_define_currency填1sell_currency填0的话,这里出售的就是流通金,填3的话就是绑玉。

reqlevel使用限制等级
datas使用效果的相关引用值
item_type.txt是物品类型的定义
id物品或装备的tpye就填这个
equip_slot镶嵌槽的类型
use_list.txt定义了物品的使用效果
cooldown冷却时间引用值
dst_item_type可以作用该use的物品类型id,比如可以增加马装具打孔和镶嵌宝石等。

progress_name读条显示的文字
script复杂的use要调用script脚本,这个要在script里面去改了
添加装备
相关文件item\equip_item.txt,与物品类似的条省略
requires装备限定,1*基础职业id,2*进阶职业id,6*帮会职位,100*物0法1,4*性别男1女2
datas装备基础属性,这个受装备星级数值叠加。

model模型,可以给装备添加时装的模型
indie_traits独立属性
ident_star鉴定属性
fix_star最高星等,如果ident_star为0,这就是固定星等。

fix_traits附加属性
一些问题解答
有些技能跳错:这是服务端技能参数与客户端不匹配,没有解决办法,只有不用引起跳错的技能。

比如侠客的千江一跃。

新秀掉线也是这个原因。

有没有data.spk:没有。

zh_cn.spk/zh_tw.spk的优先度高于data,所以改动的txt 直接放zh的相同目录下,就行了,不需要改data,也避免了客户端跳错。

关于修改方面:我是按个人喜好改的,节奏有些快,玩一周就满级了。

论坛有很多修改帖子,可以按各人兴趣自己继续改,比如怪加强,经验降低什么的。

喜欢原版的某些设置,可以找到zh中相关的文件删除,就行了。

模型不全:客户端换新点的。

可以用官方再打补丁。

当然有些台服特有的模型就没办法解决了。

物品异常跳错:数据库删除item_23里的值,有乱码符号的值不能删。

可以解决刷物品后跳错的问题。

如何修改技能刚体:skill/passive_skill_master.txt tgt_skill是强化属性level1是强化效果,5*8020*8046是全程刚体
如何取消控制:两个办法,改atb_fun.txt或者trait_list.txt,但是都会对玩家自身的刚体等属性产生效果。

如何加强怪物:object/init_npc.txt 最好只改精英怪普通怪和boss的数据,改其他可能导致剧情出错,比如开局两个鬼生命过高,脚本的伤害杀不死怪,就收不了唐刀。

相关文档
最新文档