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.
Files changed (72) hide show
  1. vardoger_vm-0.3.1/.clang-format +1 -0
  2. vardoger_vm-0.3.1/.github/workflows/ci.yml +38 -0
  3. vardoger_vm-0.3.1/.github/workflows/publish.yml +70 -0
  4. vardoger_vm-0.3.1/.gitignore +25 -0
  5. vardoger_vm-0.3.1/CMakeLists.txt +58 -0
  6. vardoger_vm-0.3.1/COPYING +674 -0
  7. vardoger_vm-0.3.1/COPYING.LESSER +165 -0
  8. vardoger_vm-0.3.1/PKG-INFO +113 -0
  9. vardoger_vm-0.3.1/README.md +198 -0
  10. vardoger_vm-0.3.1/core/android/android_env.cpp +1014 -0
  11. vardoger_vm-0.3.1/core/android/stubs.cpp +2413 -0
  12. vardoger_vm-0.3.1/core/android/syscalls.cpp +767 -0
  13. vardoger_vm-0.3.1/core/android/system.cpp +260 -0
  14. vardoger_vm-0.3.1/core/android/vfs.cpp +145 -0
  15. vardoger_vm-0.3.1/core/art/art_bringup.cpp +179 -0
  16. vardoger_vm-0.3.1/core/art/art_runtime.cpp +243 -0
  17. vardoger_vm-0.3.1/core/dex/dalvik.cpp +605 -0
  18. vardoger_vm-0.3.1/core/dex/dex_file.cpp +211 -0
  19. vardoger_vm-0.3.1/core/dex/lifecycle.cpp +563 -0
  20. vardoger_vm-0.3.1/core/elf/elf_loader.cpp +352 -0
  21. vardoger_vm-0.3.1/core/engine/disassembler.cpp +61 -0
  22. vardoger_vm-0.3.1/core/engine/engine.cpp +358 -0
  23. vardoger_vm-0.3.1/core/engine/gdb_stub.cpp +866 -0
  24. vardoger_vm-0.3.1/core/engine/memory.cpp +245 -0
  25. vardoger_vm-0.3.1/core/engine/scheduler.cpp +365 -0
  26. vardoger_vm-0.3.1/core/engine/tracer.cpp +29 -0
  27. vardoger_vm-0.3.1/core/engine/trampoline.cpp +70 -0
  28. vardoger_vm-0.3.1/core/extract/debug_hooks.cpp +524 -0
  29. vardoger_vm-0.3.1/core/extract/extractor.cpp +199 -0
  30. vardoger_vm-0.3.1/core/jni/java_runtime.cpp +329 -0
  31. vardoger_vm-0.3.1/core/jni/jni.cpp +934 -0
  32. vardoger_vm-0.3.1/core/py/vardoger_capi.cpp +660 -0
  33. vardoger_vm-0.3.1/include/vardoger/android/android_env.hpp +113 -0
  34. vardoger_vm-0.3.1/include/vardoger/android/stubs.hpp +161 -0
  35. vardoger_vm-0.3.1/include/vardoger/android/syscalls.hpp +54 -0
  36. vardoger_vm-0.3.1/include/vardoger/android/system.hpp +120 -0
  37. vardoger_vm-0.3.1/include/vardoger/android/vfs.hpp +95 -0
  38. vardoger_vm-0.3.1/include/vardoger/art/art_bringup.hpp +38 -0
  39. vardoger_vm-0.3.1/include/vardoger/art/art_runtime.hpp +90 -0
  40. vardoger_vm-0.3.1/include/vardoger/dex/dalvik.hpp +78 -0
  41. vardoger_vm-0.3.1/include/vardoger/dex/devirt_rebuild.hpp +1459 -0
  42. vardoger_vm-0.3.1/include/vardoger/dex/dex_file.hpp +90 -0
  43. vardoger_vm-0.3.1/include/vardoger/dex/lifecycle.hpp +109 -0
  44. vardoger_vm-0.3.1/include/vardoger/dex/rebuilder.hpp +250 -0
  45. vardoger_vm-0.3.1/include/vardoger/elf/elf.hpp +146 -0
  46. vardoger_vm-0.3.1/include/vardoger/elf/elf_loader.hpp +63 -0
  47. vardoger_vm-0.3.1/include/vardoger/engine/abi.hpp +38 -0
  48. vardoger_vm-0.3.1/include/vardoger/engine/address_space.hpp +45 -0
  49. vardoger_vm-0.3.1/include/vardoger/engine/args.hpp +42 -0
  50. vardoger_vm-0.3.1/include/vardoger/engine/disassembler.hpp +59 -0
  51. vardoger_vm-0.3.1/include/vardoger/engine/engine.hpp +125 -0
  52. vardoger_vm-0.3.1/include/vardoger/engine/gdb_stub.hpp +113 -0
  53. vardoger_vm-0.3.1/include/vardoger/engine/memory.hpp +98 -0
  54. vardoger_vm-0.3.1/include/vardoger/engine/scheduler.hpp +112 -0
  55. vardoger_vm-0.3.1/include/vardoger/engine/tracer.hpp +32 -0
  56. vardoger_vm-0.3.1/include/vardoger/engine/trampoline.hpp +59 -0
  57. vardoger_vm-0.3.1/include/vardoger/extract/debug_hooks.hpp +40 -0
  58. vardoger_vm-0.3.1/include/vardoger/extract/extractor.hpp +72 -0
  59. vardoger_vm-0.3.1/include/vardoger/jni/java_runtime.hpp +210 -0
  60. vardoger_vm-0.3.1/include/vardoger/jni/jni.hpp +62 -0
  61. vardoger_vm-0.3.1/include/vardoger/jni/jni_slots.inc +245 -0
  62. vardoger_vm-0.3.1/include/vardoger/util/rc4.hpp +75 -0
  63. vardoger_vm-0.3.1/pyproject.toml +56 -0
  64. vardoger_vm-0.3.1/python/vardoger/README.md +97 -0
  65. vardoger_vm-0.3.1/python/vardoger/__init__.py +587 -0
  66. vardoger_vm-0.3.1/python/vardoger/_native.py +218 -0
  67. vardoger_vm-0.3.1/python/vardoger/examples/art_bringup_probe.py +46 -0
  68. vardoger_vm-0.3.1/python/vardoger/examples/drive_jni.py +37 -0
  69. vardoger_vm-0.3.1/python/vardoger/examples/search_strings.py +35 -0
  70. vardoger_vm-0.3.1/scripts/install_native_deps.sh +38 -0
  71. vardoger_vm-0.3.1/third_party/elf.h +269 -0
  72. 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()