Skip to main content

A lightweight emulation framework for emulating security algorithms of iOS executables and libraries.

Project description

Chomper

build PyPI PyPI - Python Version GitHub license

Chomper is a lightweight emulation framework based on Unicorn. It is mainly used to emulate security algorithms of iOS executables and libraries. In addition, it also provides limited support for Android native libraries.

Features

  • Basic emulation for ELF and Mach-O
  • Support for a subset of iOS system libraries (from iOS 14.4.0)

Requirements

  • Python 3.8+
  • Unicorn 2.0.0+

Installation

Clone the repository to use the latest version (recommended):

$ git clone https://github.com/sledgeh4w/chomper ; cd chomper
$ pip install .

Using the version on PyPI:

$ pip install chomper

Usage

Emulate iOS executables.

import uuid

from chomper import Chomper
from chomper.const import ARCH_ARM64, OS_IOS

# For iOS, system libraries will be automatically loaded from `rootfs_path`
emu = Chomper(
    arch=ARCH_ARM64,
    os_type=OS_IOS,
    rootfs_path="rootfs/ios",
)

# Load main program
duapp = emu.load_module("examples/binaries/ios/com.siwuai.duapp/DUApp")

s = "chomper"

# Construct arguments
a1 = emu.create_string("objc")
a2 = emu.create_string(s)
a3 = len(s)
a4 = emu.create_string(str(uuid.uuid4()))
a5 = emu.create_buffer(8)
a6 = emu.create_buffer(8)
a7 = emu.create_string("com.siwuai.duapp")

# Call function
emu.call_address(duapp.base + 0x9322118, a1, a2, a3, a4, a5, a6, a7)
result = emu.read_string(emu.read_pointer(a5))

Working with Objective-C.

from chomper import Chomper
from chomper.const import ARCH_ARM64, OS_IOS
from chomper.objc import ObjcRuntime

emu = Chomper(
    arch=ARCH_ARM64,
    os_type=OS_IOS,
    rootfs_path="rootfs/ios",
)

objc = ObjcRuntime(emu)

emu.load_module("examples/binaries/ios/cn.com.scal.sichuanair/zsch")

# Use this context manager to ensure that Objective-C objects can be automatically released
with objc.autorelease_pool():
    # Find class
    zsch_rsa_class = objc.find_class("ZSCHRSA")

    # Construct NSString object
    a1 = objc.create_ns_string("test")

    # Call Objective-C method
    req_sign = zsch_rsa_class.call_method("getReqSign:", a1)

    # Convert NSString object to C string
    result_ptr = req_sign.call_method("UTF8String")
    result = emu.read_string(result_ptr)

Emulate Android native libraries.

from chomper import Chomper
from chomper.const import ARCH_ARM64, OS_ANDROID

emu = Chomper(arch=ARCH_ARM64, os_type=OS_ANDROID)

# Load C standard and other libraries
emu.load_module("rootfs/android/system/lib64/libc.so")
emu.load_module("rootfs/android/system/lib64/libz.so")

libszstone = emu.load_module(
    "examples/binaries/android/com.shizhuang.duapp/libszstone.so",
    exec_init_array=True,
)

s = "chomper"

a1 = emu.create_string(s)
a2 = len(s)
a3 = emu.create_buffer(1024)

result_size = emu.call_address(libszstone.base + 0x2F1C8, a1, a2, a3)
result = emu.read_bytes(a3, result_size)

Examples

There are some security algorithm emulation codes in algorithms.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chomper-0.3.6.tar.gz (67.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chomper-0.3.6-py3-none-any.whl (68.8 kB view details)

Uploaded Python 3

File details

Details for the file chomper-0.3.6.tar.gz.

File metadata

  • Download URL: chomper-0.3.6.tar.gz
  • Upload date:
  • Size: 67.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.9.13

File hashes

Hashes for chomper-0.3.6.tar.gz
Algorithm Hash digest
SHA256 0d13be005cbcf540285aa87a0f9d300cc657997f9c4849cab41f541693c80b85
MD5 50e23c7045b725d9c220ca623db307f1
BLAKE2b-256 8590e62436cbfab946ba8be9d951457cd00a90c81897ef508d0601b5bc60fa73

See more details on using hashes here.

File details

Details for the file chomper-0.3.6-py3-none-any.whl.

File metadata

  • Download URL: chomper-0.3.6-py3-none-any.whl
  • Upload date:
  • Size: 68.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.9.13

File hashes

Hashes for chomper-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 934be8de384461915c33754e84bf7b09c60014d35e8d28d163e400b27441c2fa
MD5 5bd88c331f4444d2aed6f0c2315041a8
BLAKE2b-256 30299c0ef87e02f21131bd0d17acbc57a589db77330621e06b98b4c816a98950

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page