精华内容
下载资源
问答
  • AION PAK解包

    2013-04-17 20:54:42
    AION PAK解包
  • u4pak解包工具PakUnpacker

    2018-05-06 12:49:55
    u4pak解包工具,给PAK资源进行解包,读取其中的建模,资料等,并可以重新封包
  • 街头篮球PAK解包程序+WinUnFSPak 0.98 + UnFSPak
  • chrome 浏览器解包和打包工具,用于自定义浏览器界面风格,好用.
  • 【原创动画】真封神如何使用PAK解包压缩解密  动画教程:下载地址:http://pan.baidu.com/s/1zjp0t

    【原创动画】真封神如何使用PAK解包压缩解密 

    动画教程:下载地址:http://pan.baidu.com/s/1zjp0t


    展开全文
  • Chromium资源文件.pak解包方法(python)

    万次阅读 2013-04-15 09:41:42
    资源内容只在运行时由chromium根据资源ID获取,所以在.pak文件中只存储了资源的ID,并没有存储资源文件类型,所以只能默认解包成png格式了。 #python unpack.py chrome_100_percent.pak 就可以解包chrome_100_...

    import collections
    import struct
    import sys
    def ReadFile(filename, encoding):
      mode = 'rb' if encoding == 0 else 'rU'
      with open(filename, mode) as f:
        data = f.read()
      if encoding not in (0, 1):
        data = data.decode(encoding)
      return data
    
    PACK_FILE_VERSION = 4
    HEADER_LENGTH = 2 * 4 + 1  # Two uint32s. (file version, number of entries) and
                               # one uint8 (encoding of text resources)
    def UnpackDataPack(input_file):
      """Reads a data pack file and returns a dictionary."""
      data = ReadFile(input_file, 0)
      original_data = data
    
      # Read the header.
      version, num_entries, encoding = struct.unpack("<IIB", data[:HEADER_LENGTH])
      if version != PACK_FILE_VERSION:
        print "Wrong file version in ", input_file
        raise WrongFileVersion
    
      resources = {}
      if num_entries == 0:
        return DataPackContents(resources, encoding)
    
      # Read the index and data.
      data = data[HEADER_LENGTH:]
      kIndexEntrySize = 2 + 4  # Each entry is a uint16 and a uint32.
      for _ in range(num_entries):
        id, offset = struct.unpack("<HI", data[:kIndexEntrySize])
        data = data[kIndexEntrySize:]
        next_id, next_offset = struct.unpack("<HI", data[:kIndexEntrySize])
        resources[id] = original_data[offset:next_offset]
        of = open('{0}.png'.format(id),'wb')
        of.write(original_data[offset:next_offset])
        of.close()
    def main():
      if len(sys.argv) > 1:
        UnpackDataPack(sys.argv[1])
    
    
    if __name__ == '__main__':
      main()
    




    chromium资源文件在linux下以pak格式文件打包,文件格式很简单,并没有压缩。一般没有解包的必要,因为编译时会自动根据源文件变化而自动生成。资源内容只在运行时由chromium根据资源ID获取,所以在.pak文件中只存储了资源的ID,并没有存储资源文件类型,所以只能默认解包成png格式了。

    #python unpack.py chrome_100_percent.pak
    就可以解包chrome_100_percent.pak中的png图片资源了。

    如果非要获取资源文件类型的话,只能从内容判断了,根据不同文件的文件头可以大致分辨类型:


    import collections
    import struct
    import sys
    def ReadFile(filename, encoding):
      mode = 'rb' if encoding == 0 else 'rU'
      with open(filename, mode) as f:
        data = f.read()
      if encoding not in (0, 1):
        data = data.decode(encoding)
      return data
    
    PACK_FILE_VERSION = 4
    HEADER_LENGTH = 2 * 4 + 1  # Two uint32s. (file version, number of entries) and
                               # one uint8 (encoding of text resources)
    def UnpackDataPack(input_file):
      """Reads a data pack file and returns a dictionary."""
      data = ReadFile(input_file, 0)
      original_data = data
    
      # Read the header.
      version, num_entries, encoding = struct.unpack("<IIB", data[:HEADER_LENGTH])
      if version != PACK_FILE_VERSION:
        print "Wrong file version in ", input_file
        raise WrongFileVersion
    
      resources = {}
      if num_entries == 0:
        return DataPackContents(resources, encoding)
    
      # Read the index and data.
      data = data[HEADER_LENGTH:]
      kIndexEntrySize = 2 + 4  # Each entry is a uint16 and a uint32.
      for _ in range(num_entries):
        id, offset = struct.unpack("<HI", data[:kIndexEntrySize])
        data = data[kIndexEntrySize:]
        next_id, next_offset = struct.unpack("<HI", data[:kIndexEntrySize])
        resources[id] = original_data[offset:next_offset]
        filetype = 'bin'
        fileheader = ''.join(original_data[offset:offset+1])
        print ord(fileheader[0])
        if fileheader == '<':
          filetype = 'html'
        if fileheader == '\x89':
          filetype = 'png'
        elif fileheader == '/':
          filetype = 'js'
        of = open('{0}.{1}'.format(id,filetype),'wb')
        of.write(original_data[offset:next_offset])
        of.close()
    def main():
      if len(sys.argv) > 1:
        UnpackDataPack(sys.argv[1])
    
    
    if __name__ == '__main__':
      main()

    这里直接判断每个文件内容的前一个字节,如果是‘<'则应该是html文件,如果是'/'应该是js文件,如果是PNG文件头’\x89PNG',则应该就是png文件了。

    展开全文
  • pak文件解包

    2012-12-22 07:06:06
    方便的对pak文件解包
  • PAK文件解包工具 1.1

    2015-09-30 01:05:37
    Torchlight 2 PAK文件解包工具 1.1目前功能仅限解包。封包功能未完善。
  • PAK打包解包

    2018-08-04 12:10:09
    L版征途改版本要用到的工具,具体自行下载测试,L版本
  • 介绍了如何将PVZ里的资源PAK进行打包和解包,建议用C++来完成
  • AION PAK文件解包压缩

    2014-03-11 01:00:55
    PAK文件解压
  • 为了提取一个pak文件,请写:PakPacker x example.pak 这将创建一个名为example的文件夹,其中充满example.pak的内容。 为了将一个文件夹重新打包成一个pak文件,请写:PakPacker p示例 这将创建回example.pak。 ...
  • 最近在研究虚拟文件系统,VFS,已经能够搞的差不多了,但是有一个...下面是国内某游戏的pak文件解压,其实已经把最主要的内容放在这里来了,比起我的黑盒调用,人家这才是完全的解析哈。 共享来共需要的人一起学习吧。
  • PAK解包打包工具,可用于PAK的解包打包,用于问道PAK打包解包
  • // MakeFilePackDlg.cpp : 实现文件 // #include "stdafx.h" #include "MakeFilePack.h...因为不取消掉最后一段的//,生成出来的程序能正常使用,但是无法解包,一并求解决!搞了一个通宵。没有办法了,求大神帮忙!
  • pak文件的解包和打包

    2017-10-18 18:46:04
    pak文件解压和打包的工具。。。。。。。。。。。。。。。。
  • 植物大战僵尸PAK打包/解包工具2.0源码
  • pak文件的打包和解包

    千次阅读 2019-09-24 17:18:16
    pak格式的文件 一般游戏有资源 游戏素材会打包放进去 比如游戏语音 游戏多加点语音 多加一些贴图资源 外部文件实现的 素材--->pak文件--->用的时候从文件中取出来 文件的打包 1 #include<iostream&...

    pak格式的文件 一般游戏有资源 游戏素材会打包放进去

    比如游戏语音 游戏多加点语音  多加一些贴图资源

    外部文件实现的

    素材--->pak文件--->用的时候从文件中取出来

    文件的打包

     1 #include<iostream>
     2 #include<fstream>//观于文件的头函数
     3 using namespace std;
     4 
     5 struct fileInfo
     6 {
     7     int fileSize;//文件大小
     8     int fileOff;//文件在pak中的偏移
     9     int fileNameSize;//文件名的长度
    10     char* fileName;//文件名
    11 };
    12 int main()
    13 {
    14     fileInfo pic[4] = { { 0, 0, 0, "背景.jpg" }, { 0, 0, 0, "人物.jpg" }, { 0, 0, 0, "箱子.jpg" }, { 0, 0, 0, "目的地.jpg" } };
    15     //初始化结构体 给结构体内存放数据
    16     int listNum = 4, listSize = 8;
    17 
    18     fstream resFile[4];//源文件
    19     fstream srcFile;//打包之后的文件
    20     for (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);//将文件指针移动到文件末尾end
    24         pic[i].fileSize = resFile[i].tellg();//得到文件的大小tellg
    25         pic[i].fileNameSize = strlen(pic[i].fileName);//求文件名长度
    26         listSize += 4 + 4 + 4 + pic[i].fileNameSize;//加上单条索引表的长度
    27         // 文件大小4  +文件偏移量4+ 文件名大小4 +文件名长度
    28     }
    29     for (int i = 0; i < 4; ++i)
    30     {
    31         if (i == 0)//第一个文件
    32         {
    33             pic[i].fileOff = listSize;//第一个文件的偏移量就是索引表大小
    34         }
    35         else
    36         {
    37             pic[i].fileOff = pic[i - 1].fileOff + pic[i - 1].fileSize;
    38             //计算后面的文件偏移量
    39         }
    40     }
    41     srcFile.open("new.pak", ios::out | ios::binary);//准备写入文件
    42 
    43     srcFile.write((char*)&listSize, sizeof(int));//写入索引表的大小和索引表的个数
    44     srcFile.write((char*)&listNum, sizeof(int));
    45 
    46     for (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     }
    53 
    54     for (int i = 0; i < 4; ++i)//写入文件内容
    55     {
    56         resFile[i].seekg(0, ios::beg);//将文件指针移动到文件开头
    57         while (!resFile[i].eof())//写文件
    58         {
    59             srcFile.put(resFile[i].get());
    60         }
    61         srcFile.seekp(-1, ios::cur);//删掉一个字节  避免多写入数据
    62         resFile[i].close();//写完关闭
    63     }
    64 
    65     srcFile.close();
    66 
    67 
    68     cin.get();
    69     return 0;
    70 }

    //运行后将文件打包到new.pak中

    文件的解包

     1 #include<iostream>
     2 #include<fstream>
     3 using namespace std;
     4 
     5 struct fileInfo
     6 {
     7     int fileSize;//文件大小
     8     int fileOff;//文件在pak中的偏移
     9     int fileNameSize;//文件名的长度
    10     char fileName[128];//文件名
    11 };
    12 
    13 
    14 int main()
    15 {
    16     fstream file;
    17     file.open("new.pak", ios::in | ios::binary);//读取文件
    18     fileInfo pic[4];//写文件的时候大小可能不止四个  
    19     int listSize, listNum;// Num是索引表的个数
    20 
    21     file.read((char*)&listSize, sizeof(int));//读到索引表的大小
    22     file.read((char*)&listNum, sizeof(int));
    23 
    24     //读取每条索引的内容
    25     for (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);//需要注意\0
    31         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好一点   listNum
    39 
    40 
    41     //前面有文件大小和文件偏移量  如果读取特定的文件 可以直接用索引中的大小和偏移量读取
    42     for (int i = 0; i < listNum; ++i)
    43     {
    44         res[i].open(pic[i].fileName, ios::out | ios::binary);
    45         for (int j = 0; j < pic[i].fileSize; ++j)
    46         {
    47             res[i].put(file.get());
    48         }
    49         res[i].close();
    50     }
    51 
    52 
    53     file.close();//关闭文件
    54     cin.get();
    55     return 0;
    56 }

    //运行exe文件将图片文件解包

     

    转载于:https://www.cnblogs.com/liugangjiayou/p/11388142.html

    展开全文
  • Chrome PAK解包打包工具是一款非常简单易用的可以帮助小白用户对chrome谷歌浏览器pak文件进行解包或者打包的小工具,当你不知道怎么使用命令行的时候使用这款软件一定是最好的选择,欢迎有需要此款工具的朋友们前来...
  • fez 的pak文件解包脚本。 quickbms可解。
  • 游戏解包工具

    2014-09-28 11:16:40
    一个可以让你从容不迫的应对007,ADAT,APAK,MHW,MIX,MW4,NPAK,PACK,PAK,PBO,PFF,PKR,POD,RES,U,等等数十种文件包的解包/封包程序,程序可以在扫描过程中自动按选择的分类识别你需要的文件,有了它,几乎各种游戏的文件...
  • 简易解包程序

    千次阅读 2017-08-29 23:07:01
    对压缩包进行解压。简易压缩程序请参考博客的另外一篇文章: ...根据打包建立的索引表,找到对应的文件信息,...1.可以直接运行UnpacketFiles.exe进行解包,只需要把files.pak文件放入和UnpacketFiles.exe同一级目录即

    对压缩包进行解压。

    简易压缩程序请参考博客的另外一篇文章:
    http://blog.csdn.net/yi_ming_he/article/details/77689405

    解包方式:
    根据打包建立的索引表,找到对应的文件信息,逐个释放出来即可。

    使用方法:
    1.可以直接运行UnpacketFiles.exe进行解包,只需要把files.pak文件放入和UnpacketFiles.exe同一级目录即可,生成的文件位于和UnpacketFiles.exe的同一级目录的output文件夹中(如果该文件夹不存在会自动创建)
    2.另外一种解包方式是通过指定命令行参数指定打包的文件路径和解包的目录,如下图所示:
    这里写图片描述

    UnPacketFiles.h

    #pragma once
    
    using std::fstream;
    
    struct MyFileData
    {
        int nOffset;//文件相对于压缩包文件的偏移
        int nFileSize;//文件的Size
        int nFileNameLength;//文件名包含的字符个数
        CString strFileName;//文件名
    
        MyFileData()
        {
            nOffset = 0;
            nFileSize = 0;
            nFileNameLength = 0;
        }
    };
    
    class CUnPacketFiles
    {
    public:
        CUnPacketFiles();
        ~CUnPacketFiles();
    
        void UnPacketFiles(LPCTSTR lpInputFilePath, LPCTSTR lpOutDir);
    
    private:
        void _GetPacketInfo(LPCTSTR lpInputFilePath);
        void _DoUnPacketFiles(LPCTSTR lpOutDir);
        void _PathAddBackSlach(CString& strPath);
    
    private:
        int m_nIndexTableSize;//索引表Size
        int m_nIndexTableElementCount;//索引表包含元素个数
        std::vector<MyFileData> m_vecFileData;
        fstream m_file;
    };
    
    

    UnPacketFiles.cpp

    #include "stdafx.h"
    #include "UnPacketFiles.h"
    
    CUnPacketFiles::CUnPacketFiles()
    {
        m_nIndexTableSize = 0;
        m_nIndexTableElementCount = 0;
        m_vecFileData.clear();
    }
    
    
    CUnPacketFiles::~CUnPacketFiles()
    {
        m_file.close();
    }
    
    void CUnPacketFiles::UnPacketFiles(LPCTSTR lpInputFilePath, LPCTSTR lpOutDir)
    {
        if (NULL == lpInputFilePath || NULL == lpOutDir)
            return;
    
        _GetPacketInfo(lpInputFilePath);
        _DoUnPacketFiles(lpOutDir);
    }
    
    void CUnPacketFiles::_GetPacketInfo(LPCTSTR lpInputFilePath)
    {
        CString strInputFilePath(lpInputFilePath);
        m_file.open(CW2A(strInputFilePath), std::ios::in | std::ios::binary);
    
        m_file.read((char *)&m_nIndexTableSize, sizeof(int));
        m_file.read((char *)&m_nIndexTableElementCount, sizeof(int));
    
        for (int i = 0; i < m_nIndexTableElementCount; i++)
        {
            MyFileData myFileData;
            m_file.read((char *)&myFileData.nOffset, sizeof(int));
            m_file.read((char *)&myFileData.nFileSize, sizeof(int));
            m_file.read((char *)&myFileData.nFileNameLength, sizeof(int));
    
            CStringA strTemp;
            m_file.read(strTemp.GetBuffer(myFileData.nFileNameLength), myFileData.nFileNameLength);
            strTemp.ReleaseBuffer(myFileData.nFileNameLength);
            myFileData.strFileName = CA2W(strTemp);
    
            m_vecFileData.push_back(myFileData);
        }
    }
    
    void CUnPacketFiles::_DoUnPacketFiles(LPCTSTR lpOutDir)
    {
        CString strDir(lpOutDir);
        _PathAddBackSlach(strDir);
    
        fstream destFile;
        for (int i = 0; i < (int)m_vecFileData.size(); ++i)
        {
            CString strFilePath = strDir + m_vecFileData[i].strFileName;
            destFile.open(CW2A(strFilePath), std::ios::out | std::ios::binary);
            m_file.seekp(m_nIndexTableSize + 4 + m_vecFileData[i].nOffset, std::ios::beg);
            for (int m = 0; m < m_vecFileData[i].nFileSize; ++m)
            {
                destFile.put(m_file.get());
            }
            destFile.close();
        }
    }
    
    void CUnPacketFiles::_PathAddBackSlach(CString& strPath)
    {
        CString strTemp;
        strTemp = strPath.Right(1);
    
        if (strTemp != _T("\\") && strTemp != _T("/"))
            strPath.Append(_T("\\"));
    }

    main.cpp

    #include "stdafx.h"
    #include "UnPacketFiles.h"
    
    CString GetCurrentModuleDir()
    {
        TCHAR szPath[MAX_PATH + 1] = { 0 };
        if (0 == ::GetModuleFileName((HMODULE)&__ImageBase, szPath, MAX_PATH))
            return L"";
    
        ::PathRemoveFileSpec(szPath);
        CString strDir = szPath;
        return strDir;
    }
    
    void CorrectPath(CString& strPath)
    {
        strPath.Replace(_T('/'), _T('\\'));
        do
        {
            if (strPath.Find(_T("\\\\")) == -1)
                break;
    
            strPath.Replace(_T("\\\\"), _T("\\"));
    
        } while (true);
    }
    
    void PathRemoveFileSpec(CString& strPath)
    {
        CorrectPath(strPath);
        int nPos = strPath.ReverseFind(_T('\\'));
        if (nPos == -1)
        {
            strPath.Empty();
        }
        else
        {
            strPath = strPath.Left(nPos);
        }
    }
    
    BOOL CreateDeepDirectory(LPCTSTR szPath)
    {
        BOOL bRetCode = FALSE;
        CString strPath(szPath);
    
        if (GetFileAttributes(szPath) != INVALID_FILE_ATTRIBUTES)
            return TRUE;
    
        bRetCode = ::CreateDirectory(szPath, NULL);
        if (!bRetCode && ::GetLastError() != ERROR_ALREADY_EXISTS)
        {
            PathRemoveFileSpec(strPath);
            if (strPath.IsEmpty()) return FALSE;
    
            bRetCode = CreateDeepDirectory(strPath);
            if (!bRetCode) return FALSE;
    
            bRetCode = ::CreateDirectory(szPath, NULL);
            if (!bRetCode && ::GetLastError() != ERROR_ALREADY_EXISTS)
                return FALSE;
        }
    
        return TRUE;
    }
    
    void PathAddBackSlach(CString& strPath)
    {
        CString strTemp;
        strTemp = strPath.Right(1);
    
        if (strTemp != _T("\\") && strTemp != _T("/"))
            strPath.Append(_T("\\"));
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        CString strInputFilePath = GetCurrentModuleDir() + L"\\files.pak";
        CString strOutDir = GetCurrentModuleDir() + L"\\output\\";
        if (argc == 3)
        {
            strInputFilePath = argv[1];
            strOutDir = argv[2];
        }
    
        PathAddBackSlach(strOutDir);
        CreateDeepDirectory(strOutDir);
    
        CUnPacketFiles files;
        files.UnPacketFiles(strInputFilePath, strOutDir);
        return 0;
    }
    
    
    展开全文
  • 剑网3客户端解包工具

    2012-03-27 17:12:56
    1 本工具支持解包整个客户端,或者只解包单个pak包内的文件。 如果解包整个客户端,请点击“选择”按钮选择“JX3Launcher.exe”文件。 再选择客户端的类型即可。目前只支持测试服和金山正式服。 如果只是想解包...
  • 3、下载Chrome PAK文件解包工具(ChromePAK V5)并剪切到D:\A 解包工具下载地址:https://shuax.com/cpv5 4、打开cmd执行解包命令 D:\A\pak_tools.exe -c=unpack -f=D:\A\resources.pak 解包成功如下...
  • 然后开始分析pak文件结构,分析好了开始写解包工具 将pak拖到工具上开始解包 解包好了,点开解包好的文件看一下,经过分析里面skin和mesh为模型 然后分析结构,开始写转换工具,此处省略 然后开始转换 转换...
  • 这源码是用于解包植物大战僵尸的main.pak文件。 解密部分已搞定,数据写出部分因创建目录效率太低,留给大家优化把。
  • 龙之谷TT打包解包

    2014-01-08 16:06:10
    查看PAK文件 并且编辑内容,以及还原
  • Extractor,一个可以让你从容不迫的应对007,ADAT,APAK,MHW,MIX,MW4,NPAK,PACK,PAK,PBO,PFF,PKR,POD,RES,U,等等数十种文件包的解包/封包程序,程序可以在扫描过程中自动按选择的分类识别你需要的文件...
  • 资源介绍:真封神pak工具操作易语言源码仅限于学习使用pak文件的解包打包。资源作者:

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

pak解包