Unified headless binary analysis CLI framework for IDA Pro + JEB.
IDA Pro + JEB ํตํฉ headless ๋ฐ์ด๋๋ฆฌ ๋ถ์ CLI ํ๋ ์์ํฌ.
Supports local and remote modes with a Gateway for distributed analysis environments.
๋ก์ปฌ/์๊ฒฉ ๋ชจ๋๋ฅผ ์ง์ํ๋ฉฐ, Gateway๋ฅผ ํตํ ๋ถ์ฐ ๋ถ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
| Document | Description / ์ค๋ช |
|---|---|
| README.md (this file) | Installation, configuration, architecture / ์ค์น, ์ค์ , ์ํคํ ์ฒ |
| docs/README-IDA.md | IDA Pro engine โ 62 commands, RPC methods, usage / IDA ๋ช ๋ น์ด ์์ธ |
| docs/README-JEB.md | JEB Pro engine โ 72 commands, RPC methods, usage / JEB ๋ช ๋ น์ด ์์ธ |
| docs/README-Config.md | Configuration reference โ all config.json keys / ์ค์ ๋ ํผ๋ฐ์ค |
| docs/README-Logging.md | Logging system โ JSONL format, directory structure / ๋ก๊น ์์คํ |
| docs/README-RPC.md | RPC protocol reference โ 59 IDA + 57 JEB methods, auth, errors / RPC ํ๋กํ ์ฝ ๋ ํผ๋ฐ์ค |
| docs/tutorials/ | 14 hands-on tutorials โ install, IDA, JEB, scripts, dev, gateway, AI / 14๊ฐ ์ค์ต ํํ ๋ฆฌ์ผ |
| docs/README-Setup.md | Installation & setup guide / ์ค์น ๋ฐ ํ๊ฒฝ ์ค์ ๊ฐ์ด๋ |
[Local Mode / ๋ก์ปฌ ๋ชจ๋]
revkit CLI โโโโ JSON-RPC โโโโ Engine Server (IDA/JEB)
[Remote Mode / ์๊ฒฉ ๋ชจ๋]
revkit CLI โโโโ HTTPS โโโโ Gateway Daemon โโโโ Engine Server (IDA/JEB)
cd revkit && pip install -e .
# With optional dependencies / ์ ํ์ ์์กด์ฑ ํฌํจ
pip install -e ".[full]" # psutil (process management / ํ๋ก์ธ์ค ๊ด๋ฆฌ)
pip install -e ".[dev]" # pytest (testing / ํ
์คํธ)# Start IDA analysis server / IDA ๋ถ์ ์๋ฒ ์์
revkit ida start sample.exe
# Start JEB analysis server / JEB ๋ถ์ ์๋ฒ ์์
revkit jeb start sample.apk
# Auto-detect engine (magic bytes + extension)
# ์์ง ์๋ ๊ฐ์ง (magic bytes + ํ์ฅ์)
revkit start sample.exe # โ IDA
revkit start sample.apk # โ JEB
# List instances / ์ธ์คํด์ค ๋ชฉ๋ก
revkit ida list
revkit jeb list
# Stop instance / ์ธ์คํด์ค ์ค์ง
revkit ida stop -i a3f2| Magic Bytes | Extension / ํ์ฅ์ | Engine |
|---|---|---|
MZ |
.exe, .dll |
IDA |
\x7fELF |
.so, .elf, .bin |
IDA |
\xFE\xED\xFA |
.dylib |
IDA |
PK\x03\x04 |
.apk |
JEB |
dex\n |
.dex |
JEB |
| - | .jar |
JEB |
- Python 3.12+
- IDA Pro 9.3+ (idalib) and/or JEB Pro โ at least one required / ์ต์ ํ๋ ํ์
psutilโ recommended; required on Windows for correct process detection (registry.pyusespsutil.pid_exists(); falls back toos.killon Unix if absent) / Windows์์ ํ๋ก์ธ์ค ๊ฐ์ง์ ํ์ (์์ผ๋ฉด Unix์์ os.kill fallback)
IDA Pro cannot be installed via pip and requires a separate license.
IDA Pro๋ pip๋ก ์ค์นํ ์ ์์ผ๋ฉฐ, ๋ณ๋ ๋ผ์ด์ ์ค๊ฐ ํ์ํ๋ค.
# 1. After installing IDA Pro, locate the idalib Python binding path
# IDA Pro ์ค์น ํ idalib Python binding ๊ฒฝ๋ก ํ์ธ
# e.g. /opt/ida/idalib/python, C:\IDA\idalib\python
# 2. Set the IDA install path in config.json
# config.json์ IDA ์ค์น ๊ฒฝ๋ก ์ง์
cat ~/.revkit/config.json
{
"ida": {
"install_dir": "/opt/ida"
}
}
# 3. Verify idalib is importable / import ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ
python -c "import ida_loader; print('OK')"
# 4. Verify via revkit / revkit์ผ๋ก ํ์ธ
revkit ida checkidalib is the headless API provided since IDA Pro 9.3+, including modules like
ida_loaderandida_hexrays. IDA engine commands only work on machines with IDA installed. In remote mode, requests are forwarded to an IDA-equipped server via the Gateway.idalib์ IDA Pro 9.3+์์ ์ ๊ณตํ๋ headless API์ด๋ฉฐ,
ida_loader,ida_hexrays๋ฑ์ ๋ชจ๋์ ํฌํจํ๋ค. IDA๊ฐ ์ค์น๋ ๋จธ์ ์์๋ง IDA ์์ง ๋ช ๋ น์ด๊ฐ ๋์ํ๋ฉฐ, ์๊ฒฉ ๋ชจ๋์์๋ Gateway๋ฅผ ํตํด IDA ์๋ฒ๋ก ์์ฒญ์ ์ ๋ฌํ๋ค.
For detailed IDA commands, see docs/README-IDA.md.
JEB Pro also requires a separate license. / JEB Pro๋ ๋ณ๋ ๋ผ์ด์ ์ค๊ฐ ํ์ํ๋ค.
# 1. Set JEB install path in config.json
# JEB Pro ์ค์น ๊ฒฝ๋ก๋ฅผ config.json์ ์ง์
cat ~/.revkit/config.json
{
"jeb": {
"install_dir": "/opt/jeb",
"spawn_method": "wrapper",
"java_home": "/usr/lib/jvm/java-17",
"heap": {
"auto": true,
"default": "4G",
"max": "16G"
}
}
}
# 2. Verify JEB CLI / JEB CLI ๋์ ํ์ธ
/opt/jeb/jeb_wincon.bat --version # Windows
/opt/jeb/jeb --version # Linux
/opt/jeb/jeb_macos.sh --version # macOS
# 3. Verify via revkit / revkit์ผ๋ก ํ์ธ
revkit jeb checkJEB server runs on Jython 2.7 runtime and requires Java 17+.
JEB ์๋ฒ๋ Jython 2.7 ๋ฐํ์ ์์์ ๋์ํ๋ฉฐ, Java 17+์ด ํ์ํ๋ค.
For detailed JEB commands, see docs/README-JEB.md.
| Option | Description / ์ค๋ช |
|---|---|
--config PATH |
Config file path (default: ~/.revkit/config.json) / ์ค์ ํ์ผ ๊ฒฝ๋ก |
--json |
JSON envelope output / JSON envelope ์ถ๋ ฅ |
--out FILE |
Save result to file / ๊ฒฐ๊ณผ๋ฅผ ํ์ผ๋ก ์ ์ฅ |
--remote URL |
Remote mode via Gateway / Gateway ๊ฒฝ์ ์๊ฒฉ ๋ชจ๋ |
-q / --quiet |
Suppress output / ์ถ๋ ฅ ์ต์ |
-v / --verbose |
Verbose logging / ์์ธ ๋ก๊น |
-i ID |
Specify instance ID / ์ธ์คํด์ค ID ์ง์ |
-b HINT |
Binary name hint / ๋ฐ์ด๋๋ฆฌ ์ด๋ฆ ํํธ |
Shared across all engines. / ์ ์ฒด ์์ง ๊ณตํต.
| Command | Description / ์ค๋ช |
|---|---|
start <binary> |
Start analysis server / ๋ถ์ ์๋ฒ ์์ |
list |
List active instances / ํ์ฑ ์ธ์คํด์ค ๋ชฉ๋ก |
stop |
Stop instance / ์ธ์คํด์ค ์ค์ง |
status |
Query instance status / ์ธ์คํด์ค ์ํ ์กฐํ |
wait |
Wait for instance ready / ์ธ์คํด์ค ready ๋๊ธฐ |
Analysis, modification, types, advanced, diff, report, batch, utility.
See docs/README-IDA.md for full command reference.
| Category | Example Commands |
|---|---|
| Analysis / ๋ถ์ | decompile, disasm, segments, func-info, find-func, bytes, find-pattern |
| Modification / ์์ | rename, set-type, comment, patch, auto-rename, rename-batch |
| Types / ํ์ | structs, enums, type-info, vtables, sigs |
| Advanced / ๊ณ ๊ธ | callgraph, cross-refs, search-code, strings-xrefs, basic-blocks, stack-frame |
| Diff / ๋น๊ต | diff, compare, code-diff |
| Report / ๋ณด๊ณ ์ | report, annotations, snapshot, bookmark, profile, export-script |
| Batch / ๋ฐฐ์น | batch (directory analysis) |
| Utility / ์ ํธ๋ฆฌํฐ | shell, update, completions |
Analysis, modification, recon, search, xrefs, security, tooling, report, batch, config, utility.
See docs/README-JEB.md for full command reference.
| Category | Example Commands |
|---|---|
| Analysis / ๋ถ์ | decompile, method, smali, classes, methods-of-class, fields-of-class, strings, native-methods |
| Modification / ์์ | rename, rename-class, rename-method, rename-field, rename-batch, auto-rename, set-comment, undo |
| Recon / ์ ์ฐฐ | summary, permissions, components, info, manifest, main-activity, resources |
| Search / ๊ฒ์ | search-classes, search-methods, search-code, strings-xrefs |
| Xrefs | xrefs, callers, callees, callgraph, cross-refs |
| Security / ๋ณด์ | entry-points, security-scan |
| Tooling / ๋๊ตฌ | merge (split APK โ {pkg}_merged.apk), gen-runner, patch, unpatch |
| Report / ๋ณด๊ณ ์ | report, annotations, snapshot |
| Batch / ๋ฐฐ์น | batch (directory analysis) |
| Config / ์ค์ | config-show, config-set |
| Utility / ์ ํธ๋ฆฌํฐ | exec, completion |
Default path / ๊ธฐ๋ณธ ๊ฒฝ๋ก: ~/.revkit/config.json
For detailed documentation of every key, see docs/README-Config.md.
๋ชจ๋ ํค์ ์์ธ ์ค๋ช ์ docs/README-Config.md ์ฐธ์กฐ.
Platform-specific paths / ํ๋ซํผ๋ณ ๊ฒฝ๋ก:
Key Windows Linux ida.install_dir"C:/Program Files/IDA Professional 9.3""/opt/ida"jeb.install_dir"C:/WorkSpace/bin/JEB-5.38""/opt/jeb"jeb.java_home"C:/Program Files/Java/jdk-21""/usr/lib/jvm/java-21"
{
"paths": {
"idb_dir": "~/.revkit/ida/idb",
"log_dir": "~/.revkit/logs",
"registry": "~/.revkit/ida/registry.json",
"project_dir": "~/.revkit/jeb/projects",
"output_dir": "~/.revkit/output"
},
"analysis": {
"max_instances": 3,
"wait_poll_interval": 1.0,
"wait_timeout": 120,
"stale_threshold": 86400,
"open_db_timeout": 300,
"heartbeat_interval": 30,
"auto_save": true
},
"security": {
"auth_token_file": "~/.revkit/auth_tokens.json",
"exec_enabled": false
},
"server": { "host": "127.0.0.1" },
"log": { "max_size_mb": 10, "backup_count": 3, "stderr_capture": true },
"output": { "default_count": 50, "max_count": 500, "encoding": "utf-8" },
"ida": {
"install_dir": "/opt/ida"
},
"jeb": {
"install_dir": "/opt/jeb",
"spawn_method": "wrapper",
"java_home": "/usr/lib/jvm/java-21",
"security": { "exec_enabled": false },
"heap": {
"auto": true, "default": "4G", "max": "16G",
"rules": [
{"max_mb": 50, "xmx": "2G"},
{"max_mb": 200, "xmx": "4G"},
{"max_mb": 500, "xmx": "8G"}
]
}
},
"gateway": {
"host": "0.0.0.0", "port": 8080,
"max_upload_size_mb": 500, "upload_dir": "~/.revkit/uploads",
"api_key": null, "allowed_ips": [], "trusted_proxies": [],
"request_timeout": 60, "batch_timeout": 300,
"log_rpc_params": false,
"audit_path": "~/.revkit/logs/gateway/audit.jsonl",
"audit_max_size_mb": 100
}
}| Section | Description / ์ค๋ช |
|---|---|
paths |
Data directories โ IDB, logs, registry, projects, output / ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ |
analysis |
Instance limits, timeouts, polling intervals / ๋ถ์ ์ธ์คํด์ค ์ ํยทํ์์์ |
security |
Auth token path, exec permission / ์ธ์ฆ ํ ํฐ, exec ๊ถํ |
server |
Headless server bind host / ์๋ฒ ๋ฐ์ธ๋ ํธ์คํธ |
log |
Log rotation settings / ๋ก๊ทธ ๋กํ ์ด์ |
output |
Default output limits, encoding / ์ถ๋ ฅ ์ ํยท์ธ์ฝ๋ฉ |
ida |
IDA Pro install path / IDA ์ค์น ๊ฒฝ๋ก |
jeb |
JEB install path, heap config, spawn method / JEB ์ค์นยทํยท์คํ ๋ฐฉ์ |
gateway |
Gateway daemon settings / ๊ฒ์ดํธ์จ์ด ์ค์ |
Config values support ~, $HOME, %USERPROFILE% expansion (cross-platform).
์ค์ ๊ฐ์ ~, $HOME, %USERPROFILE% ํ์ฅ์ ์ง์ํ๋ค (ํฌ๋ก์ค ํ๋ซํผ).
Place config.local.json in the project directory to override base config values.
ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ์ config.local.json์ ๋ฐฐ์นํ์ฌ ๊ธฐ๋ณธ ์ค์ ์ ์ค๋ฒ๋ผ์ด๋ํ ์ ์๋ค.
revkit supports both Windows and Linux. / revkit์ Windows์ Linux๋ฅผ ๋ชจ๋ ์ง์ํ๋ค.
| Feature / ๊ธฐ๋ฅ | Windows | Linux |
|---|---|---|
| Process spawn / ํ๋ก์ธ์ค ์์ฑ | CREATE_NO_WINDOW |
start_new_session |
| Process kill / ํ๋ก์ธ์ค ์ข ๋ฃ | taskkill /F /T (fallback) |
SIGKILL (fallback) |
| JEB launcher / JEB ๋ฐ์ฒ | jeb_wincon.bat |
jeb (shell script) |
| JEB spawn method / JEB ์คํ ๋ฐฉ์ | bat or wrapper |
wrapper only |
| Java binary / Java ๋ฐ์ด๋๋ฆฌ | java.exe |
java |
| Classpath separator / ํด๋์คํจ์ค ๊ตฌ๋ถ์ | ; |
: |
| RAM detection / RAM ๊ฐ์ง | psutil > PowerShell > 8GB fallback | cgroup > /proc/meminfo > psutil > 8GB fallback |
| Encoding / ์ธ์ฝ๋ฉ | UTF-8 forced (cp949 override) | UTF-8 native |
| Config paths / ์ค์ ๊ฒฝ๋ก | ~/.revkit/config.json (same) |
~/.revkit/config.json (same) |
| Migration backward compat / ๋ง์ด๊ทธ๋ ์ด์ ํธํ | Windows junction (mklink /J) |
Symlink (ln -s) |
Note:
psutilis recommended on both platforms but required on Windows for reliable process detection.
psutil์ ์์ชฝ ํ๋ซํผ ๋ชจ๋ ๊ถ์ฅํ์ง๋ง, Windows์์๋ ์์ ์ ์ธ ํ๋ก์ธ์ค ๊ฐ์ง๋ฅผ ์ํด ํ์.
# Remote analysis via Gateway / Gateway ๊ฒฝ์ ์๊ฒฉ ๋ถ์
revkit --remote http://analysis-server:8080 ida start sample.exe
# Remote instance list / ์๊ฒฉ ์ธ์คํด์ค ๋ชฉ๋ก
revkit --remote http://analysis-server:8080 list
# Remote RPC call (save locally with --out)
# ์๊ฒฉ RPC ํธ์ถ (--out์ผ๋ก ๋ก์ปฌ ์ ์ฅ)
revkit --remote http://srv:8080 ida decompile 0x401000 --out result.json1. CLI: Upload binary to Gateway โ get file_id
๋ฐ์ด๋๋ฆฌ๋ฅผ Gateway์ upload โ file_id ํ๋
2. CLI: POST /api/v1/engines/{engine}/start โ instance_id
3. CLI: Poll until instance ready / polling์ผ๋ก instance ready ๋๊ธฐ
4. CLI: Output instance_id โ RPC calls available
instance_id ์ถ๋ ฅ โ ์ดํ RPC ํธ์ถ ๊ฐ๋ฅ
| Function | Description / ์ค๋ช |
|---|---|
upload_binary() |
Upload binary to Gateway (multipart) / ๋ฐ์ด๋๋ฆฌ ์ ๋ก๋ |
remote_start() |
Upload + start engine + return instance_id / ์ ๋ก๋ + ์์ง ์์ |
remote_list() |
List remote instances / ์๊ฒฉ ์ธ์คํด์ค ๋ชฉ๋ก |
post_rpc_remote() |
Send RPC call via Gateway proxy / Gateway ํ๋ก์ RPC ํธ์ถ |
HTTP Gateway daemon with API key authentication, IP whitelist (CIDR), and audit logging.
HTTP Gateway daemon. API key ์ธ์ฆ, IP whitelist (CIDR), audit logging ์ง์.
# Start Gateway / Gateway ์์
python -m revkit.tools.gateway.daemon --config config.json| Method | Path | Description / ์ค๋ช |
|---|---|---|
GET |
/api/v1/health |
Health check (no auth / ์ธ์ฆ ๋ถํ์) |
GET |
/api/v1/instances |
List all instances / ์ ์ฒด ์ธ์คํด์ค ๋ชฉ๋ก |
POST |
/api/v1/instances/{id}/rpc |
JSON-RPC proxy / JSON-RPC ํ๋ก์ |
DELETE |
/api/v1/instances/{id} |
Delete instance / ์ธ์คํด์ค ์ญ์ |
POST |
/api/v1/engines/{engine}/start |
Start engine / ์์ง ์์ |
POST |
/api/v1/upload |
Upload binary (multipart) / ๋ฐ์ด๋๋ฆฌ ์ ๋ก๋ |
{
"gateway": {
"host": "0.0.0.0",
"port": 8080,
"api_key": "your-secret-key",
"allowed_ips": ["192.168.1.0/24"],
"trusted_proxies": ["10.0.0.1"],
"max_upload_size_mb": 500,
"request_timeout": 60,
"batch_timeout": 300,
"upload_dir": "~/.revkit/uploads",
"audit_path": "~/.revkit/gateway/audit.jsonl",
"audit_max_size_mb": 100,
"log_rpc_params": false
}
}| Key | Description / ์ค๋ช | Default |
|---|---|---|
host |
Bind address / ๋ฐ์ธ๋ ์ฃผ์ | 0.0.0.0 |
port |
Port number / ํฌํธ ๋ฒํธ | 8080 |
api_key |
API key (null = disabled) / API ํค | null |
allowed_ips |
IP whitelist (CIDR supported) / IP ํ์ดํธ๋ฆฌ์คํธ | [] (all) |
trusted_proxies |
Trusted proxy IPs for X-Forwarded-For / ์ ๋ขฐํ ํ๋ก์ | [] |
max_upload_size_mb |
Max upload size (MB) / ์ต๋ ์ ๋ก๋ ํฌ๊ธฐ | 500 |
request_timeout |
RPC timeout (seconds) / RPC ํ์์์ | 60 |
batch_timeout |
Batch RPC timeout / ๋ฐฐ์น ํ์์์ | 300 |
upload_dir |
Upload directory / ์ ๋ก๋ ๋๋ ํฐ๋ฆฌ | ~/.revkit/uploads |
log_rpc_params |
Log RPC params in audit / RPC ํ๋ผ๋ฏธํฐ ๋ก๊น | false |
1. Extract client IP (X-Forwarded-For if from trusted proxy)
ํด๋ผ์ด์ธํธ IP ์ถ์ถ (์ ๋ขฐํ ํ๋ก์์ ๊ฒฝ์ฐ X-Forwarded-For)
2. Check IP whitelist (CIDR matching) / IP ํ์ดํธ๋ฆฌ์คํธ ํ์ธ
3. Validate API key (timing-safe comparison) / API ํค ๊ฒ์ฆ (ํ์ด๋ฐ ๊ณต๊ฒฉ ๋ฐฉ์ง)
JSONL format, one event per line / JSONL ํ์, ํ ์ค์ ํ๋์ ์ด๋ฒคํธ:
{
"ts": "2026-03-20T10:30:45.123456+00:00",
"engine": "ida",
"cmd": "decompile",
"iid": "a3f2",
"ok": true,
"ms": 1234.56,
"source_ip": "192.168.1.100"
}Sensitive fields (code, script, exec_code) are automatically redacted.
๋ฏผ๊ฐ ํ๋(code, script, exec_code)๋ ์๋์ผ๋ก ๋ง์คํน๋๋ค.
| Feature | IDA | JEB |
|---|---|---|
| Binary formats / ๋ฐ์ด๋๋ฆฌ | PE, ELF, Mach-O | APK, DEX, JAR |
| DB extension / DB ํ์ฅ์ | .i64 |
.jdb2 (auto-saved to paths.project_dir, reused across sessions) |
| Identifier / ์๋ณ์ | Memory address (0x401000) |
DEX signature (Lcom/example/Foo;) |
| Instance ID / ์ธ์คํด์ค ID | 4-digit hex (a3f2) |
{name}_{4hex} (app-a3f2) |
| Server runtime / ์๋ฒ ๋ฐํ์ | CPython 3.12+ | Jython 2.7 |
| Commands / ๋ช ๋ น์ด | 62 | 72 |
| Detailed docs / ์์ธ ๋ฌธ์ | README-IDA.md | README-JEB.md |
JEB .jdb2 projects are saved to paths.project_dir (default: ~/.revkit/jeb/projects/) and automatically reused across sessions:
JEB .jdb2 ํ๋ก์ ํธ๋ paths.project_dir (๊ธฐ๋ณธ: ~/.revkit/jeb/projects/)์ ์ ์ฅ๋๋ฉฐ, ์ธ์
๊ฐ ์๋ ์ฌ์ฌ์ฉ๋๋ค:
- Save:
saveProject(key, path, null, null)โ saves to configured project directory, not JEB install dir. - Load: On
start, searches for existing.jdb2by binary name prefix and loads it vialoadProject(). - Fresh: Use
start --freshto skip.jdb2reuse and create a new project. - Cleanup:
cleanupdeletes orphaned.jdb2files not linked to any active instance.
Thread-safe JSON file with file locking. / ํ์ผ ๋ฝ์ ์ฌ์ฉํ ์ค๋ ๋ ์์ JSON ํ์ผ.
Path / ๊ฒฝ๋ก: ~/.revkit/{engine}/registry.json
{
"id": "a3f2",
"state": "ready",
"path": "/path/to/binary",
"binary": "sample.exe",
"pid": 12345,
"port": 18861,
"started": 1234567890.0,
"last_heartbeat": 1234567890.5
}States / ์ํ: initializing โ analyzing โ ready | error
Auto-cleanup: removes stale entries (dead process, no heartbeat > 120s). cleanup also deletes unused .jdb2 project files.
์๋ ์ ๋ฆฌ: ์ฃฝ์ ํ๋ก์ธ์ค, 120์ด ์ด์ heartbeat ์๋ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ค. cleanup์ ๋ฏธ์ฌ์ฉ .jdb2 ํ๋ก์ ํธ ํ์ผ๋ ์ญ์ ํ๋ค.
POST http://127.0.0.1:{port}/
Content-Type: application/json
{
"method": "decompile",
"params": {"addr": "0x401000"},
"id": 1
}
Features / ๊ธฐ๋ฅ:
- Automatic retry (default: 3 attempts) / ์๋ ์ฌ์๋ (๊ธฐ๋ณธ 3ํ)
- Batch timeout support / ๋ฐฐ์น ํ์์์ ์ง์
- Auth token support / ์ธ์ฆ ํ ํฐ ์ง์
- Verbose logging / ์์ธ ๋ก๊น
- Cross-platform detached process spawning / ํฌ๋ก์ค ํ๋ซํผ ๋ถ๋ฆฌ ํ๋ก์ธ์ค ์์ฑ
- Windows:
CREATE_NO_WINDOW | CREATE_NEW_PROCESS_GROUP - Unix:
start_new_session=True
- Windows:
- Force kill with
psutilfallback toos.kill/psutilfallback - Stderr redirected to log file / stderr๋ ๋ก๊ทธ ํ์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ
revkit-private/
โโโ .gitignore
โโโ README.md
โโโ requirements.txt
โโโ docs/
โ โโโ README-IDA.md # IDA engine detailed docs / IDA ์์ธ ๋ฌธ์
โ โโโ README-JEB.md # JEB engine detailed docs / JEB ์์ธ ๋ฌธ์
โ โโโ README-Config.md # Configuration reference / ์ค์ ๋ ํผ๋ฐ์ค
โ โโโ README-Logging.md # Logging system / ๋ก๊น
์์คํ
โ โโโ README-Setup.md # Installation guide / ์ค์น ๊ฐ์ด๋
โโโ Samples/ # Test binaries / ํ
์คํธ์ฉ ๋ฐ์ด๋๋ฆฌ
โ โโโ APK/ # APK (๊ธ์ต/๋ณธ์ธํ์ธ ์ฑ ์ํ, UnCrackable)
โ โโโ DEX/ # Memory-dumped DEX / ๋ฉ๋ชจ๋ฆฌ ๋คํ DEX
โ โโโ ELF/ # ELF (ARM64, ARMv7, Mips4, PowerPC, V850)
โ โโโ EXE/ # PE (notepad.exe)
โ โโโ IPA/ # IPA (๊ธ์ต/๋ณธ์ธํ์ธ ์ฑ ์ํ)
โโโ guide/ # Design docs & roadmap / ์ค๊ณ ๋ฌธ์ + ๋ก๋๋งต
โ โโโ integration_plan.md
โ โโโ roadmap.md
โ โโโ test_plan.md
โ โโโ CHANGELOG.md
โ โโโ Minutes/ # Review notes / ๋ฆฌ๋ทฐ ๊ธฐ๋ก
โ โโโ design/ # Phase 3 design (step01~step20)
โโโ revkit/
โโโ __init__.py
โโโ pyproject.toml
โโโ bin/ # Wrapper scripts / ๋ํผ ์คํฌ๋ฆฝํธ
โ โโโ revkit # Main CLI entrypoint / ๋ฉ์ธ CLI ์ํธ๋ฆฌํฌ์ธํธ
โ โโโ jeb-cli # Legacy JEB wrapper (deprecated)
โ โโโ ida-cli.py # Legacy IDA wrapper (deprecated)
โโโ tools/
โ โโโ cli/ # CLI
โ โ โโโ main.py # argparse + auto-detect engine
โ โ โโโ remote.py # Gateway remote mode client / ์๊ฒฉ ๋ชจ๋ ํด๋ผ์ด์ธํธ
โ โ โโโ commands/
โ โ โโโ common.py # Tier 1 handlers (start/list/stop/status/wait)
โ โโโ core/ # Shared infrastructure / ๊ณตํต ์ธํ๋ผ
โ โ โโโ config.py # Config load/save / ์ค์ ๋ก๋ยท์ ์ฅ
โ โ โโโ registry.py # Instance registry (JSON) / ์ธ์คํด์ค ๋ ์ง์คํธ๋ฆฌ
โ โ โโโ rpc.py # JSON-RPC client
โ โ โโโ audit.py # Audit logging (JSONL) / ๊ฐ์ฌ ๋ก๊น
โ โ โโโ logging_setup.py # JSONL logging system / ๋ก๊น
์์คํ
โ โ โโโ instance.py # Instance management / ์ธ์คํด์ค ๊ด๋ฆฌ
โ โ โโโ output.py # Output format (table/JSON) / ์ถ๋ ฅ ํฌ๋งท
โ โ โโโ process.py # Process management (psutil fallback) / ํ๋ก์ธ์ค ๊ด๋ฆฌ
โ โ โโโ utils.py # Utilities / ์ ํธ๋ฆฌํฐ
โ โโโ engines/
โ โ โโโ base.py # EngineBase ABC + CmdContext
โ โ โโโ ida/ # IDA Pro engine
โ โ โ โโโ engine.py # IDAEngine implementation / ๊ตฌํ
โ โ โ โโโ commands/ # CLI commands (9 modules / 9๋ชจ๋)
โ โ โ โโโ server/ # JSON-RPC server + handlers (9 modules / 9๋ชจ๋)
โ โ โโโ jeb/ # JEB Pro engine
โ โ โโโ engine.py # JEBEngine implementation / ๊ตฌํ
โ โ โโโ commands/ # CLI commands (13 modules / 13๋ชจ๋)
โ โ โโโ server/ # JSON-RPC server + handlers (11 modules / 11๋ชจ๋)
โ โโโ gateway/ # HTTP Gateway
โ โ โโโ daemon.py # ThreadingHTTPServer
โ โ โโโ auth.py # API key + IP whitelist + CIDR
โ โ โโโ router.py # URL routing + RPC proxy / ๋ผ์ฐํ
+ RPC ํ๋ก์
โ โ โโโ upload.py # Multipart binary upload / ๋ฐ์ด๋๋ฆฌ ์
๋ก๋
โ โ โโโ audit.py # Gateway audit logging / ๊ฐ์ฌ ๋ก๊น
โ โ โโโ config.py # Gateway config / ์ค์
โ โโโ libs/
โ โ โโโ APKEditor-1.4.7.jar # Split APK merge tool (REAndroid) / ๋ณํฉ ๋๊ตฌ
โ โโโ scripts/ # Migration / ๋ง์ด๊ทธ๋ ์ด์
โ โโโ migrate.py # ~/.ida-headless + ~/.jeb-headless โ ~/.revkit/
โ โโโ verify_migration.py # Migration verification / ๊ฒ์ฆ
โโโ tests/ # 218 tests
โโโ conftest.py
โโโ test_cli/ # CLI + remote (25)
โโโ test_core/ # Core modules (61)
โโโ test_engines/ # Engines (29)
โโโ test_gateway/ # Gateway (61)
โโโ test_integration/ # E2E + migration (22)
โโโ test_security/ # Path traversal (8)
cd revkit
pip install -e ".[dev]"
python -m pytest tests/ -v218 tests across 6 categories / 218๊ฐ ํ ์คํธ, 6๊ฐ ์นดํ ๊ณ ๋ฆฌ:
| Category / ์นดํ ๊ณ ๋ฆฌ | Count / ์ | Target / ๋์ |
|---|---|---|
| core | 61 | config, registry, rpc, audit, instance, output, process, utils |
| engines | 29 | base, ida_engine, jeb_engine |
| cli | 25 | main, remote |
| gateway | 61 | auth, daemon, router, upload, audit |
| integration | 22 | local E2E, remote E2E, migration |
| security | 8 | path traversal |
Migrate from legacy directories to unified revkit structure.
๊ธฐ์กด ~/.ida-headless/ + ~/.jeb-headless/ โ ~/.revkit/{ida,jeb}/ ๋ง์ด๊ทธ๋ ์ด์
:
# Dry-run / ์๋ฎฌ๋ ์ด์
python -m revkit.tools.scripts.migrate --dry-run
# Execute / ์คํ
python -m revkit.tools.scripts.migrate
# Verify / ๊ฒ์ฆ
python -m revkit.tools.scripts.migrate --verifyPrivate. / ๋น๊ณต๊ฐ.