explaingit

alonemonkey/monkeydev

6,788Objective-CAudience · developerComplexity · 4/5Setup · hard

TLDR

MonkeyDev is an Xcode toolkit for iOS reverse engineering that lets you analyze, patch, and inject code into existing iOS apps and re-sign them for installation on a non-jailbroken test device.

Mindmap

mindmap
  root((monkeydev))
    What it does
      iOS app patching
      Code injection
      Binary analysis
    Bundled tools
      class-dump
      Reveal UI inspector
      Cycript scripting
      restore-symbol
    Use cases
      Security research
      Tweak development
      Runtime analysis
    Tech stack
      Objective-C
      Xcode
      CocoaPods
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Extract the class and method structure from a compiled iOS app binary you don't have source code for using class-dump

USE CASE 2

Inject a custom dynamic library into an existing iOS app and re-sign it so it runs on your physical test device

USE CASE 3

Write runtime behavior patches for iOS apps using Logos Tweak or CaptainHook Tweak inside an Xcode project

USE CASE 4

Inspect the live UI layout of a running iOS app visually using the bundled Reveal integration

Tech stack

Objective-CXcodeCocoaPodsCycript

Getting it running

Difficulty · hard Time to first run · 1h+

Requires a Mac with Xcode installed plus a physical iOS device for testing, code-signing setup is non-trivial.

In plain English

MonkeyDev is a development toolkit for iOS reverse engineering and app modification, built as an upgraded version of an older tool called iOSOpenDev. Its main purpose is to let developers analyze and patch existing iOS apps without needing a jailbroken device. It integrates into Xcode, the standard Mac development environment for Apple platforms. The toolkit combines several capabilities. It supports two styles of tweak development: CaptainHook Tweak and Logos Tweak, both of which are ways to write code that modifies the behavior of an existing app at runtime. It also supports creating standalone command-line tools for iOS. Beyond tweak writing, MonkeyDev can inject custom dynamic libraries into an app, meaning you can add your own code to an app you did not write. Several analysis tools come bundled with the workflow. Class-dump extracts the class and method structure from a compiled app so you can see what functions and data it contains without having the original source code. Restore-symbol attempts to recover symbol names that were stripped from the binary during compilation. Reveal is a UI inspector that shows you the visual layout of a running app. Cycript allows scripting against a live app at runtime. The toolkit handles re-signing automatically: when you modify and inject code into an app, it re-signs the result so it can be installed and run on a non-jailbroken test device. CocoaPods integration is also included, which means third-party libraries can be pulled into tweak projects the same way they are in standard iOS development. The README is brief, with most detail deferred to a separate Wiki. It includes a disclaimer stating the software is intended for technical research and exchange only, and not for commercial or unlawful use.

Copy-paste prompts

Prompt 1
I want to use MonkeyDev to inject a dynamic library into an iOS app IPA and re-sign it for my test device. Walk me through creating the Xcode project and building the patched IPA.
Prompt 2
Use class-dump with MonkeyDev to extract all class and method names from an iOS app binary, then show me how to write a Logos Tweak that overrides one method and logs its arguments.
Prompt 3
Set up a MonkeyDev Logos Tweak project that intercepts the login function in an iOS app and prints the username and password parameters to the Xcode console.
Prompt 4
Configure CocoaPods in a MonkeyDev tweak project to add a third-party networking library as a dependency to my injected dynamic library.
Open on GitHub → Explain another repo

← alonemonkey on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.