vardoger-vm 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vardoger_vm-0.3.1/.clang-format +1 -0
- vardoger_vm-0.3.1/.github/workflows/ci.yml +38 -0
- vardoger_vm-0.3.1/.github/workflows/publish.yml +70 -0
- vardoger_vm-0.3.1/.gitignore +25 -0
- vardoger_vm-0.3.1/CMakeLists.txt +58 -0
- vardoger_vm-0.3.1/COPYING +674 -0
- vardoger_vm-0.3.1/COPYING.LESSER +165 -0
- vardoger_vm-0.3.1/PKG-INFO +113 -0
- vardoger_vm-0.3.1/README.md +198 -0
- vardoger_vm-0.3.1/core/android/android_env.cpp +1014 -0
- vardoger_vm-0.3.1/core/android/stubs.cpp +2413 -0
- vardoger_vm-0.3.1/core/android/syscalls.cpp +767 -0
- vardoger_vm-0.3.1/core/android/system.cpp +260 -0
- vardoger_vm-0.3.1/core/android/vfs.cpp +145 -0
- vardoger_vm-0.3.1/core/art/art_bringup.cpp +179 -0
- vardoger_vm-0.3.1/core/art/art_runtime.cpp +243 -0
- vardoger_vm-0.3.1/core/dex/dalvik.cpp +605 -0
- vardoger_vm-0.3.1/core/dex/dex_file.cpp +211 -0
- vardoger_vm-0.3.1/core/dex/lifecycle.cpp +563 -0
- vardoger_vm-0.3.1/core/elf/elf_loader.cpp +352 -0
- vardoger_vm-0.3.1/core/engine/disassembler.cpp +61 -0
- vardoger_vm-0.3.1/core/engine/engine.cpp +358 -0
- vardoger_vm-0.3.1/core/engine/gdb_stub.cpp +866 -0
- vardoger_vm-0.3.1/core/engine/memory.cpp +245 -0
- vardoger_vm-0.3.1/core/engine/scheduler.cpp +365 -0
- vardoger_vm-0.3.1/core/engine/tracer.cpp +29 -0
- vardoger_vm-0.3.1/core/engine/trampoline.cpp +70 -0
- vardoger_vm-0.3.1/core/extract/debug_hooks.cpp +524 -0
- vardoger_vm-0.3.1/core/extract/extractor.cpp +199 -0
- vardoger_vm-0.3.1/core/jni/java_runtime.cpp +329 -0
- vardoger_vm-0.3.1/core/jni/jni.cpp +934 -0
- vardoger_vm-0.3.1/core/py/vardoger_capi.cpp +660 -0
- vardoger_vm-0.3.1/include/vardoger/android/android_env.hpp +113 -0
- vardoger_vm-0.3.1/include/vardoger/android/stubs.hpp +161 -0
- vardoger_vm-0.3.1/include/vardoger/android/syscalls.hpp +54 -0
- vardoger_vm-0.3.1/include/vardoger/android/system.hpp +120 -0
- vardoger_vm-0.3.1/include/vardoger/android/vfs.hpp +95 -0
- vardoger_vm-0.3.1/include/vardoger/art/art_bringup.hpp +38 -0
- vardoger_vm-0.3.1/include/vardoger/art/art_runtime.hpp +90 -0
- vardoger_vm-0.3.1/include/vardoger/dex/dalvik.hpp +78 -0
- vardoger_vm-0.3.1/include/vardoger/dex/devirt_rebuild.hpp +1459 -0
- vardoger_vm-0.3.1/include/vardoger/dex/dex_file.hpp +90 -0
- vardoger_vm-0.3.1/include/vardoger/dex/lifecycle.hpp +109 -0
- vardoger_vm-0.3.1/include/vardoger/dex/rebuilder.hpp +250 -0
- vardoger_vm-0.3.1/include/vardoger/elf/elf.hpp +146 -0
- vardoger_vm-0.3.1/include/vardoger/elf/elf_loader.hpp +63 -0
- vardoger_vm-0.3.1/include/vardoger/engine/abi.hpp +38 -0
- vardoger_vm-0.3.1/include/vardoger/engine/address_space.hpp +45 -0
- vardoger_vm-0.3.1/include/vardoger/engine/args.hpp +42 -0
- vardoger_vm-0.3.1/include/vardoger/engine/disassembler.hpp +59 -0
- vardoger_vm-0.3.1/include/vardoger/engine/engine.hpp +125 -0
- vardoger_vm-0.3.1/include/vardoger/engine/gdb_stub.hpp +113 -0
- vardoger_vm-0.3.1/include/vardoger/engine/memory.hpp +98 -0
- vardoger_vm-0.3.1/include/vardoger/engine/scheduler.hpp +112 -0
- vardoger_vm-0.3.1/include/vardoger/engine/tracer.hpp +32 -0
- vardoger_vm-0.3.1/include/vardoger/engine/trampoline.hpp +59 -0
- vardoger_vm-0.3.1/include/vardoger/extract/debug_hooks.hpp +40 -0
- vardoger_vm-0.3.1/include/vardoger/extract/extractor.hpp +72 -0
- vardoger_vm-0.3.1/include/vardoger/jni/java_runtime.hpp +210 -0
- vardoger_vm-0.3.1/include/vardoger/jni/jni.hpp +62 -0
- vardoger_vm-0.3.1/include/vardoger/jni/jni_slots.inc +245 -0
- vardoger_vm-0.3.1/include/vardoger/util/rc4.hpp +75 -0
- vardoger_vm-0.3.1/pyproject.toml +56 -0
- vardoger_vm-0.3.1/python/vardoger/README.md +97 -0
- vardoger_vm-0.3.1/python/vardoger/__init__.py +587 -0
- vardoger_vm-0.3.1/python/vardoger/_native.py +218 -0
- vardoger_vm-0.3.1/python/vardoger/examples/art_bringup_probe.py +46 -0
- vardoger_vm-0.3.1/python/vardoger/examples/drive_jni.py +37 -0
- vardoger_vm-0.3.1/python/vardoger/examples/search_strings.py +35 -0
- vardoger_vm-0.3.1/scripts/install_native_deps.sh +38 -0
- vardoger_vm-0.3.1/third_party/elf.h +269 -0
- vardoger_vm-0.3.1/third_party/jni.h +1141 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
BasedOnStyle: Google
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
strategy:
|
|
11
|
+
fail-fast: false
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ubuntu-latest, macos-latest]
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Install native dependencies (Linux)
|
|
19
|
+
if: runner.os == 'Linux'
|
|
20
|
+
run: sudo apt-get update && sudo apt-get install -y libunicorn-dev libcapstone-dev zlib1g-dev ninja-build
|
|
21
|
+
|
|
22
|
+
- name: Install native dependencies (macOS)
|
|
23
|
+
if: runner.os == 'macOS'
|
|
24
|
+
run: brew install unicorn capstone zlib ninja
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.11"
|
|
29
|
+
|
|
30
|
+
- name: Build the C library
|
|
31
|
+
run: |
|
|
32
|
+
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
|
|
33
|
+
cmake --build build
|
|
34
|
+
|
|
35
|
+
- name: Import smoke test
|
|
36
|
+
run: |
|
|
37
|
+
pip install .
|
|
38
|
+
python -c "import vardoger; print('vardoger OK:', vardoger.VM)"
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
# Tag a release (git tag v0.1.0 && git push --tags) to build wheels and publish them to PyPI.
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
tags: ["v*"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
wheels:
|
|
11
|
+
name: wheels ${{ matrix.archs }} on ${{ matrix.os }}
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
# Build every wheel on a runner NATIVE to its arch — no emulation, no
|
|
15
|
+
# cross-compile. before-all installs Unicorn/Capstone via each platform's
|
|
16
|
+
# package manager (brew / build-from-source), which only provides the
|
|
17
|
+
# runner's own arch, so cross-building can't link.
|
|
18
|
+
# macos_target must match the OS the runner's brew bottles are built for:
|
|
19
|
+
# delocate rejects bundling a lib whose min-target exceeds the wheel's tag,
|
|
20
|
+
# and brew's unicorn/capstone on macos-14 require 14.0 (macos-13 -> 13.0).
|
|
21
|
+
matrix:
|
|
22
|
+
include:
|
|
23
|
+
- { os: ubuntu-latest, archs: x86_64 } # manylinux x86_64
|
|
24
|
+
- { os: ubuntu-24.04-arm, archs: aarch64 } # manylinux aarch64 (native ARM runner)
|
|
25
|
+
- { os: macos-14, archs: arm64, macos_target: "14.0" } # Apple Silicon
|
|
26
|
+
# - { os: macos-13, archs: x86_64, macos_target: "13.0" } # Intel
|
|
27
|
+
runs-on: ${{ matrix.os }}
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
# cibuildwheel builds one wheel per Python version inside a manylinux (or macOS) environment.
|
|
32
|
+
# before-all there installs Unicorn/Capstone/zlib (see pyproject.toml), and auditwheel/delocate
|
|
33
|
+
# bundle them into the wheel so it needs nothing at install time.
|
|
34
|
+
- uses: pypa/cibuildwheel@v2.21
|
|
35
|
+
env:
|
|
36
|
+
CIBW_ARCHS: ${{ matrix.archs }}
|
|
37
|
+
# Ignored by the Linux builds; on macOS it sets the wheel's min-target
|
|
38
|
+
# to match the bundled brew libs so delocate accepts them.
|
|
39
|
+
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.macos_target }}
|
|
40
|
+
|
|
41
|
+
- uses: actions/upload-artifact@v4
|
|
42
|
+
with:
|
|
43
|
+
name: wheels-${{ matrix.os }}-${{ matrix.archs }}
|
|
44
|
+
path: wheelhouse/*.whl
|
|
45
|
+
|
|
46
|
+
sdist:
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v4
|
|
50
|
+
- uses: actions/setup-python@v5
|
|
51
|
+
with:
|
|
52
|
+
python-version: "3.11"
|
|
53
|
+
- run: pipx run build --sdist
|
|
54
|
+
- uses: actions/upload-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: sdist
|
|
57
|
+
path: dist/*.tar.gz
|
|
58
|
+
|
|
59
|
+
publish:
|
|
60
|
+
needs: [wheels, sdist]
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
environment: pypi
|
|
63
|
+
permissions:
|
|
64
|
+
id-token: write # PyPI Trusted Publishing (OIDC); no API token to store.
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/download-artifact@v4
|
|
67
|
+
with:
|
|
68
|
+
path: dist
|
|
69
|
+
merge-multiple: true
|
|
70
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Build output
|
|
2
|
+
build/
|
|
3
|
+
cmake-build-*/
|
|
4
|
+
dist/
|
|
5
|
+
wheelhouse/
|
|
6
|
+
_skbuild/
|
|
7
|
+
*.egg-info/
|
|
8
|
+
|
|
9
|
+
# Native artifacts
|
|
10
|
+
*.so
|
|
11
|
+
*.dylib
|
|
12
|
+
*.dll
|
|
13
|
+
*.o
|
|
14
|
+
*.a
|
|
15
|
+
|
|
16
|
+
# Python
|
|
17
|
+
__pycache__/
|
|
18
|
+
*.pyc
|
|
19
|
+
.venv/
|
|
20
|
+
.pytest_cache/
|
|
21
|
+
|
|
22
|
+
# Editor / OS
|
|
23
|
+
.idea/
|
|
24
|
+
.vscode/
|
|
25
|
+
.DS_Store
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.24)
|
|
2
|
+
project(vardoger LANGUAGES CXX VERSION 0.3.1)
|
|
3
|
+
|
|
4
|
+
set(CMAKE_CXX_STANDARD 20)
|
|
5
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
6
|
+
|
|
7
|
+
find_package(PkgConfig REQUIRED)
|
|
8
|
+
pkg_check_modules(UNICORN REQUIRED IMPORTED_TARGET unicorn)
|
|
9
|
+
pkg_check_modules(CAPSTONE REQUIRED IMPORTED_TARGET capstone)
|
|
10
|
+
pkg_check_modules(ZLIB REQUIRED IMPORTED_TARGET zlib)
|
|
11
|
+
|
|
12
|
+
# The engine, grouped by subsystem. See include/vardoger/ for the public headers.
|
|
13
|
+
add_library(vardoger_core
|
|
14
|
+
# engine: CPU, memory, scheduling
|
|
15
|
+
core/engine/engine.cpp
|
|
16
|
+
core/engine/disassembler.cpp
|
|
17
|
+
core/engine/tracer.cpp
|
|
18
|
+
core/engine/memory.cpp
|
|
19
|
+
core/engine/trampoline.cpp
|
|
20
|
+
core/engine/scheduler.cpp
|
|
21
|
+
core/engine/gdb_stub.cpp
|
|
22
|
+
# elf: the loader
|
|
23
|
+
core/elf/elf_loader.cpp
|
|
24
|
+
# android: the guest OS surface (libc stubs, syscalls, vfs, context)
|
|
25
|
+
core/android/stubs.cpp
|
|
26
|
+
core/android/android_env.cpp
|
|
27
|
+
core/android/system.cpp
|
|
28
|
+
core/android/vfs.cpp
|
|
29
|
+
core/android/syscalls.cpp
|
|
30
|
+
# jni: the Java bridge and runtime
|
|
31
|
+
core/jni/java_runtime.cpp
|
|
32
|
+
core/jni/jni.cpp
|
|
33
|
+
# dex: parser, mini-Dalvik, lifecycle
|
|
34
|
+
core/dex/dex_file.cpp
|
|
35
|
+
core/dex/dalvik.cpp
|
|
36
|
+
core/dex/lifecycle.cpp
|
|
37
|
+
# art: the class-resolution runtime and ART bring-up
|
|
38
|
+
core/art/art_runtime.cpp
|
|
39
|
+
core/art/art_bringup.cpp
|
|
40
|
+
# extract: payload capture and debug hooks
|
|
41
|
+
core/extract/extractor.cpp
|
|
42
|
+
core/extract/debug_hooks.cpp
|
|
43
|
+
)
|
|
44
|
+
target_include_directories(vardoger_core PUBLIC include third_party)
|
|
45
|
+
target_link_libraries(vardoger_core PUBLIC PkgConfig::UNICORN PkgConfig::CAPSTONE PkgConfig::ZLIB)
|
|
46
|
+
set_property(TARGET vardoger_core PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
47
|
+
|
|
48
|
+
# vardoger_capi: the flat C ABI that the Python package drives through ctypes. It is a shared
|
|
49
|
+
# library so ctypes can dlopen it, and it pulls in the whole engine.
|
|
50
|
+
add_library(vardoger_capi SHARED core/py/vardoger_capi.cpp)
|
|
51
|
+
target_link_libraries(vardoger_capi PRIVATE vardoger_core PkgConfig::UNICORN PkgConfig::CAPSTONE PkgConfig::ZLIB)
|
|
52
|
+
set_target_properties(vardoger_capi PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
53
|
+
|
|
54
|
+
# When scikit-build-core drives the build for a wheel, drop the shared library straight into the
|
|
55
|
+
# installed package so the ctypes loader finds it next to __init__.py.
|
|
56
|
+
if(DEFINED SKBUILD)
|
|
57
|
+
install(TARGETS vardoger_capi LIBRARY DESTINATION vardoger RUNTIME DESTINATION vardoger)
|
|
58
|
+
endif()
|