carcara-sec 0.1.0__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.
- carcara_sec-0.1.0/.github/workflows/publish.yml +46 -0
- carcara_sec-0.1.0/.github/workflows/quality.yml +25 -0
- carcara_sec-0.1.0/.gitignore +218 -0
- carcara_sec-0.1.0/.python-version +1 -0
- carcara_sec-0.1.0/LICENSE +21 -0
- carcara_sec-0.1.0/PKG-INFO +318 -0
- carcara_sec-0.1.0/README.md +305 -0
- carcara_sec-0.1.0/carcara/__init__.py +0 -0
- carcara_sec-0.1.0/carcara/cli/__init__.py +0 -0
- carcara_sec-0.1.0/carcara/cli/commands/device.py +71 -0
- carcara_sec-0.1.0/carcara/cli/commands/frida.py +123 -0
- carcara_sec-0.1.0/carcara/cli/commands/objection.py +53 -0
- carcara_sec-0.1.0/carcara/cli/commands/provision.py +90 -0
- carcara_sec-0.1.0/carcara/cli/commands/ssh.py +56 -0
- carcara_sec-0.1.0/carcara/cli/commands/tools.py +43 -0
- carcara_sec-0.1.0/carcara/cli/commands/transfer.py +61 -0
- carcara_sec-0.1.0/carcara/cli/main.py +47 -0
- carcara_sec-0.1.0/carcara/core/bootstrap.py +142 -0
- carcara_sec-0.1.0/carcara/core/loader.py +109 -0
- carcara_sec-0.1.0/carcara/core/runner.py +170 -0
- carcara_sec-0.1.0/carcara/core/state.py +94 -0
- carcara_sec-0.1.0/carcara/modules/__init__.py +0 -0
- carcara_sec-0.1.0/carcara/modules/device.py +327 -0
- carcara_sec-0.1.0/carcara/modules/frida.py +138 -0
- carcara_sec-0.1.0/carcara/modules/objection.py +109 -0
- carcara_sec-0.1.0/carcara/modules/provision.py +446 -0
- carcara_sec-0.1.0/carcara/modules/ssh.py +98 -0
- carcara_sec-0.1.0/carcara/modules/tools.py +242 -0
- carcara_sec-0.1.0/carcara/modules/transfer.py +105 -0
- carcara_sec-0.1.0/carcara/resources/__init__.py +0 -0
- carcara_sec-0.1.0/carcara/resources/commands.yaml +126 -0
- carcara_sec-0.1.0/carcara/resources/deps.yaml +45 -0
- carcara_sec-0.1.0/pyproject.toml +26 -0
- carcara_sec-0.1.0/tests/__init__.py +0 -0
- carcara_sec-0.1.0/tests/conftest.py +75 -0
- carcara_sec-0.1.0/tests/unit/__init__.py +0 -0
- carcara_sec-0.1.0/tests/unit/test_bootstrap.py +211 -0
- carcara_sec-0.1.0/tests/unit/test_device.py +413 -0
- carcara_sec-0.1.0/tests/unit/test_frida.py +271 -0
- carcara_sec-0.1.0/tests/unit/test_loader.py +116 -0
- carcara_sec-0.1.0/tests/unit/test_objection.py +214 -0
- carcara_sec-0.1.0/tests/unit/test_provision.py +707 -0
- carcara_sec-0.1.0/tests/unit/test_runner.py +275 -0
- carcara_sec-0.1.0/tests/unit/test_ssh.py +167 -0
- carcara_sec-0.1.0/tests/unit/test_state.py +89 -0
- carcara_sec-0.1.0/tests/unit/test_tools.py +374 -0
- carcara_sec-0.1.0/tests/unit/test_transfer.py +260 -0
- carcara_sec-0.1.0/uv.lock +321 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
name: Test
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- uses: astral-sh/setup-uv@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.13"
|
|
19
|
+
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: uv sync --all-groups
|
|
22
|
+
|
|
23
|
+
- name: Run tests
|
|
24
|
+
run: uv run pytest --cov=carcara --cov-report=term-missing
|
|
25
|
+
|
|
26
|
+
publish:
|
|
27
|
+
name: Publish to PyPI
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
needs: test
|
|
30
|
+
environment: pypi
|
|
31
|
+
permissions:
|
|
32
|
+
id-token: write
|
|
33
|
+
contents: read
|
|
34
|
+
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@v4
|
|
37
|
+
|
|
38
|
+
- uses: astral-sh/setup-uv@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.13"
|
|
41
|
+
|
|
42
|
+
- name: Build
|
|
43
|
+
run: uv build
|
|
44
|
+
|
|
45
|
+
- name: Publish to PyPI
|
|
46
|
+
run: uv publish
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Quality
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Test
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- uses: astral-sh/setup-uv@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.13"
|
|
20
|
+
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
run: uv sync --all-groups
|
|
23
|
+
|
|
24
|
+
- name: Run tests
|
|
25
|
+
run: uv run pytest --cov=carcara --cov-report=term-missing
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
# Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
# poetry.lock
|
|
109
|
+
# poetry.toml
|
|
110
|
+
|
|
111
|
+
# pdm
|
|
112
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
113
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
114
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
115
|
+
# pdm.lock
|
|
116
|
+
# pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# pixi
|
|
121
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
122
|
+
# pixi.lock
|
|
123
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
124
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
125
|
+
.pixi
|
|
126
|
+
|
|
127
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
128
|
+
__pypackages__/
|
|
129
|
+
|
|
130
|
+
# Celery stuff
|
|
131
|
+
celerybeat-schedule
|
|
132
|
+
celerybeat.pid
|
|
133
|
+
|
|
134
|
+
# Redis
|
|
135
|
+
*.rdb
|
|
136
|
+
*.aof
|
|
137
|
+
*.pid
|
|
138
|
+
|
|
139
|
+
# RabbitMQ
|
|
140
|
+
mnesia/
|
|
141
|
+
rabbitmq/
|
|
142
|
+
rabbitmq-data/
|
|
143
|
+
|
|
144
|
+
# ActiveMQ
|
|
145
|
+
activemq-data/
|
|
146
|
+
|
|
147
|
+
# SageMath parsed files
|
|
148
|
+
*.sage.py
|
|
149
|
+
|
|
150
|
+
# Environments
|
|
151
|
+
.env
|
|
152
|
+
.envrc
|
|
153
|
+
.venv
|
|
154
|
+
env/
|
|
155
|
+
venv/
|
|
156
|
+
ENV/
|
|
157
|
+
env.bak/
|
|
158
|
+
venv.bak/
|
|
159
|
+
|
|
160
|
+
# Spyder project settings
|
|
161
|
+
.spyderproject
|
|
162
|
+
.spyproject
|
|
163
|
+
|
|
164
|
+
# Rope project settings
|
|
165
|
+
.ropeproject
|
|
166
|
+
|
|
167
|
+
# mkdocs documentation
|
|
168
|
+
/site
|
|
169
|
+
|
|
170
|
+
# mypy
|
|
171
|
+
.mypy_cache/
|
|
172
|
+
.dmypy.json
|
|
173
|
+
dmypy.json
|
|
174
|
+
|
|
175
|
+
# Pyre type checker
|
|
176
|
+
.pyre/
|
|
177
|
+
|
|
178
|
+
# pytype static type analyzer
|
|
179
|
+
.pytype/
|
|
180
|
+
|
|
181
|
+
# Cython debug symbols
|
|
182
|
+
cython_debug/
|
|
183
|
+
|
|
184
|
+
# PyCharm
|
|
185
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
186
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
187
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
188
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
189
|
+
# .idea/
|
|
190
|
+
|
|
191
|
+
# Abstra
|
|
192
|
+
# Abstra is an AI-powered process automation framework.
|
|
193
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
194
|
+
# Learn more at https://abstra.io/docs
|
|
195
|
+
.abstra/
|
|
196
|
+
|
|
197
|
+
# Visual Studio Code
|
|
198
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
199
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
200
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
201
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
202
|
+
# .vscode/
|
|
203
|
+
# Temporary file for partial code execution
|
|
204
|
+
tempCodeRunnerFile.py
|
|
205
|
+
|
|
206
|
+
# Ruff stuff:
|
|
207
|
+
.ruff_cache/
|
|
208
|
+
|
|
209
|
+
# PyPI configuration file
|
|
210
|
+
.pypirc
|
|
211
|
+
|
|
212
|
+
# Marimo
|
|
213
|
+
marimo/_static/
|
|
214
|
+
marimo/_lsp/
|
|
215
|
+
__marimo__/
|
|
216
|
+
|
|
217
|
+
# Streamlit
|
|
218
|
+
.streamlit/secrets.toml
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ZeckWork
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: carcara-sec
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: iOS AppSec platform — unified CLI for mobile security tooling
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: appsec,frida,ios,mobile-security,pentest,red-team
|
|
8
|
+
Requires-Python: >=3.13
|
|
9
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
10
|
+
Requires-Dist: rich>=15.0.0
|
|
11
|
+
Requires-Dist: typer>=0.27.1
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
|
|
14
|
+
# Carcará
|
|
15
|
+
|
|
16
|
+
> iOS AppSec platform — unified CLI for mobile security tooling.
|
|
17
|
+
|
|
18
|
+
Carcará unifies Frida, Objection, SSH, file transfer, and provisioning profile management into a single CLI, purpose-built for iOS application security testing.
|
|
19
|
+
|
|
20
|
+
[](https://github.com/ZeckWork/carcara-sec/actions/workflows/quality.yml)
|
|
21
|
+
[](https://pypi.org/project/carcara-sec)
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pip install carcara-sec
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Requirements
|
|
28
|
+
|
|
29
|
+
- macOS (primary target)
|
|
30
|
+
- Python 3.13+
|
|
31
|
+
- [uv](https://github.com/astral-sh/uv) (recommended) or pip
|
|
32
|
+
- Xcode command line tools
|
|
33
|
+
- Node.js (for bagbak and applesign)
|
|
34
|
+
|
|
35
|
+
## Installation
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pip install carcara-sec
|
|
39
|
+
carcara tools install # installs frida-tools, objection, bagbak, applesign
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Quick start
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Register a device
|
|
46
|
+
carcara device add
|
|
47
|
+
|
|
48
|
+
# Connect
|
|
49
|
+
carcara device connect iphone6
|
|
50
|
+
|
|
51
|
+
# List processes
|
|
52
|
+
carcara frida ps
|
|
53
|
+
|
|
54
|
+
# Bypass SSL pinning
|
|
55
|
+
carcara frida codeshare sensepost/objection-ios-ssl-pinning com.target.app
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Device lab
|
|
59
|
+
|
|
60
|
+
Carcará uses device profiles stored in `~/.carcara/devices/`. The active device is set once and used automatically by every command.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
carcara device connect iphone6
|
|
64
|
+
carcara frida ps # runs on iphone6
|
|
65
|
+
carcara ssh run "ls /var/mobile" # runs on iphone6
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Command reference
|
|
71
|
+
|
|
72
|
+
All commands follow the same pattern:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
carcara <module> <action> [arguments]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## device
|
|
81
|
+
|
|
82
|
+
Manage registered devices. Profiles live in `~/.carcara/devices/`.
|
|
83
|
+
|
|
84
|
+
| Command | Description |
|
|
85
|
+
|---|---|
|
|
86
|
+
| `carcara device list` | List all registered devices with online/offline status |
|
|
87
|
+
| `carcara device connect <name>` | Connect to a device: starts iproxy, SSH tunnel, checks frida-server |
|
|
88
|
+
| `carcara device disconnect` | Tear down all tunnels cleanly |
|
|
89
|
+
| `carcara device status` | Show the currently active device and tunnel state |
|
|
90
|
+
| `carcara device info <name>` | Print full profile details for a device |
|
|
91
|
+
| `carcara device add` | Interactive prompt to register a new device |
|
|
92
|
+
| `carcara device remove <name>` | Remove a device profile |
|
|
93
|
+
|
|
94
|
+
**Examples**
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
carcara device list
|
|
98
|
+
# iphone6 192.168.1.100 iOS 12.5.8 palera1n ● online
|
|
99
|
+
# iphone13 192.168.1.101 iOS 16.5 dopamine ○ offline
|
|
100
|
+
|
|
101
|
+
carcara device connect iphone6
|
|
102
|
+
# ✓ SSH reachable
|
|
103
|
+
# ✓ frida-server running
|
|
104
|
+
# ✓ Active device set to: iphone6
|
|
105
|
+
|
|
106
|
+
carcara device status
|
|
107
|
+
# active device iphone6
|
|
108
|
+
# host 192.168.1.100
|
|
109
|
+
# status ● online
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## frida
|
|
115
|
+
|
|
116
|
+
Interact with the Frida instrumentation toolkit on the active device.
|
|
117
|
+
|
|
118
|
+
| Command | Description |
|
|
119
|
+
|---|---|
|
|
120
|
+
| `carcara frida ps` | List all running processes on the device |
|
|
121
|
+
| `carcara frida attach <app>` | Attach to a running process by name |
|
|
122
|
+
| `carcara frida attach-pid <pid>` | Attach to a running process by PID |
|
|
123
|
+
| `carcara frida run <script> <app>` | Attach to a process and inject a script from the local library |
|
|
124
|
+
| `carcara frida spawn <script> <app>` | Spawn an app from scratch and inject a script before execution |
|
|
125
|
+
| `carcara frida codeshare <path> <app>` | Run a script directly from Frida CodeShare |
|
|
126
|
+
| `carcara frida dump <bundle-id>` | Dump and decrypt an IPA from the device |
|
|
127
|
+
| `carcara frida trace <app> [args]` | Trace function calls on the active device |
|
|
128
|
+
| `carcara frida gadget` | Connect Frida REPL to an active Frida Gadget via USB |
|
|
129
|
+
|
|
130
|
+
**Examples**
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
carcara frida ps
|
|
134
|
+
|
|
135
|
+
carcara frida attach com.target.app
|
|
136
|
+
|
|
137
|
+
carcara frida run ssl-pinning/bypass-generic com.target.app
|
|
138
|
+
|
|
139
|
+
carcara frida spawn ssl-pinning/bypass-generic com.target.app
|
|
140
|
+
|
|
141
|
+
carcara frida codeshare sensepost/objection-ios-ssl-pinning com.target.app
|
|
142
|
+
|
|
143
|
+
carcara frida dump com.target.app
|
|
144
|
+
# Saves to ~/Downloads/carcara/com.target.app.ipa
|
|
145
|
+
|
|
146
|
+
carcara frida trace MyApp -m '*[NSString stringWithFormat:]*'
|
|
147
|
+
|
|
148
|
+
carcara frida gadget
|
|
149
|
+
# Connects to Frida Gadget — requires Xcode attach (see provision workflow)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## objection
|
|
155
|
+
|
|
156
|
+
Interact with the Objection runtime mobile exploration toolkit.
|
|
157
|
+
|
|
158
|
+
| Command | Description |
|
|
159
|
+
|---|---|
|
|
160
|
+
| `carcara objection explore` | Open the interactive Objection REPL on the active device |
|
|
161
|
+
| `carcara objection run <cmd>` | Run a single Objection command non-interactively |
|
|
162
|
+
| `carcara objection patchipa <path>` | Patch a local IPA to embed FridaGadget for non-jailbroken devices |
|
|
163
|
+
| `carcara objection gadget` | Start an Objection session connected to an active Frida Gadget |
|
|
164
|
+
|
|
165
|
+
**Examples**
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
carcara objection explore
|
|
169
|
+
|
|
170
|
+
carcara objection run "ios sslpinning disable"
|
|
171
|
+
|
|
172
|
+
carcara objection patchipa ./MyApp.ipa
|
|
173
|
+
# Uses the active provisioning profile — set with carcara provision use <uuid>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Common Objection commands**
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
ios sslpinning disable
|
|
180
|
+
ios jailbreak disable
|
|
181
|
+
ios keychain dump
|
|
182
|
+
ios nsuserdefaults get
|
|
183
|
+
ios cookies get
|
|
184
|
+
memory list exports <lib>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## provision
|
|
190
|
+
|
|
191
|
+
Manage Apple provisioning profiles for IPA patching and re-signing.
|
|
192
|
+
Profiles are stored in `~/.carcara/profiles/` — never in `~/Library/MobileDevice/` where Xcode may delete them.
|
|
193
|
+
|
|
194
|
+
| Command | Description |
|
|
195
|
+
|---|---|
|
|
196
|
+
| `carcara provision add <path>` | Add a `.mobileprovision` file and optionally set as active |
|
|
197
|
+
| `carcara provision list` | List all installed profiles with status |
|
|
198
|
+
| `carcara provision use <uuid>` | Set a profile as active by UUID |
|
|
199
|
+
| `carcara provision show` | Show details for the active profile, including resolved codesign identity |
|
|
200
|
+
| `carcara provision check` | Check if the active profile is valid and not near expiry |
|
|
201
|
+
| `carcara provision entitlements` | Export entitlements from the active profile to `entitlements.plist` |
|
|
202
|
+
| `carcara provision resign <path>` | Re-sign an IPA with the active profile (no Frida injection) |
|
|
203
|
+
|
|
204
|
+
**Examples**
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
carcara provision add ~/Downloads/work.zeck.app-sec.mobileprovision
|
|
208
|
+
# Imports profile, optionally imports existing system profiles
|
|
209
|
+
# Prompts to set as active
|
|
210
|
+
|
|
211
|
+
carcara provision list
|
|
212
|
+
# UUID Name Bundle ID Expiry Status
|
|
213
|
+
# TEST-UUID-0001 Carcará Dev work.zeck.app-sec 2026-01-01 ✓ valid
|
|
214
|
+
|
|
215
|
+
carcara provision use TEST-UUID-0001
|
|
216
|
+
|
|
217
|
+
carcara provision show
|
|
218
|
+
# name Carcará Dev
|
|
219
|
+
# bundle id work.zeck.app-sec
|
|
220
|
+
# team id TEAMID1234
|
|
221
|
+
# identity iPhone Developer: ...
|
|
222
|
+
# expiry 2026-01-01
|
|
223
|
+
|
|
224
|
+
carcara provision entitlements -o /tmp
|
|
225
|
+
# → /tmp/entitlements.plist
|
|
226
|
+
|
|
227
|
+
carcara provision resign ./MyApp.ipa
|
|
228
|
+
# → MyApp-resigned.ipa
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## transfer
|
|
234
|
+
|
|
235
|
+
Transfer files and directories between your machine and the device over SCP.
|
|
236
|
+
|
|
237
|
+
| Command | Description |
|
|
238
|
+
|---|---|
|
|
239
|
+
| `carcara transfer pull <remote>` | Pull a file from device to local (defaults to `~/Downloads/carcara/`) |
|
|
240
|
+
| `carcara transfer push <local> <remote>` | Push a local file to the device |
|
|
241
|
+
| `carcara transfer pull-dir <remote>` | Pull a directory recursively from device |
|
|
242
|
+
| `carcara transfer push-dir <local> <remote>` | Push a directory recursively to device |
|
|
243
|
+
|
|
244
|
+
**Examples**
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
carcara transfer pull /var/mobile/Documents/secrets.db
|
|
248
|
+
|
|
249
|
+
carcara transfer push ./patch.dylib /tmp/patch.dylib
|
|
250
|
+
|
|
251
|
+
carcara transfer pull-dir /var/mobile/Containers/Data/Application/UUID/Documents
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## ssh
|
|
257
|
+
|
|
258
|
+
Manage SSH connectivity and run remote commands on the device.
|
|
259
|
+
|
|
260
|
+
| Command | Description |
|
|
261
|
+
|---|---|
|
|
262
|
+
| `carcara ssh shell` | Open an interactive SSH shell on the active device |
|
|
263
|
+
| `carcara ssh run <cmd>` | Run a single command on the device and return output |
|
|
264
|
+
| `carcara ssh tunnel <local> <remote>` | Start iproxy USB tunnel manually |
|
|
265
|
+
| `carcara ssh copy-id` | Install your local SSH public key on the device |
|
|
266
|
+
|
|
267
|
+
**Examples**
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
carcara ssh shell
|
|
271
|
+
|
|
272
|
+
carcara ssh run "ls /var/mobile/Documents"
|
|
273
|
+
|
|
274
|
+
carcara ssh run "ps aux | grep SpringBoard"
|
|
275
|
+
|
|
276
|
+
carcara ssh copy-id
|
|
277
|
+
# Installs ~/.ssh/id_ed25519.pub — no more password prompts
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## tools
|
|
283
|
+
|
|
284
|
+
Manage the external tools that Carcará depends on.
|
|
285
|
+
|
|
286
|
+
| Command | Description |
|
|
287
|
+
|---|---|
|
|
288
|
+
| `carcara tools list` | Show all required tools with installed and required versions |
|
|
289
|
+
| `carcara tools check` | Validate installed versions against the manifest |
|
|
290
|
+
| `carcara tools install` | Install or upgrade all tools |
|
|
291
|
+
|
|
292
|
+
**Examples**
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
carcara tools list
|
|
296
|
+
carcara tools check
|
|
297
|
+
carcara tools install
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Quick reference
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
carcara device list | connect | disconnect | status | info | add | remove
|
|
306
|
+
carcara frida ps | attach | attach-pid | run | spawn | codeshare | dump | trace | gadget
|
|
307
|
+
carcara objection explore | run | patchipa | gadget
|
|
308
|
+
carcara provision add | list | use | show | check | entitlements | resign
|
|
309
|
+
carcara transfer pull | push | pull-dir | push-dir
|
|
310
|
+
carcara ssh shell | run | tunnel | copy-id
|
|
311
|
+
carcara tools list | check | install
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## License
|
|
317
|
+
|
|
318
|
+
MIT
|