From iDroid Project

Jump to: navigation, search

Instructions for building XPWN

These are very basic instructions on how to build xpwn related projects, they are tailored to Debian based systems. They are not meant to be a substitute for experience in programming in GNU/Linux environments, but it should be a good starting point.

1. Install a basic build environment (compilers, etc.):

sudo apt-get install build-essential

2. Install some prerequisites libraries required by xpwn:

sudo apt-get install libcrypt-dev libz-dev libbz2-dev3 libusb-dev
  • libcrypt-dev and libbz2-dev3 have no installation candidates under current versions of ubuntu. Use
    sudo aptitude install libgcrypt-dev libbz2-dev
    to install their current substitutes.
  • some other packages are necessary to compile xpwn, they are :
    libssl-dev libpng12-dev

3. Install cmake. It is recommended you download and build it from the official cmake website, since versions >= 2.6.0 are recommended.

wget http://www.cmake.org/files/v2.6/cmake-2.6.2.tar.gz
tar zxvf cmake-2.6.2.tar.gz
cd cmake-2.6.2
sudo make install

Now you are ready to build xpwn. It is highly recommended that you build out-of-source (that is, the build products are not placed into the same folders as the sources). This is much neater and cleaning up is as simple as deleting the build products folder.

Assuming xpwn sources are in ~/xpwn:

4. Create a build folder

cd ~
mkdir build
cd build

5. Create Makefiles

cmake ~/xpwn

Warning: only do this if you manually installed step 3

  • NOTE: If the above command spits:
    cmake_minimum_required(VERSION 2.6)
    you can safely bypass that error by removing the offending line of code in:
    it should be the first line of code.

6. Build


7. Package

make package


These command-lines can be substituted in for step 6. The products are in the subfolders (make package will not include them).

xpwn library (for IPSW generation)

make libXPwn.a

Windows pwnmetheus library (for QuickPwn)

make libpwnmetheus.dll


These command-lines can be substituted in for step 5.

Add debugging symbols:

cmake ~/xpwn -DCMAKE_C_FLAGS=-g

Try to only use static libraries:

cmake ~/xpwn -DBUILD_STATIC=YES


This is a complex and advanced topic, but it is possible with the appropriate CMake toolchain files and properly configured build environment. I have crossbuilt Windows, OS X, Linux x86, Linux x64, and iPhone binaries from one Ubuntu machine. The source trees are properly configured for this task.


Consult the CMake documentation and wiki and look in the CMakeLists.txt files for hints on how things are supposed to work.