Supporter wq223 Posted April 22 Supporter Posted April 22 (edited) Quote The initial discussion of this thread was done in zenhax I linked the original topic from zenhax This post completed the early preliminary research on this game, and at that time, the extraction of files was basically implemented. In order to make the post more practical and give more topics to discuss, I will set the topic of this post as a Messiah engine file format research, which can discuss more Messiah-related games, not just for ace racer During these times, the engine version has been upgraded many times, and the index table has been updated. Now the hash names of some games have been encrypted in the index table. The index table of each game is basically the same, but it is different. As far as I know, there should be more than three different versions of the index table. 1. Index Version 1 If they have not been updated, these indexes should be the earliest version, without any fiddling, and are also the easiest version to study. You can use netease_mpk_v2.bms to disassemble it //Some new games still use these initial index versions, but have added new compression formats. If you are familiar with bms scripts or python scripts, you can add decompression by yourself, and others remain unchanged 2. Index version 2 The index of this structure is still very simple, but the file name seems to have been specially processed, and normal file names will not be generated in the index. Under the same version of the index, the number of bytes used by different games is also different. Some games take up 20 bytes in one file, while some games take up 24 bytes in one file 3. Index version 3 I seem to have only seen this version of the index on Knives Out games. A large part of the index is overwritten by 0, the file name is not encrypted, the size and offset can also be read, but the index structure is very messy, I can only complete manual extraction, and have not written an automated script (from the index after hot update) 4/Index version 4? Now some index files seem to be replaced directly by database file types, so I directly call them version 4, the entries of these index files are stored in the database file, and after parsing from the database, it may be necessary to make some fiddling to allow the script to extract correctly More types are also added for compressed files, I'm trying to understand all compressions to support more games 1.ZZZ4 (lz4 compression) 2.ZZZZ (lzo1x compression) 3.ZZZX (seems to be encrypted lz4) has a script where_winds_meet_mpk.bms that can handle this compression, but the script is outdated, not sure if the key is outdated 4.LZMA (lzma compression) 5.ZSTD (zstd compression) 6.1084 (exclusive or lz4 compression) 7.108D (zstd compression) 8.E206 (corrupted zlib compression) 9.EZST (Unknown compression This post will discuss the index structure, compression type, and other related files about the engine Edited Thursday at 06:07 AM by wq223 1
Supporter wq223 Posted April 22 Author Supporter Posted April 22 I updated the netease_mpk.bms script Added two new compression types, which should now handle more games # NetEase messiah game mpkinfo/mpk (script 0.3) # List of supported games:Diablo Immortal,Ace Racer,Badlanders,Lovebrush Chronicles,TankCompany # Originally created by aluigi get EXT extension if EXT & "info" # mpkinfo and any other similar extension else print "Error: you must open the info file" cleanexit endif string EXT - "info" get RES_NAME basename get VER long get FILES long for i = 0 < FILES get NAMESZ short getdstring NAME NAMESZ get OFFSET long get SIZE long get FILENUM long math IS_FOLDER = FILENUM math IS_FOLDER & 1 math FILENUM >> 1 putarray 0 i FILENUM putarray 1 i NAME putarray 2 i OFFSET putarray 3 i SIZE putarray 4 i IS_FOLDER next i sortarray 0 1 math LAST_FILENUM = -1 for i = 0 < FILES getarray FILENUM 0 i getarray NAME 1 i getarray OFFSET 2 i getarray SIZE 3 i getarray IS_FOLDER 4 i if IS_FOLDER == 0 if FILENUM != LAST_FILENUM math LAST_FILENUM = FILENUM if FILENUM == 0 string TMP p "%s.%s" RES_NAME EXT else string TMP p "%s%d.%s" RES_NAME FILENUM EXT endif open FDSE TMP 0 EXISTS endif if EXISTS != 0 goto OFFSET getdstring ALGO 4 if ALGO == "ZZZ4" comtype lz4 get XSIZE long savepos OFFSET clog NAME OFFSET SIZE XSIZE elif ALGO == "LZMA" comtype lzma get XSIZE long savepos OFFSET clog NAME OFFSET SIZE XSIZE elif ALGO == "ZSTD" comtype zstd get XSIZE long savepos OFFSET clog NAME OFFSET SIZE XSIZE elif ALGO == "ZZZZ" comtype lzo1x get XSIZE long savepos OFFSET clog NAME OFFSET SIZE XSIZE else log NAME OFFSET SIZE endif endif endif next i netease_mpk_v3.zip 1
SmurF Posted April 26 Posted April 26 On 23/4/2025 at 03.19, wq223 said: Saya memperbarui skrip netease_mpk.bms Menambahkan dua jenis kompresi baru, yang sekarang seharusnya menangani lebih banyak game netease_mpk_v3.zip 824 B Bahasa Indonesia: 10 unduhan does this work for BloodStrike game?
Supporter wq223 Posted April 26 Author Supporter Posted April 26 49 minutes ago, SmurF said: does this work for BloodStrike game? This is NetEase's Messiah Engine file processing script. Make sure it is the same engine
SmurF Posted April 27 Posted April 27 11 hours ago, wq223 said: Ini adalah skrip pemrosesan berkas Messiah Engine milik NetEase. Pastikan ini adalah mesin yang sama I have tried and got an error. no Files extracted from the bloodstrike .mpk File.
Supporter wq223 Posted April 27 Author Supporter Posted April 27 1 hour ago, SmurF said: 我尝试过,但出现错误。没有从 bloodstrike .mpk 文件中提取文件。 You can provide a file example
Supporter wq223 Posted April 28 Author Supporter Posted April 28 On 4/27/2025 at 3:52 PM, SmurF said: I have tried and got an error. no Files extracted from the bloodstrike .mpk File. I checked an earlier post from your homepage and downloaded the sample from there The mpk file provided is the index of version 3, and the above bms script cannot handle it I parsed the structure and wrote a python script to extract it But it cannot be extracted in full, I can only extract 90% of the content Note that this is just preliminary work , I need you to provide at least two samples of mpk files and indexes to detect and judge whether there is any problem with other logic Attach a few extracted files to inform you that the work is normal example.zip
SmurF Posted April 29 Posted April 29 17 hours ago, wq223 said: Bahasa Indonesia:Saya memeriksa posting sebelumnya dari beranda Anda dan mengunduh sampel dari sana File mpk yang disediakan adalah indeks versi 3, dan skrip bms di atas tidak dapat menanganinya Saya mengurai struktur dan menulis skrip python untuk mengekstraknya Tetapi tidak dapat diekstraksi secara penuh, saya hanya dapat mengekstrak 90% dari konten Perhatikan bahwa ini hanyalah pekerjaan awal, saya perlu Anda memberikan setidaknya dua sampel file mpk dan indeks untuk mendeteksi dan menilai apakah ada masalah dengan logika lainnya Lampirkan beberapa file yang diekstraksi untuk memberi tahu Anda bahwa pekerjaannya normal contoh.zip 1,07 MB Bahasa Indonesia: 0 unduhan Thank you. I will test it later.
Supporter wq223 Posted April 29 Author Supporter Posted April 29 1 hour ago, SmurF said: Thank you. I will test it later. Cleverly use tools from other games, most files can be parsed normally
SmurF Posted April 29 Posted April 29 On 23/4/2025 at 03.19, wq223 said: I updated the netease_mpk.bms script Added two new compression types, which should now handle more games # NetEase messiah game mpkinfo/mpk (script 0.3) # List of supported games:Diablo Immortal,Ace Racer,Badlanders,Lovebrush Chronicles,TankCompany # Originally created by aluigi get EXT extension if EXT & "info" # mpkinfo and any other similar extension else print "Error: you must open the info file" cleanexit endif string EXT - "info" get RES_NAME basename get VER long get FILES long for i = 0 < FILES get NAMESZ short getdstring NAME NAMESZ get OFFSET long get SIZE long get FILENUM long math IS_FOLDER = FILENUM math IS_FOLDER & 1 math FILENUM >> 1 putarray 0 i FILENUM putarray 1 i NAME putarray 2 i OFFSET putarray 3 i SIZE putarray 4 i IS_FOLDER next i sortarray 0 1 math LAST_FILENUM = -1 for i = 0 < FILES getarray FILENUM 0 i getarray NAME 1 i getarray OFFSET 2 i getarray SIZE 3 i getarray IS_FOLDER 4 i if IS_FOLDER == 0 if FILENUM != LAST_FILENUM math LAST_FILENUM = FILENUM if FILENUM == 0 string TMP p "%s.%s" RES_NAME EXT else string TMP p "%s%d.%s" RES_NAME FILENUM EXT endif open FDSE TMP 0 EXISTS endif netease_mpk_v3.zip 824 B Bahasa Indonesia: 12 unduhan did you extract it with this script?
SmurF Posted April 29 Posted April 29 On 27/4/2025 at 17.24, wq223 said: Anda dapat memberikan contoh file the error I experienced QuickBMS generic files extractor and reimporter 0.12.0 by Luigi Auriemma e-mail: [email protected] web: aluigi.org (Aug 24 2022 - 10:55:28) quickbms.com Homepage zenhax.com ZenHAX Forum @zenhax @quickbms Twitter & Scripts - GUI mode activated, remember that the tool works also from command-line where are available various options like folder scanning, filters and so on - select BMS script. type ? for using the content of clipboard like a script - select input archives/files, type * for the whole folder and subfolders - select output folder where extracting files - open input file C:\modding\Patch.mpk - open script C:\modding\netease_mpk_v3.bms - set output folder C:\modding offset filesize filename -------------------------------------- Error: you must open the info file - 0 files found in 0 seconds coverage file 0 0% 0 55598377 . offset 00000000 Press ENTER or close the window to quit
SmurF Posted April 29 Posted April 29 21 minutes ago, SmurF said: kesalahan yang saya alami Ekstraktor dan pengimpor ulang file generik QuickBMS 0.12.0 oleh Luigi Auriemma email: [email protected] web: aluigi.org (24 Agustus 2022 - 10:55:28) quickbms.com Beranda zenhax.com Forum ZenHAX @zenhax @quickbms Twitter & Skrip - Mode GUI diaktifkan, ingat bahwa alat ini juga berfungsi dari baris perintah di mana tersedia berbagai opsi seperti pemindaian folder, filter, dan sebagainya - pilih skrip BMS. ketik ? untuk menggunakan konten clipboard seperti skrip - pilih arsip/file input, ketik * untuk seluruh folder dan subfolder - pilih folder output tempat mengekstrak file - buka file input C:\modding\Patch.mpk - buka skrip C:\modding\netease_mpk_v3.bms - atur folder output C:\modding offset filesize filename -------------------------------------- Kesalahan: Anda harus membuka file info - 0 file ditemukan dalam 0 detik cakupan file 0 0% 0 55598377 . offset 00000000 Tekan ENTER atau tutup jendela untuk keluar I really don't understand this .mpk file. Is this file the same as the .pak pubg file that can be extracted and find a collection of other files inside?
SmurF Posted April 29 Posted April 29 On 27/4/2025 at 17.24, wq223 said: Anda dapat memberikan contoh file This is an example of the file I want to extract. example files.zip
Supporter wq223 Posted April 29 Author Supporter Posted April 29 10 hours ago, SmurF said: did you extract it with this script? You should notice the message I sent before that the mpk you provided is a new version of the file and cannot be extracted using the quickbms script So I wrote a python script, but I need more files to verify that the script can handle it properly
Supporter wq223 Posted April 30 Author Supporter Posted April 30 8 hours ago, SmurF said: 这是我想要提取的文件的示例。 示例文件.zip 48.75 MB · 3 次下载 There are too few files provided. Is there any patch1.mpk?, providing at least two mpk files
SmurF Posted April 30 Posted April 30 1 jam yang lalu, wq223 berkata: Terlalu sedikit file yang disediakan. Apakah ada patch1.mpk?, yang menyediakan setidaknya dua file mpk Saya ingin memberikan patch 1, tetapi filenya terlalu besar sehingga gagal terkirim.
Supporter wq223 Posted April 30 Author Supporter Posted April 30 2 hours ago, SmurF said: Saya ingin memberikan patch 1, tetapi filenya terlalu besar sehingga gagal terkirim. Try this script, it only verifies the files you provide, and does not fully verify all files By the way, if you can download it online, you can download it directly Because the file extracted in this version is no longer complete Script running method The first input content requires input.mpkinfo file The second input requires an output directory mpk3.py 1
SmurF Posted April 30 Posted April 30 4 jam yang lalu, wq223 berkata: Coba skrip ini, skrip ini hanya memverifikasi file yang Anda berikan, dan tidak sepenuhnya memverifikasi semua file Ngomong-ngomong, kalau bisa di download online, bisa langsung di download Karena file yang diekstrak pada versi ini sudah tidak lengkap lagi Metode menjalankan skrip Konten input pertama memerlukan file input.mpkinfo Input kedua memerlukan direktori output mpk3.py 9,01 kB Bahasa Indonesia: 2 unduhan Saya tidak tahu cara menjalankan skrip .py karena saya belum pernah menggunakan skrip ini. Saya akan menunggu dan bersabar untuk skrip NeteaseMpk.bms yang diperbarui 😁
Supporter wq223 Posted April 30 Author Supporter Posted April 30 1 hour ago, SmurF said: Saya tidak tahu cara menjalankan skrip .py karena saya belum pernah menggunakan skrip ini. Saya akan menunggu dan bersabar untuk skrip NeteaseMpk.bms yang diperbarui 😁 Writing scripts for mpk3 on quickbms should be more troublesome than imagined, because this version is too weird, and many places need to constantly adjust scripts. In games using mpk3, each game uses different structures, and different versions of the same game will also have minor changes. If someone can write a quickbms script for you, it means he is very patient 1
SmurF Posted May 1 Posted May 1 14 hours ago, wq223 said: Menulis skrip untuk mpk3 di quickbms seharusnya lebih merepotkan daripada yang dibayangkan, karena versi ini terlalu aneh, dan banyak tempat perlu terus-menerus menyesuaikan skrip. Dalam permainan yang menggunakan mpk3, setiap permainan menggunakan struktur yang berbeda, dan versi yang berbeda dari permainan yang sama juga akan memiliki perubahan kecil. Jika seseorang dapat menulis skrip quickbms untuk Anda, itu berarti dia sangat sabar yeah i will wait for that 😁
SmurF Posted May 1 Posted May 1 21 hours ago, wq223 said: Coba skrip ini, skrip ini hanya memverifikasi file yang Anda berikan, dan tidak sepenuhnya memverifikasi semua file Ngomong-ngomong, kalau bisa di download online, bisa langsung di download Karena file yang diekstrak pada versi ini sudah tidak lengkap lagi Metode menjalankan skrip Konten input pertama memerlukan file input.mpkinfo Input kedua memerlukan direktori output mpk3.py 9,01 kB Bahasa Indonesia: 3 unduhan is there any video or how to use this .py script?? i really don't know how to use it.
Engineers shak-otay Posted May 4 Engineers Posted May 4 (edited) On 5/1/2025 at 3:43 AM, SmurF said: is there any video or how to use this .py script?? i really don't know how to use it. I confess I had to read the instructions thrice but here you go: Open a console window on windows (lz4 module must be installed, use pip, if not) Quote python mpk3.py patch.mpk test then you're prompted to enter the Patch.idx path, enter patch.mpkinfo There's many lines logged like so: MPK file not found: Patch7.mpk (file: f0/f09689b8-3040-408c-a2be-d47d07969139) but in the end I got 1107 files with 67.8 MB in an extracted folder. (parameter test was not used, dunno why.) Edited May 4 by shak-otay
Supporter wq223 Posted May 4 Author Supporter Posted May 4 7 hours ago, shak-otay said: I confess I had to read the instructions thrice but here you go: Open a console window on windows (lz4 module must be installed, use pip, if not) There's many lines logged like so: MPK file not found: Patch7.mpk (file: f0/f09689b8-3040-408c-a2be-d47d07969139) but in the end I got 1107 files with 67.8 MB in an extracted folder. (parameter test was not used, dunno why.) The script is only temporary, just to temporarily disassemble resources from the provided files. Because I haven't figured out the storage location logic of the file, and the scripts can't ensure that 100% of the content can be extracted The mpkinfo structure they use seems to be very complicated. For example, after jumping, it is a file name normally, but sometimes after jumping, it will reach a bunch of garbled locations, or some blocks have no data, some blocks have duplicate data, and a file appears repeatedly in multiple blocks. If the user knows the network link of his game, he can download unpacked separate files through the network, but further processing is still required 1
Engineers shak-otay Posted May 4 Engineers Posted May 4 Yeah, thanks. (The mention of the "file not found" wasn't meant as a complaint, btw, just to assure that users don't think they did something wrong.)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now