CFW framework for PS Vita
C CMake Makefile
Permalink
Failed to load latest commit information.
substitute @ 4713452 Updated function names that changed in kernel SDK Dec 26, 2016
taihen-parser @ 6d817fd Use the new vitasdk cmake toolchain Dec 11, 2016
tests Updated function names that changed in kernel SDK Dec 26, 2016
.gitmodules Added config loading Nov 4, 2016
.travis.yml Do not create new tags in travis Dec 13, 2016
CMakeLists.txt Mark skprx as unsafe Dec 14, 2016
Doxyfile Updated docs, added usage guide, and removed need to define __KERNEL__ Nov 13, 2016
LICENSE Initial commit Sep 29, 2016
README.md Updated docs, added usage guide, and removed need to define __KERNEL__ Nov 13, 2016
USAGE.md Updated function names that changed in kernel SDK Dec 26, 2016
error.h Added support for finding the "main module" (resolves #57) Dec 13, 2016
exports.yml Export module util functions (resolves #29) Nov 26, 2016
hen.c Updated function names that changed in kernel SDK Dec 26, 2016
hen.h Export module util functions (resolves #29) Nov 26, 2016
module.c Updated function names that changed in kernel SDK Dec 26, 2016
module.h Added export interface Oct 23, 2016
patches.c Updated function names that changed in kernel SDK Dec 26, 2016
patches.h Error return if you try to hook a weak import that is not resolved yet. Nov 12, 2016
posix-compat.c Updated function names that changed in kernel SDK Dec 26, 2016
proc_map.c Updated function names that changed in kernel SDK Dec 26, 2016
proc_map.h Added doxygen documentation and readme Oct 27, 2016
slab.c Updated function names that changed in kernel SDK Dec 26, 2016
slab.h Added slab allocator Oct 9, 2016
taihen-user.c Updated function names that changed in kernel SDK Dec 26, 2016
taihen.c Added support for finding the "main module" (resolves #57) Dec 13, 2016
taihen.h Updated function names that changed in kernel SDK Dec 26, 2016
taihen_internal.h Integrated latest substitute, resolves #36 and fixes #32 Nov 26, 2016

README.md

大変

Build Status

taiHEN is a CFW framework for PS Vita™. When loaded with a kernel exploit, it acts as a common substrate for patching the system. taiHEN provides three main facilities:

  1. It disables code signature checks to allow unsigned executables.
  2. It exposes kernel peek/poke syscalls to user applications and allows loading of kernel modules.
  3. Most importantly, it provides an API for hooking and replacing functions based off of substitute.

The last point means that developers can add custom patches to kernel, system applications, and games alike.

Building

To build, you need the latest version of the toolchain with kernel support. Then just use CMake to build.

$ mkdir build && cd build
$ cmake ../
$ make

Installation

taiHEN requires a separate kernel exploit to run. Once the exploit loads taihen.skprx to the kernel, taiHEN will take care of the rest. Please refer to documentations for the exploit for more information.

Plugins

Plugins are loaded either into kernel after taiHEN is loaded or on demand when an application is launched. taiHEN reads the configuration file in ux0:tai/config.txt.

The configuration that determines the plugins to load and the load order can be found in ux0:tai/config.txt. The format is very simple and self explanatory.

# ignored line starting with #
# Kernel plugins are started with taiHEN and are in this section
*KERNEL
ux0:app/MLCL00001/henkaku.skprx
ux0:path/to/another.skprx
ux0:tai/plugin3.skprx
ux0:data/tai/plugin4.skprx
ux0:data/tai/plugin5.skprx
# titleid for SceSettings
*NPXS10015
ux0:app/MLCL00001/henkaku.suprx
ux0:data/tai/some_settings_plugin.suprx
# titleid for Package Installer
*NPXS10031
ux0:path/to/some_pkg_installer_plgin.suprx
# titleid for SceShell is special (does not follow the XXXXYYYYY format)
*main
ux0:app/MLCL00001/henkaku.skprx
ux0:data/tai/shell_plgin.skprx

The key things to note are

  1. # begins a comment, * begins a section, and any other character begins a path.
  2. KERNEL is a special section name denoting to load a kernel plugin when taiHEN is started up. All other section names are the title id of the application/game in which to load the plugin at startup. Note that SceShell has a special title id of main.
  3. In each section, there is a list of plugin paths that will be loaded in order. Paths can be anywhere but it is recommended that plugins reside in ux0:tai or ux0:data/tai. It is valid to have one plugin in multiple sections but the developer must ensure that the plugin knows which application it is loaded in if it needs to do things differently.

API

taiHEN exports an API interface both to kernel and to user. This interface is found in the documentation pages. You should also read the usage guide for more details. You can either download the release or build taiHEN yourself. After that, you can include taihen.h in your project and link with libtaihen_stub.a (for user modules) or libtaihen_kernel_stub.a (for kernel modules).