SkillAgentSearch skills...

QuickBMS

QuickBMS by aluigi - Github Mirror

Install / Use

/learn @LittleBigBug/QuickBMS
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Original Site Cache

###################################################################

QuickBMS

by Luigi Auriemma

e-mail: me@aluigi.org

web: aluigi.org

home: http://quickbms.com

help: http://zenhax.com

###################################################################

  1. Introduction
  2. Usage
  3. Reimporting the extracted files
  4. How to create scripts (for developers only!)
  5. Experimental input, output and other features
  6. Notes
  7. Support
  8. Additional credits

###################################################################

1) Introduction

QuickBMS is a multiplatform extractor engine programmed through some simple instructions contained in textual scripts, it's intended for extracting files and information from the archives and files of any software and, moreover, games.

The script language used in QuickBMS is an improvement of MexScript documented here: http://wiki.xentax.com/index.php/BMS QuickBMS is FULLY compatible with that original syntax and all the scripts that were created here: http://forum.xentax.com/viewtopic.php?t=1086

QuickBMS also supports most of the WCX plugins of Total Commander: http://www.totalcmd.net/directory/packer.html http://www.ghisler.com/plugins.htm

The original BMS language has been improved for:

  • removing implied fields, like the file number in some commands
  • adding new commands, like Encryption
  • adding new behaviors and features, like negative GoTo These improvements allow QuickBMS to work with tons of simple and complex formats and even doing tasks like modifying files, creating new files with headers, converting files and reimporting the extracted files back in their original archives.

The tool is open source under the GPL 2.0 license and works on Windows, Linux and MacOSX, on both little and big endian platforms like Intel (littlen endian) and PPC (big endian). You can distribute the original quickbms.exe file as you desire but reusing its source code and/or modifying it may require the same or compatible open source license.

The official homepage of QuickBMS with all the scripts I have written from 2009 till now is (they are just links to the same website):

http://quickbms.com \ http://quickbms.aluigi.org \ http://aluigi.altervista.org/quickbms.htm \ http://aluigi.zenhax.com/quickbms.htm (rarely updated)

There is also an official forum where it's provided support for QuickBMS and help with file formats, it's also a very good and friendly free community for reverse engineering game files:

https://zenhax.com

QuickBMS is perfect for those tasks in which you need a quick way to extract information from files and at the same time you would like to reinject them back without writing a standalone tool to do both the extraction and rebuilding jobs. This is particularly useful if you have 100 different types of archives to analyze (reverse engineering), parsing and then sharing your tools with your community. It's more easy to do that with some lines of text pasted on a forum or pastebin rather than writing 100 different standalone extraction tools plus other 100 standalone rebuilders.


For Linux and MacOSX users there is a Makefile in the src folder, the only requirements are openssl, zlib and bzip2 while the optional components are mcrypt and tomcrypt (uncomment the line near the end of the Makefile to enable them). If your distro supports apt-get and you have problems during the usage of "make", try the following:

apt-get install gcc g++ zlib1g-dev libssl-dev unicode

In case of problems on 64bit versions of Linux, try also to append a ":i386" to the previous dependencies, like:

apt-get install libssl-dev:i386

MacOSX users need to read the simple instructions written in the Makefile, just few steps for being able to compile QuickBMS easily without problems, anyway maybe try a "make" first because from version 0.8.1 it was rewritten to work easily. Updated static builds for Linux x86 and MacOSX are available on http://aluigi.altervista.org/quickbms.htm#builds

Feel free to contact me in case of problems or just post on https://zenhax.com

###################################################################

2) Usage

Simple and quick:

  • double-click on quickbms.exe

  • select the script for the type of archive you want to extract, for example zip.bms if it's a zip file.

  • select the input archive or multiple files. you can also select a whole folder by entering in it and then typing * (or "" on systems before Windows 7) in the "File name:" field, and then select Open. You can even use * to set wildcards, for example .txt or required_name or prefixsuffix

  • select the output folder where extracting the files. you can specify any filename, it will be ignored because only the current selected directory is taken

  • watch the progress status of the extraction and the final message

That's the simple "GUI" usage but QuickBMS can do various other things when launched from the console, in fact it supports many command-line options for advanced users and for who writes the scripts. You can view all the available options simply launching QuickBMS from command-line ("cmd.exe" on Windows) without arguments. The following is the current list of options:

Usage: quickbms.exe
         [options]
           <script.BMS>
             <input_archive/folder>
               [output_folder]

Options:
-l     list the files without extracting them
-f W   filter the files to extract using the W wildcards separated by comma or
       semicolon, example -f "{}.mp3,{}.txt;{}myname{}"
       if the filter starts with ! it's considered an ignore/exclusion filter,
       if .txt it's read as text file with multiple filters, * and {} are same
       example: quickbms -f "{}.mp3;!{}.ogg" script.bms archive.dat output
       example: quickbms -f myfilters_list.txt script.bms archive.dat
       use {} instead of * to avoid issues on Windows, multiple -f are ok too
-F W   as above but works only with the files in the input folder (if used)
       example: quickbms -F "{}.dat" script.bms input_folder output_folder
-o     overwrite the output files without confirmation if they already exist
-k     keep the current files if already exist without asking (skip all)
-K     automatically rename the output files if duplicates already exist
-r     experimental reimport option that should work with many archives:
         quickbms script.bms archive.pak output_folder
         modify the needed files in output_folder and maybe remove the others
         quickbms -w -r script.bms archive.pak output_folder
       you MUST read section 3 of quickbms.txt before using this feature,
       use -r -r for the alternative and better REIMPORT2 mode
       use -r -r -r for REIMPORT3 that shrinks/enlarges archive if no offset
-u     check if there is a new version of QuickBMS available
-i     generate an ISO9660 file instead of extracting every file, the name of
       the ISO image will be the name of the input file or folder
-z     exactly as above but it creates a ZIP file instead of an ISO image

Advanced options:
-d     automatically create an additional output folder with the name of the
       input folder and file processed, eg. models/mychar/mychar.arc/*,
       -d works also if input and output folders are the same (rename folder)
-D     like -d but without the folder with the filename, eg. models/mychar/*
-E     automatically reverse the endianess of any input file by simply reading
       each field and writing the reversed value, each Get produces a Put
-c     quick list of basic BMS commands and some notes about this tool
-S CMD execute the command CMD on each file extracted, you must specify the
       #INPUT# placeholder which will be replaced by the name of the file
       example: -S "lame.exe -b 192 -t --quiet #INPUT#"
-Y     automatically answer yes to any question
-O F   redirect the concatenated extracted files to output file F, data is
       appended if file F exists, optional F extensions supported: TAR
-s SF  add a script file or command before the execution of the input script,
       useful if an archive uses a different endianess or encryption and so on
       SF can be a script or directly the bms instruction you want to execute
-.     don't terminate QuickBMS if there is an error while parsing multiple
       files (like wrong compression or small file), just continue with the
       other files in the folder; useful also in rare cases in reimport mode

Debug and experimental options:
-v     verbose debug script information, useful for verifying possible errors
-V     alternative verbose info, useful for programmers and formats debugging
-q     quiet, no *log information
-Q     very quiet, no information displayed except the Print command
-L F   dump the offset, size and name of the extracted files into the file F
-x     use the hexadecimal notation in myitoa (debug)
-0     no extraction of files, useful for testing a script without using space
-R     needed for programs that act as interface for QuickBMS and in batch
-a S   pass arguments to the input script that will take the names
       quickbms_arg1, quickbms_arg2, quickbms_arg3 and so on, note they are
       handled as arguments so pay attention to spaces and commas, eg:
         -a "arg1 \"arg 2\", arg3"
         -a arg1 -a "\"arg 2\"" -a arg3
       a full backup of the whole -a options is on the var quickbms_arg
-H     experimental HTML hex viewer output, use it only with very small files!
-X     experimental hex viewer output o
View on GitHub
GitHub Stars384
CategoryDevelopment
Updated3h ago
Forks37

Languages

C

Security Score

100/100

Audited on Mar 31, 2026

No findings