mirror of
https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
synced 2026-10-12 02:06:59 +00:00
Enables dynamic analysis on real jailbroken iOS devices connected via USB or WiFi SSH, complementing the existing Corellium-based iOS analysis.
- SSH connectivity — connects to jailbroken devices over USB (via iproxy port forwarding) or WiFi using Paramiko SSH
- Frida instrumentation — spawns/attaches Frida on-device, with full hook support matching the existing Corellium flow
- Environment setup — installs AppSync Unified and Frida server on first run; supports both arm and arm64 devices
- Dynamic analysis — app file extraction, system log streaming (oslog), screenshot capture, process listing, and report generation
- SSH terminal — execute shell commands on the device over SSH
---------
Co-authored-by: CylentSec <[email protected]>
Co-authored-by: Oz <[email protected]>
6163 lines
262 KiB
HTML
6163 lines
262 KiB
HTML
{% extends "base/base_layout.html" %}
|
|
{% block sidebar_option %}
|
|
sidebar-collapse
|
|
{% endblock %}
|
|
{% block content %}
|
|
<style>
|
|
pre {
|
|
white-space: pre-wrap; /* css-3 */
|
|
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
|
white-space: -pre-wrap; /* Opera 4-6 */
|
|
white-space: -o-pre-wrap; /* Opera 7 */
|
|
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
|
}
|
|
</style>
|
|
<div class="content-wrapper">
|
|
<div class="content-header"></div>
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<h1><strong>API Docs</strong></h1>
|
|
<p class="lead">
|
|
API Key: <strong><code>{{ api_key}}</code></strong>
|
|
</p>
|
|
|
|
<!--API Docs -->
|
|
<h1>Static Analysis</h1>
|
|
<ol>
|
|
<li><code>api/v1/upload</code> - <a href="#upload-file-api">Upload a File</a></li>
|
|
<li><code>api/v1/scan</code> - <a href="#scan-file-api">Scan a File</a></li>
|
|
<li><code>api/v1/scan_logs</code> - <a href="#scan-logs-api">Display Live Scan Logs</a></li>
|
|
<li><code>api/v1/search</code> - <a href="#search-api">Search a Scan</a></li>
|
|
<li><code>api/v1/scans</code> - <a href="#recent-scans-api">Display Recent Scans</a></li>
|
|
<li><code>api/v1/tasks</code> - <a href="#tasks-api">Display Scan Tasks</a></li>
|
|
<li><code>api/v1/delete_scan</code> - <a href="#delete-scan-api">Delete a Scan</a></li>
|
|
<li><code>api/v1/scorecard</code> - <a href="#scorecard-api">App Scorecard</a></li>
|
|
<li><code>api/v1/download_pdf</code> - <a href="#generate-pdf-report-api">Download PDF Report</a></li>
|
|
<li><code>api/v1/report_json</code> - <a href="#generate-json-report-api">Generate JSON Report</a></li>
|
|
<li><code>api/v1/view_source</code> - <a href="#view-source-api">View Source Files</a></li>
|
|
<li><code>api/v1/compare</code> - <a href="#compare-api">Compare Apps</a></li>
|
|
<li><code>api/v1/suppress_by_rule</code> - <a href="#suppress-by-rule-api">Suppress by Rule</a></li>
|
|
<li><code>api/v1/suppress_by_files</code> - <a href="#suppress-by-files-api">Suppress by Files</a></li>
|
|
<li><code>api/v1/list_suppressions</code> - <a href="#list-suppressions-api">List Suppressions</a></li>
|
|
<li><code>api/v1/delete_suppression</code> - <a href="#delete-suppression-api">Delete Suppressions</a></li>
|
|
</ol>
|
|
|
|
<h1>Dynamic Analysis Android</h1>
|
|
<ol>
|
|
|
|
<li><code>api/v1/dynamic/get_apps</code> - <a href="#get-apps-api">Get Apps for Dynamic Analysis</a></li>
|
|
<li><code>api/v1/dynamic/start_analysis</code> - <a href="#start-analysis-api">Start Dynamic Analysis</a></li>
|
|
<li><code>api/v1/android/logcat</code> - <a href="#logcat-api">View Logcat</a></li>
|
|
<li><code>api/v1/android/mobsfy</code> - <a href="#mobsfy-api">MobSFy VM/Emulator/Device</a></li>
|
|
<li><code>api/v1/android/adb_command</code> - <a href="#adb-command-api">Execute ADB Commands</a></li>
|
|
<li><code>api/v1/android/root_ca</code> - <a href="#root-ca-api">Install or Remove MobSF Root CA</a></li>
|
|
<li><code>api/v1/android/global_proxy</code> - <a href="#global-proxy-api">Set or Unset MobSF HTTP(S) Proxy</a></li>
|
|
<li><code>api/v1/android/activity</code> - <a href="#activity-api">Activity or Exported Activity Tester</a></li>
|
|
<li><code>api/v1/android/start_activity</code> - <a href="#start-activity-api">Start an Activity or Exported Activity</a></li>
|
|
<li><code>api/v1/android/tls_tests</code> - <a href="#tls-tester-api">TLS/SSL Security Tester</a></li>
|
|
<li><code>api/v1/frida/instrument</code> - <a href="#frida-instrument-api">Frida Instrument App</a></li>
|
|
<li><code>api/v1/frida/api_monitor</code> - <a href="#frida-api-monitor-api">Frida API Monitor</a></li>
|
|
<li><code>api/v1/frida/get_dependencies</code> - <a href="#frida-get-dependencies-api">Frida Get Dependencies</a></li>
|
|
<li><code>api/v1/frida/logs</code> - <a href="#frida-logs-api">Frida View Logs</a></li>
|
|
<li><code>api/v1/frida/list_scripts</code> - <a href="#frida-list-scripts-api">Frida List Scripts</a></li>
|
|
<li><code>api/v1/frida/get_script</code> - <a href="#frida-get-script-api">Frida Get Script</a></li>
|
|
<li><code>api/v1/dynamic/stop_analysis</code> - <a href="#stop-analysis-api">Stop Dynamic Analysis</a></li>
|
|
<li><code>api/v1/dynamic/report_json</code> - <a href="#dynamic-report-json-api">Dynamic Analysis JSON report</a></li>
|
|
<li><code>api/v1/dynamic/view_source</code> - <a href="#dynamic-view-source-api">Dynamic Analysis View Source</a></li>
|
|
</ol>
|
|
|
|
<h1>Dynamic Analysis iOS (Corellium)</h1>
|
|
<ol>
|
|
<li><code>api/v1/ios/corellium_supported_models</code> - <a href="#supported-models-api">Supported Corellium iOS Models</a></li>
|
|
<li><code>api/v1/ios/corellium_ios_versions</code> - <a href="#supported-ios-versions-api">Supported Corellium iOS Versions</a></li>
|
|
<li><code>api/v1/ios/corellium_create_ios_instance</code> - <a href="#create-ios-instance-api">Create an iOS VM in Corellium</a></li>
|
|
<li><code>api/v1/ios/dynamic_analysis</code> - <a href="#ios-dynamic-analysis-api">iOS Dynamic Analysis</a></li>
|
|
<li><code>api/v1/ios/corellium_start_instance</code> - <a href="#start-ios-instance-api">Start iOS VM in Corellium</a></li>
|
|
<li><code>api/v1/ios/corellium_stop_instance</code> - <a href="#stop-ios-instance-api">Stop iOS VM in Corellium</a></li>
|
|
<li><code>api/v1/ios/corellium_unpause_instance</code> - <a href="#unpause-ios-instance-api">Unpause iOS VM in Corellium</a></li>
|
|
<li><code>api/v1/ios/corellium_reboot_instance</code> - <a href="#reboot-ios-instance-api">Reboot iOS VM in Corellium</a></li>
|
|
<li><code>api/v1/ios/corellium_destroy_instance</code> - <a href="#destroy-ios-instance-api">Destroy iOS VM in Corellium</a></li>
|
|
<li><code>api/v1/ios/corellium_list_apps</code> - <a href="#corellium-list-apps-api">List Apps in Corellium iOS VM</a></li>
|
|
<li><code>api/v1/ios/setup_environment</code> - <a href="#ios-setup-environment-api">Setup iOS Dynamic Analysis Environment</a></li>
|
|
<li><code>api/v1/ios/dynamic_analyzer</code> - <a href="#ios-dynamic-analyzer-api">iOS Dynamic Analyzer</a></li>
|
|
<li><code>api/v1/ios/run_app</code> - <a href="#ios-run-app-api">Run App</a></li>
|
|
<li><code>api/v1/ios/stop_app</code> - <a href="#ios-stop-app-api">Stop App</a></li>
|
|
<li><code>api/v1/ios/remove_app</code> - <a href="#ios-remove-app-api">Remove App</a></li>
|
|
<li><code>api/v1/ios/take_screenshot</code> - <a href="#ios-takescreenshot-api">Take Screenshot</a></li>
|
|
<li><code>api/v1/ios/get_app_container_path</code> - <a href="#ios-get-app-container-path-api">Get App Container Path</a></li>
|
|
<li><code>api/v1/ios/network_capture</code> - <a href="#ios-network-capture-api">Network Capture</a></li>
|
|
<li><code>api/v1/ios/live_pcap_download</code> - <a href="#ios-live-pcap-download-api">Live PCAP Download</a></li>
|
|
<li><code>api/v1/ios/ssh_execute</code> - <a href="#ios-ssh-execute-api">SSH Execute</a></li>
|
|
<li><code>api/v1/ios/download_app_data</code> - <a href="#download-app-data-api">Download App Data</a></li>
|
|
<li><code>api/v1/ios/instance_input</code> - <a href="#instance-input-api">Instance Input</a></li>
|
|
<li><code>api/v1/ios/system_logs</code> - <a href="#system-logs-api">System Logs</a></li>
|
|
<li><code>api/v1/ios/file_upload</code> - <a href="#file-upload-api">File Upload</a></li>
|
|
<li><code>api/v1/ios/file_download</code> - <a href="#file-download-api">File Download</a></li>
|
|
<li><code>api/v1/frida/ios_instrument</code> - <a href="#ios-instrument-api">Frida Instrument App</a></li>
|
|
<li><code>api/v1/dynamic/ios_report_json</code> - <a href="#ios-report-json-api">iOS Dynamic Analysis Report</a></li>
|
|
</ol>
|
|
|
|
<h1>Dynamic Analysis iOS (Jailbroken Device)</h1>
|
|
<ol>
|
|
<li><code>api/v1/ios/device_dynamic_analysis</code> - <a href="#device-dynamic-analysis-api">iOS Device Dynamic Analysis</a></li>
|
|
<li><code>api/v1/ios/device_get</code> - <a href="#device-get-api">Get iOS Device Details</a></li>
|
|
<li><code>api/v1/ios/device_install_ipa</code> - <a href="#device-install-ipa-api">Install IPA on Device</a></li>
|
|
<li><code>api/v1/ios/device_dynamic_analyzer</code> - <a href="#device-dynamic-analyzer-api">iOS Device Dynamic Analyzer</a></li>
|
|
<li><code>api/v1/ios/device_file_upload</code> - <a href="#device-file-upload-api">Upload File to Device</a></li>
|
|
<li><code>api/v1/ios/device_ssh_execute</code> - <a href="#device-ssh-execute-api">SSH Execute on Device</a></li>
|
|
<li><code>api/v1/ios/device_instrument</code> - <a href="#device-instrument-api">Frida Instrument on Device</a></li>
|
|
<li><code>api/v1/ios/device_system_logs</code> - <a href="#device-system-logs-api">Device System Logs</a></li>
|
|
<li><code>api/v1/ios/device_ps</code> - <a href="#device-ps-api">Device Running Processes</a></li>
|
|
<li><code>api/v1/ios/device_file_download</code> - <a href="#device-file-download-api">Download File from Device</a></li>
|
|
<li><code>api/v1/ios/device_api_monitor</code> - <a href="#device-api-monitor-api">iOS Device API Monitor</a></li>
|
|
<li><code>api/v1/ios/device_download_app_data</code> - <a href="#device-download-app-data-api">Download App Data from Device</a></li>
|
|
<li><code>api/v1/ios/device_report_json</code> - <a href="#device-report-json-api">iOS Device Dynamic Analysis Report</a></li>
|
|
</ol>
|
|
<hr>
|
|
<h2><a id="upload-file-api"></a><strong>Upload File API</strong></h2>
|
|
<p>API to upload a file. Supported file types are apk, zip, ipa and appx.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/upload</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>file</td>
|
|
<td>multipart/form-data</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"file_name": "diva-beta.apk", "hash": "82ab8b2193b3cfb1c737e3a786be363a", "scan_type": "apk"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -F 'file=@/Users/ajin/Desktop/diva-beta.apk' http://localhost:8000/api/v1/upload -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -F 'file=@/Users/ajin/Desktop/diva-beta.apk' http://localhost:8000/api/v1/upload -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<hr />
|
|
<h2><a id="scan-file-api"></a><strong>Scan File API</strong></h2>
|
|
<p>API to scan a file that is already uploaded. Supports scanning apk, xapk, apks, jar, aar, zip, ipa, so, dylib, a, and appx extensions.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/scan</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>re_scan</td>
|
|
<td>0 or 1, default is 0</td>
|
|
<td>No</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong>
|
|
</li>
|
|
</ul>
|
|
<pre><code>{"act_count": "17", "api": {"Loading Native Code (Shared Library) ": {"path":
|
|
["jakhar/aseem/diva/DivaJni.java"]}, "Local File I/O Operations": {"path":
|
|
["jakhar/aseem/diva/InsecureDataStorage2Activity.java", "jakhar/aseem/diva/SQLInjectionActivity.java"]},
|
|
"Starting Activity": {"path": ["jakhar/aseem/diva/AccessControl1Activity.java",
|
|
"jakhar/aseem/diva/AccessControl2Activity.java", "jakhar/aseem/diva/AccessControl3Activity.java",
|
|
"jakhar/aseem/diva/MainActivity.java"]}, "Query Database of SMS, Contacts etc.": {"path":
|
|
["jakhar/aseem/diva/AccessControl3NotesActivity.java", "jakhar/aseem/diva/NotesProvider.java"]}
|
|
SNIPPED
|
|
</code></pre>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/scan --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/scan --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<hr />
|
|
<h2><a id="scan-logs-api"></a><strong>Scan Logs API</strong></h2>
|
|
<p>API that provides live and latest scan logs.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/scan_logs</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong>
|
|
</li>
|
|
</ul>
|
|
<pre><code>{ "logs": [ { "timestamp": "2024-08-04 00:23:35", "status": "Generating Hashes",
|
|
"exception": null }, { "timestamp": "2024-08-04 00:23:35", "status": "
|
|
Extracting APK", "exception": null }, { "timestamp": "2024-08-04 00:23:35",
|
|
"status": "Unzipping", "exception": null },
|
|
SNIPPED
|
|
</code></pre>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/scan_logs --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/scan_logs --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<hr />
|
|
<h2><a id="search-api"></a><strong>Search API</strong></h2>
|
|
<p>API for querying scan results. You can search using an MD5 checksum, app name, package name, or file name. The API returns the closest match based on your search term.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/search</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>query</td>
|
|
<td>hash of the scan or text</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>404 Not Found</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": <You can search by MD5, app name, package name, or file name.> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/search --data "query=com.foo.bar" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/search --data "query=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<hr />
|
|
|
|
<h2><a id="delete-scan-api"></a><strong>Delete Scan API</strong></h2>
|
|
<p>API to delete scan results.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/delete_scan</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"deleted": "yes"}</code> or <code>{"deleted": "scan hash not found"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/delete_scan --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/delete_scan --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="scorecard-api"></a><strong>App Scorecrd API</strong></h2>
|
|
<p>Get MobSF Application Security Scorecard</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/scorecard</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/scorecard --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/scorecard --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="generate-pdf-report-api"></a><strong>Generate PDF Report API</strong></h2>
|
|
<p>API to generate PDF Report.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/download_pdf</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/pdf</code> <br />
|
|
<strong>Content:</strong> <code>PDF Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/download_pdf --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/download_pdf --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="generate-json-report-api"></a><strong>Generate JSON Report API</strong></h2>
|
|
<p>API to generate JSON Report.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/report_json</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/report_json --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/report_json --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="view-source-api"></a><strong>View Source Files API</strong></h2>
|
|
<p>API to view source files.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/view_source</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>file</td>
|
|
<td>relative file path</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>type</td>
|
|
<td>apk/ipa/studio/eclipse/ios</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/view_source --data "hash=18e244926da1e49c5b8ffc1c30de8abc&type=apk&file=b/a/a/a/a/a.java" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/view_source --data "hash=6c23c2970551be15f32bbab0b5db0c71&type=ipa&file=classdump.txt" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/view_source --data "hash=18e244926da1e49c5b8ffc1c30de8abc&type=apk&file=b/a/a/a/a/a.java" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/view_source --data "hash=6c23c2970551be15f32bbab0b5db0c71&type=ipa&file=classdump.txt" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="recent-scans-api"></a><strong>Display Recent Scans API</strong></h2>
|
|
<p>API to Display Recent Scans.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/scans</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>GET</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>page</td>
|
|
<td>the number of page</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>page_size</td>
|
|
<td>per page size</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong>
|
|
<code>
|
|
{"content": [{"id": 7, "ANALYZER": "static_analyzer_ios", "SCAN_TYPE": "ipa", "FILE_NAME": "ios.ipa", "APP_NAME": "helloworld", "PACKAGE_NAME": "com.kthcorp.helloworld", "VERSION_NAME": "1.0", "MD5": "6c23c2970551be15f32bbab0b5db0c71", "TIMESTAMP": "2020-11-15T03:17:11.733Z"}, {"id": 6, "ANALYZER": "static_analyzer", "SCAN_TYPE": "apk", "FILE_NAME": "android.apk", "APP_NAME": "HelloWorld", "PACKAGE_NAME": "opensecurity.helloworld", "VERSION_NAME": "1.0", "MD5": "3a552566097a8de588b8184b059b0158", "TIMESTAMP": "2020-11-15T03:16:34.171Z"}, {"id": 3, "ANALYZER": "static_analyzer", "SCAN_TYPE": "zip", "FILE_NAME": "ios_src.zip", "APP_NAME": "DamnVulnerableIOSApp", "PACKAGE_NAME": "com.highaltitudehacks.dvia.watchkitapp", "VERSION_NAME": "2.0", "MD5": "57bb5be0ea44a755ada4a93885c3825e", "TIMESTAMP": "2020-11-15T03:08:49.089Z"}], "count": 3, "num_pages": 1}
|
|
</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl --url "http://localhost:8000/api/v1/scans" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
<li>
|
|
<pre><code>curl --url "http://localhost:8000/api/v1/scans?page=1&page_size=10" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl --url "http://localhost:8000/api/v1/scans" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
<li>
|
|
<pre><code>curl --url "http://localhost:8000/api/v1/scans?page=1&page_size=10" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="tasks-api"></a><strong>Scan Tasks API</strong></h2>
|
|
<p>Displays the scan tasks queue, accessible only when the asynchronous scan queue is enabled.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/tasks</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code><br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/tasks -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/tasks -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<hr />
|
|
|
|
<h2><a id="compare-api"></a><strong>Compare Apps API</strong></h2>
|
|
<p>API to Compare scan results.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/compare</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash1</td>
|
|
<td>first scan hash</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>hash2</td>
|
|
<td>second scan hash to compare with</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/compare --data "hash1=82ab8b2193b3cfb1c737e3a786be363a&hash2=f56c96f2b1f0a7c46eb6fef3a035f3dd" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/compare --data "hash1=82ab8b2193b3cfb1c737e3a786be363a&hash2=f56c96f2b1f0a7c46eb6fef3a035f3dd" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="suppress-by-rule-api"></a><strong>Suppress by Rule</strong></h2>
|
|
<p>Suppress findings by rule id.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/suppress_by_rule</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>type</td>
|
|
<td>code or manifest</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>rule</td>
|
|
<td>rule id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/suppress_by_rule --data "hash=82ab8b2193b3cfb1c737e3a786be363a&type=manifest&rule=app_allowbackup" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/suppress_by_rule --data "hash=82ab8b2193b3cfb1c737e3a786be363a&type=code&rule=android_logging" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="suppress-by-files-api"></a><strong>Suppress by Files</strong></h2>
|
|
<p>Suppress findings by files.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/suppress_by_files</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>type</td>
|
|
<td>code</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>rule</td>
|
|
<td>rule id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/suppress_by_files --data "hash=82ab8b2193b3cfb1c737e3a786be363a&type=code&rule=app_allowbackup" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/suppress_by_files --data "hash=82ab8b2193b3cfb1c737e3a786be363a&type=code&rule=android_logging" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="list-suppressions-api"></a><strong>View Suppressions</strong></h2>
|
|
<p>View suppressions associated with a scan.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/list_suppressions</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/list_suppressions --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/list_suppressions --data "hash=82ab8b2193b3cfb1c737e3a786be363a" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="delete-suppression-api"></a><strong>Delete Suppressions</strong></h2>
|
|
<p>Delete suppressions.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/delete_suppression</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>type</td>
|
|
<td>code or manifest</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>rule</td>
|
|
<td>rule id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>kind</td>
|
|
<td>rule or file</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/delete_suppression --data "hash=82ab8b2193b3cfb1c737e3a786be363a&kind=file&type=code&rule=android_sql_raw_query" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/delete_suppression --data "hash=82ab8b2193b3cfb1c737e3a786be363a&kind=rule&type=manifest&rule=receiver_exported_intent_filter_exists" -H "X-Mobsf-Api-Key: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="get-apps-api"></a><strong>Get Apps API</strong></h2>
|
|
<p>Get Apps available for Dynamic Analysis. You must perform static analysis before attempting dynamic analysis.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/dynamic/get_apps</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>GET</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"apks": [
|
|
{
|
|
"MD5": "3a552566097a8de588b8184b059b0158",
|
|
"APP_NAME": "HelloWorld",
|
|
"VERSION_NAME": "1.0",
|
|
"FILE_NAME": "android.apk",
|
|
"PACKAGE_NAME": "opensecurity.helloworld"
|
|
},
|
|
{
|
|
"MD5": "6825bb9fde2fc671322df005976755a1",
|
|
"APP_NAME": "Wikipedia",
|
|
"VERSION_NAME": "2.7.277-r-2019-12-11",
|
|
"FILE_NAME": "org.wikipedia_2.7.277-r-2019-12-11-30277_minAPI19(x86)(nodpi)_apkmirror.com.apk",
|
|
"PACKAGE_NAME": "org.wikipedia"
|
|
},
|
|
],
|
|
"identifier": "192.168.56.139:5555",
|
|
"proxy_ip": "192.168.56.1",
|
|
"proxy_port": 1337,
|
|
"title": "MobSF Dynamic Analysis",
|
|
"version": "v3.1.8 Beta"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl --url http://localhost:8000/api/v1/dynamic/get_apps -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="start-analysis-api"></a><strong>Start Dynamic Analysis API</strong></h2>
|
|
<p>Start MobSF Dynamic Analyzer. Ensure that dynamic analysis environment (Android VM/Emulator/Device) is configured and running before calling this API.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/dynamic/start_analysis</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>re_install</td>
|
|
<td>0 or 1, default is 1</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>install</td>
|
|
<td>0 or 1, default is 1</td>
|
|
<td>No</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"screen_witdth": "1440",
|
|
"screen_height": "2960",
|
|
"package": "opensecurity.helloworld",
|
|
"hash": "3a552566097a8de588b8184b059b0158",
|
|
"android_version": 8,
|
|
"version": "v3.1.8 Beta",
|
|
"title": "Dynamic Analyzer"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/dynamic/start_analysis --data "hash=3a552566097a8de588b8184b059b0158" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="logcat-api"></a><strong>View Logcat API</strong></h2>
|
|
<p>API view Logcat logs.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/logcat</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>package</td>
|
|
<td>package name of the app</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>text/event-stream</code> <br />
|
|
<strong>Content:</strong> <code>Logcat Stream Data</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/logcat --data "package=org.wikipedia" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="mobsfy-api"></a><strong>MobSFy API</strong></h2>
|
|
<p>API to MobSFY android runtime environment.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/mobsfy</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>identifier</td>
|
|
<td>ADB identifier of Android VM/Emulator/Device</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok",
|
|
"android_version": 8
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/mobsfy --data "identifier=192.168.56.139:5555" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="adb-command-api"></a><strong>Execute ADB Commands API</strong></h2>
|
|
<p>Execute ADB commands inside VM/Emulator/Device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/adb_command</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>cmd</td>
|
|
<td>non blocking adb commands</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok",
|
|
"message": "acct\nbugreports\ncache\ncharger\nconfig\nadd\nadata\nadefault.prop\nadev\netc\nfstab.vbox86\ninit\ninit.environ.rc\ninit.rc\ninit.usb.configfs.rc\ninit.usb.rc\ninit.vbox86.rc\ninit.zygote32.rc\nmnt\nnonplat_file_contexts\nnonplat_hwservice_contexts\nnonplat_property_contexts\nnonplat_seapp_contexts\nnonplat_service_contexts\noem\nplat_file_contexts\nplat_hwservice_contexts\nplat_property_contexts\nplat_seapp_contexts\nplat_service_contexts\nproc\nrom.trace\nroot\nsbin\nsdcard\nsepolicy\nstorage\nsys\nsystem\ntmp\nueventd.rc\nueventd.vbox86.rc\nvar\nvendor\nvndservice_contexts\n"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/adb_command --data "cmd=shell ls" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="root-ca-api"></a><strong>Install or Remove Root CA API</strong></h2>
|
|
<p>API to install or remove MobSF Root CA to or from the Android VM/Emulator/Device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/root_ca</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>action</td>
|
|
<td>install/remove</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok",
|
|
"message": "installed"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/root_ca --data "action=install" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<hr />
|
|
<h2><a id="global-proxy-api"></a><strong>Set or Unset MobSF Global HTTP(S) Proxy API</strong></h2>
|
|
<p>API to apply or remove global HTTP(S) proxy configuration to Android VM/Emulator/Device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/global_proxy</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>action</td>
|
|
<td>set/unset</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok",
|
|
"message": "set"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/global_proxy --data "action=set" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="activity-api"></a><strong>Activity or Exported Activity Tester API</strong></h2>
|
|
<p>API to run Activity or Exported Activity Tester.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/activity</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>test</td>
|
|
<td>exported/activity</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/activity --data "hash=6825bb9fde2fc671322df005976755a1&test=exported" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="start-activity-api"></a><strong>Start Activity or Exported Activity API</strong></h2>
|
|
<p>API to manually launch an Activity or Exported Activity.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/start_activity</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>activity</td>
|
|
<td>Fully qualified name of the activity or exported activity</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/start_activity --data "hash=6825bb9fde2fc671322df005976755a1&activity=com.package.android.MainActivity" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="tls-tester-api"></a><strong>TLS/SSL Security Tester API</strong></h2>
|
|
<p>API to run TLS/SSL Security Tester.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/android/tls_tests</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "tls_tests": {"tls_misconfigured": false, "no_tls_pin_or_transparency": false, "pin_or_transparency_bypassed": false, "has_cleartext": false}}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/android/tls_tests --data "hash=6825bb9fde2fc671322df005976755a1" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="frida-instrument-api"></a><strong>Frida Instrument App API</strong></h2>
|
|
<p>API to start Frida Instrumentation.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/frida/instrument</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>default_hooks</td>
|
|
<td>comma separated default hooks to load</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>auxiliary_hooks</td>
|
|
<td>comma separated auxiliary hooks to load</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>frida_code</td>
|
|
<td>user defined frida code to load</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>class_name</td>
|
|
<td>class name to perform method enumeration when `enum_methods` auxiliary_hook is specified</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>class_search</td>
|
|
<td>pattern to search when `search_class` auxiliary_hook is specified</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>class_trace</td>
|
|
<td>class name to trace when `trace_class` auxiliary_hook is specified</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>frida_action</td>
|
|
<td>spawn/session/ps. The default action is spawn</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>new_package</td>
|
|
<td>New package name to attach</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>pid</td>
|
|
<td>Process id of the new package to attach</td>
|
|
<td>No</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/instrument --data "hash=6825bb9fde2fc671322df005976755a1&default_hooks=api_monitor,ssl_pinning_bypass,root_bypass,debugger_check_bypass&auxiliary_hooks=&frida_code=" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/instrument --data "hash=6825bb9fde2fc671322df005976755a1&default_hooks=api_monitor,ssl_pinning_bypass,root_bypass,debugger_check_bypass&auxiliary_hooks=enum_class,string_catch,string_compare,enum_methods,search_class,trace_class&class_name=java.io.File&class_search=ssl&class_trace=javax.net.ssl.TrustManager&frida_code=Java.perform(function()+%7B%0A++%2F%2F+Use+send()+for+logging%0A%7D)%3B" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="frida-api-monitor-api"></a><strong>Frida API Monitor API</strong></h2>
|
|
<p>API to view Frida API monitor output.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/frida/api_monitor</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/api_monitor --data "hash=6825bb9fde2fc671322df005976755a1" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="frida-get-dependencies-api"></a><strong>Frida Get Runtime Dependencies API</strong></h2>
|
|
<p>API to collect runtime dependencies.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/frida/get_dependencies</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/get_dependencies --data "hash=6825bb9fde2fc671322df005976755a1" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="frida-logs-api"></a><strong>Frida View Logs API</strong></h2>
|
|
<p>API to view Frida log output.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/frida/logs</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/logs --data "hash=6825bb9fde2fc671322df005976755a1" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="frida-list-scripts-api"></a><strong>Frida List Scripts API</strong></h2>
|
|
<p>API to list available frida scripts.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/frida/list_scripts</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device</td>
|
|
<td>android/ios</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok",
|
|
"files": [
|
|
"hook_java_reflection",
|
|
"jni_hook_by_address",
|
|
"bypass_flag_secure",
|
|
"file_trace",
|
|
"hook_constructor",
|
|
"jni_trace",
|
|
"default",
|
|
"get_android_id",
|
|
"aes_key",
|
|
"inputstream_dump",
|
|
"helper"
|
|
]
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/list_scripts --data "device=android" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="frida-get-script-api"></a><strong>Frida Get Script API</strong></h2>
|
|
<p>API to generate frida script based on selection.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/frida/get_script</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>scripts[]</td>
|
|
<td>name of the script from the output of Frida List Scripts (/api/v1/frida/list_scripts) API.</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>device</td>
|
|
<td>android/ios</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/get_script --data "device=android&scripts[]=hook_java_reflection&scripts[]=jni_hook_by_address&scripts[]=default&scripts[]=get_android_id" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="stop-analysis-api"></a><strong>Stop Dynamic Analysis API</strong></h2>
|
|
<p>Stop MobSF Dynamic Analyzer. This API must be called to stop dynamic analysis and prior to report generation.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/dynamic/stop_analysis</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{
|
|
"status": "ok"
|
|
}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/dynamic/stop_analysis --data "hash=6825bb9fde2fc671322df005976755a1" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="dynamic-report-json-api"></a><strong>Dynamic Analysis JSON Report API</strong></h2>
|
|
<p>Generate JSON Report of Dynamic Analysis. Stop Dynamic Analysis (/api/v1/dynamic/stop_analysis) API must be called before calling this API.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/dynamic/report_json</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/dynamic/report_json --data "hash=6825bb9fde2fc671322df005976755a1" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="dynamic-view-source-api"></a><strong>Dynamic Analysis View Source API</strong></h2>
|
|
<p>API to view source of files dumped from device after dynamic analysis. Stop Dynamic Analysis (/api/v1/dynamic/stop_analysis) API must be called before calling this API.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/dynamic/view_source</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>file</td>
|
|
<td>relative path of the file</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>type</td>
|
|
<td>xml/db/others</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>hash of the scan</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/dynamic/view_source --data "file=data/data/org.wikipedia/shared_prefs/org.wikipedia_preferences.xml&hash=6825bb9fde2fc671322df005976755a1&type=xml" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="supported-models-api"></a><strong>Supported Corellium iOS Models API</strong></h2>
|
|
<p>List out supported iOS Corellium VMs.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_supported_models</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_supported_models -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="supported-ios-versions-api"></a><strong>Supported Corellium iOS Versions API</strong></h2>
|
|
<p>List out supported iOS versions for a device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_ios_versions</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>model</td>
|
|
<td>iOS model</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_ios_versions --data "model=iPhone15,3" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
|
|
<hr />
|
|
<h2><a id="create-ios-instance-api"></a><strong>Corellium Create iOS Instance API</strong></h2>
|
|
<p>Create a jailbroken iOS instance in Corellium with desired flavor and iOS version.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_create_ios_instance</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>project_id</td>
|
|
<td>Corellium Project ID</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>name</td>
|
|
<td>Name of the VM</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>flavor</td>
|
|
<td>iOS Flavor</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>version</td>
|
|
<td>iOS Version</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_create_ios_instance --data "project_id=728bb423-68bc-4300-a484-6e32a43be9cf&name=iosvm&flavor=iphone15p&version=16.0" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
|
|
<hr />
|
|
<h2><a id="ios-dynamic-analysis-api"></a><strong>iOS Dynamic Analysis API</strong></h2>
|
|
<p>List iOS Instance & Apps Available for Dynamic Analysis.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/dynamic_analysis</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/dynamic_analysis -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="start-ios-instance-api"></a><strong>Corellium Start iOS Instance API</strong></h2>
|
|
<p>Start iOS VM in previously created in Corellium by instance identifier.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_start_instance</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS VM instance identifier</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Starting VM Instance"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_start_instance --data "instance_id=ce9cf65d-5ce5-4fad-823f-5d784c802d21" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="stop-ios-instance-api"></a><strong>Corellium Stop iOS Instance API</strong></h2>
|
|
<p>Stop iOS VM in Corellium by instance identifier.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_stop_instance</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS VM instance identifier</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Instance stopped"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_stop_instance --data "instance_id=ce9cf65d-5ce5-4fad-823f-5d784c802d21" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="unpause-ios-instance-api"></a><strong>Corellium Unpause iOS Instance API</strong></h2>
|
|
<p>Unpause iOS VM in Corellium by instance identifier.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_unpause_instance</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS VM instance identifier</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Instance unpaused"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_unpause_instance --data "instance_id=ce9cf65d-5ce5-4fad-823f-5d784c802d21" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="reboot-ios-instance-api"></a><strong>Corellium Reboot iOS Instance API</strong></h2>
|
|
<p>Reboot iOS VM in Corellium by instance identifier.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_reboot_instance</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS VM instance identifier</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Rebooting instance"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_reboot_instance --data "instance_id=ce9cf65d-5ce5-4fad-823f-5d784c802d21" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="destroy-ios-instance-api"></a><strong>Corellium Destroy iOS Instance API</strong></h2>
|
|
<p>Destroy iOS VM in Corellium by instance identifier.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_destroy_instance</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS VM instance identifier</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Destroying instance"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_destroy_instance --data "instance_id=ce9cf65d-5ce5-4fad-823f-5d784c802d21" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="corellium-list-apps-api"></a><strong>Corellium List Apps in Instance API</strong></h2>
|
|
<p>List all apps present in the Corellium iOS VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/corellium_list_apps</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS VM instance identifier</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>JSON Contents</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/corellium_list_apps --data "instance_id=ce9cf65d-5ce5-4fad-823f-5d784c802d21" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="ios-setup-environment-api"></a><strong>Setup iOS Dynamic Analysis Environment API</strong></h2>
|
|
<p>Setup iOS Dynamic Analysis Environment for an IPA. This API call is required for apps not installed in the Corellium iOS VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/setup_environment</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>MD5 hash of the IPA file</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Testing Environment is Ready!"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/setup_environment --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&hash=35469622303ba10a2195557a3ad1810a" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="ios-dynamic-analyzer-api"></a><strong>iOS Dynamic Analyzer API</strong></h2>
|
|
<p>Start iOS Dynamic Analyzer with an app. Setup environment (api/v1/ios/setup_environment) API should be called before running dynamic analyzer for IPAs not installed in the Corellium VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/dynamic_analyzer</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"hash": "9d6698108e706f669183737f8d20e1e4", "instance_id": "bd057756-87a8-45a6-945d-35c7ce48eafe", "bundle_id": "com.highaltitudehacks.DVIAswiftv2", "version": "v3.9.4 Beta", "form": null, "title": "iOS Dynamic Analyzer"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/dynamic_analyzer --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&bundle_id=com.highaltitudehacks.DVIAswiftv2" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-run-app-api"></a><strong>Run App API</strong></h2>
|
|
<p>Run the app in the Corellium VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/run_app</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "App Started"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/run_app --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&bundle_id=com.highaltitudehacks.DVIAswiftv2" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-stop-app-api"></a><strong>Stop App API</strong></h2>
|
|
<p>Kill the app in the Corellium VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/stop_app</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "App Killed"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/stop_app --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&bundle_id=com.highaltitudehacks.DVIAswiftv2" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-remove-app-api"></a><strong>Remove App API</strong></h2>
|
|
<p>Remove an app from the Corellium VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/remove_app</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "App uninstalled"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/remove_app --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&bundle_id=com.highaltitudehacks.DVIAswiftv2" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-takescreenshot-api"></a><strong>Take Screenshot API</strong></h2>
|
|
<p>Take a screenshot.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/take_screenshot</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA..."}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/take_screenshot --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="ios-get-app-container-path-api"></a><strong>Get App Container Path API</strong></h2>
|
|
<p>Get App container path. App must be instrumented before calling this API.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/get_app_container_path</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "/var/mobile/Containers/Data/Application/DDEACD38-727E-491C-AB9B-5DE80BB9EA71/"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/get_app_container_path --data "bundle_id=com.highaltitudehacks.DVIAswiftv2" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-network-capture-api"></a><strong>Network Capture API</strong></h2>
|
|
<p>Enable/Disable Network Capture.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/network_capture</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>state</td>
|
|
<td>on/off</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Enabled network capture"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/network_capture --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&state=on" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-live-pcap-download-api"></a><strong>Live PCAP Download API</strong></h2>
|
|
<p>Download live packet capture.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/live_pcap_download</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/vnd.tcpdump.pcap</code> <br />
|
|
<strong>Content:</strong> <code>PCAP File</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/live_pcap_download --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-ssh-execute-api"></a><strong>SSH Execute API</strong></h2>
|
|
<p>Execute OS Commands inside the VM over SSH.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/ssh_execute</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>cmd</td>
|
|
<td>OS Command</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Library\nMedia\n\n"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/ssh_execute --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&cmd=ls" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="download-app-data-api"></a><strong>Download App Data API</strong></h2>
|
|
<p>Download app data from the VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/download_app_data</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Downloaded application data"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/download_app_data --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&bundle_id=com.highaltitudehacks.DVIAswiftv2" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="instance-input-api"></a><strong>Instance Input API</strong></h2>
|
|
<p>Provide text, swipe and touch events to the VM</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/instance_input</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>x</td>
|
|
<td>x-axis integer / Text input text when <b>event</b> parameter is set to <b>text</b></td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>y</td>
|
|
<td>y-axis integer</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>event</td>
|
|
<td>text/home/enter/backspace/left/right/swipe_up/swipe_down/swipe_left/swipe_right/touch.</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>max_x</td>
|
|
<td>Max Screen size x-axis</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>max_y</td>
|
|
<td>Max Screen size y-axis</td>
|
|
<td>No</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/instance_input --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&x=264&y=824&event=finger&max_x=750&max_y=1334" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="system-logs-api"></a><strong>System Logs API</strong></h2>
|
|
<p>Get VM system logs.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/system_logs</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "iBoot version: iHoot-1975.1.46.1.2\r\ncorecrypto_kex..."}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/system_logs --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="file-upload-api"></a><strong>File Upload API</strong></h2>
|
|
<p>Upload a file to the the VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/file_upload</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>file</td>
|
|
<td>multipart/form-data</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -F "file=@/Users/foo/foo.sh" -F "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe" --url http://localhost:8000/api/v1/ios/file_upload -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="file-download-api"></a><strong>File Download API</strong></h2>
|
|
<p>Download a file from the VM.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/file_download</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>file</td>
|
|
<td>Path to the file in VM</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/octet-stream</code> <br />
|
|
<strong>Content:</strong> <code>File Data</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/file_download --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&file=/var/mobile/Containers/Data/Application/6DC4F886-537F-4F6D-87EE-ED976F4F4682/Library/Application Support/com.braze.core.persistence/data/61cbc3f/remote-configuration.json" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<hr />
|
|
<h2><a id="ios-instrument-api"></a><strong>Frida Instrument API</strong></h2>
|
|
<p>Instrument iOS App.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/frida/ios_instrument</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>hash</td>
|
|
<td>MD5 hash of the IPA file</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>default_hooks</td>
|
|
<td>comma separated default hooks to load</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>dump_hooks</td>
|
|
<td>comma separated dump hooks to load (network,crypto,cookies,file-access,json,sqlite,data-dir,keychain,nslog,text-inputs,nsurlcredentialstorage,nsuserdefaults,pasteboard)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>auxiliary_hooks</td>
|
|
<td>comma separated auxiliary hooks to load</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>frida_code</td>
|
|
<td>user defined frida code to load</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>class_name</td>
|
|
<td>class name to perform method enumeration when `enum_methods` auxiliary_hook is specified</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>class_search</td>
|
|
<td>pattern to search when `search_class` auxiliary_hook is specified</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>class_trace</td>
|
|
<td>class name to trace when `trace_class` auxiliary_hook is specified</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>method_search</td>
|
|
<td>look for classes with this method</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>frida_action</td>
|
|
<td>spawn/session/ps. The default action is spawn</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>new_package</td>
|
|
<td>New package name to attach</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>pid</td>
|
|
<td>Process id of the new package to attach</td>
|
|
<td>No</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Frida Instrumentation successful"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/frida/ios_instrument --data "frida_action=spawn&pid=&new_bundle_id=&hash=f49355aa96053a36248905f78d5419a8&bundle_id=com.1debit.beta.ChimeApp&instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&default_hooks=jailbreak_bypass&dump_hooks=network,crypto,cookies,file-access,json,sqlite,data-dir,keychain,nslog,text-inputs,nsurlcredentialstorage,nsuserdefaults,pasteboard&auxiliary_hooks=&class_name=&class_search=&method_search=asdad&class_trace=&frida_code=" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="ios-report-json-api"></a><strong>iOS Dynamic Analysis Report API</strong></h2>
|
|
<p>Get iOS Dynamic Analysis Report.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/dynamic/ios_report_json</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>instance_id</td>
|
|
<td>iOS instance id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id (Available from /api/v1/ios/dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"hash": "9d6698108e706f669183737f8d20e1e4", "version": "v3.9.4 Beta", "title": "iOS Dynamic Analysis Report", "instance_id": "bd057756-87a8-45a6-945d-35c7ce48eafe", "bundleid": "com.highaltitudehacks.DVIAswiftv2", "trackers": {"detected_trackers": 0, "total_trackers": 432,...."}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/dynamic/ios_report_json --data "instance_id=bd057756-87a8-45a6-945d-35c7ce48eafe&bundle_id=com.highaltitudehacks.DVIAswiftv2" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-dynamic-analysis-api"></a><strong>iOS Device Dynamic Analysis API</strong></h2>
|
|
<p>iOS Jailbroken Device Dynamic Analysis Entrypoint.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_dynamic_analysis</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_dynamic_analysis --data "device_id=00008110-000A4CE00C81C01E" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-get-api"></a><strong>Get iOS Device Details API</strong></h2>
|
|
<p>Get iOS Device Details and List Apps.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_get</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_get --data "device_id=00008110-000A4CE00C81C01E" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-install-ipa-api"></a><strong>Install IPA on Device API</strong></h2>
|
|
<p>Install an IPA file on the jailbroken iOS device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_install_ipa</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>checksum</td>
|
|
<td>MD5 hash of the scan (Available from /api/v1/upload)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_install_ipa --data "device_id=00008110-000A4CE00C81C01E&checksum=f49355aa96053a36248905f78d5419a8" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-dynamic-analyzer-api"></a><strong>iOS Device Dynamic Analyzer API</strong></h2>
|
|
<p>Start iOS Device Dynamic Analyzer.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_dynamic_analyzer</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_dynamic_analyzer --data "device_id=00008110-000A4CE00C81C01E&bundle_id=com.example.app" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-file-upload-api"></a><strong>Upload File to Device API</strong></h2>
|
|
<p>Upload a file to the jailbroken iOS device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_file_upload</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>file</td>
|
|
<td>multipart/form-data</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_file_upload -F "device_id=00008110-000A4CE00C81C01E" -F "file=@/path/to/file" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-ssh-execute-api"></a><strong>SSH Execute on Device API</strong></h2>
|
|
<p>Execute commands on the jailbroken iOS device over SSH.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_ssh_execute</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>cmd</td>
|
|
<td>Command to execute on the device</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_ssh_execute --data "device_id=00008110-000A4CE00C81C01E&cmd=ls /tmp" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-instrument-api"></a><strong>Frida Instrument on Device API</strong></h2>
|
|
<p>Frida Instrument an app on the jailbroken iOS device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_instrument</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>default_hooks</td>
|
|
<td>Default Frida hooks (comma separated)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>dump_hooks</td>
|
|
<td>Dump Frida hooks (comma separated)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>auxiliary_hooks</td>
|
|
<td>Auxiliary Frida hooks (comma separated)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>frida_code</td>
|
|
<td>Custom Frida code to inject</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>frida_action</td>
|
|
<td>spawn/session/ps. The default action is spawn</td>
|
|
<td>No</td>
|
|
</tr>
|
|
<tr>
|
|
<td>pid</td>
|
|
<td>Process id to attach to</td>
|
|
<td>No</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok", "message": "Frida Instrumentation successful"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_instrument --data "device_id=00008110-000A4CE00C81C01E&bundle_id=com.example.app&default_hooks=jailbreak_bypass&dump_hooks=network,crypto&auxiliary_hooks=&frida_code=" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-system-logs-api"></a><strong>Device System Logs API</strong></h2>
|
|
<p>Get system logs from the jailbroken iOS device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_system_logs</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_system_logs --data "device_id=00008110-000A4CE00C81C01E" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-ps-api"></a><strong>Device Running Processes API</strong></h2>
|
|
<p>Get list of running processes on the jailbroken iOS device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_ps</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_ps --data "device_id=00008110-000A4CE00C81C01E" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-file-download-api"></a><strong>Download File from Device API</strong></h2>
|
|
<p>Download a file from the jailbroken iOS device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_file_download</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>file</td>
|
|
<td>File path on the device to download</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/octet-stream</code> or <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> File download or <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_file_download --data "device_id=00008110-000A4CE00C81C01E&file=/tmp/example.txt" -H "Authorization: {{ api_key}}" --output example.txt
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-api-monitor-api"></a><strong>iOS Device API Monitor API</strong></h2>
|
|
<p>Get iOS Device API Monitor data.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_api_monitor</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>checksum</td>
|
|
<td>MD5 hash of the scan (Available from /api/v1/upload)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_api_monitor --data "checksum=f49355aa96053a36248905f78d5419a8" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-download-app-data-api"></a><strong>Download App Data from Device API</strong></h2>
|
|
<p>Download Application Data from the jailbroken iOS device.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_download_app_data</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Data Params</strong></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"status": "ok"}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_download_app_data --data "device_id=00008110-000A4CE00C81C01E&bundle_id=com.example.app" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr />
|
|
<h2><a id="device-report-json-api"></a><strong>iOS Device Dynamic Analysis Report API</strong></h2>
|
|
<p>Get iOS Device Dynamic Analysis Report.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>URL:</strong> <code>/api/v1/ios/device_report_json</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Method:</strong> <code>POST</code></p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Header:</strong> <code>Authorization: <api_key></code> <strong>Or</strong> <code>X-Mobsf-Api-Key: <api_key></code></p>
|
|
</li>
|
|
</ul>
|
|
<table class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Param Name</th>
|
|
<th>Param Value</th>
|
|
<th>Required</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>device_id</td>
|
|
<td>iOS device id (Available from /api/v1/ios/device_dynamic_analysis)</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>bundle_id</td>
|
|
<td>iOS app bundle id</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br />
|
|
<ul>
|
|
<li>
|
|
<p><strong>Success Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>200</code><br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"hash": "...", "version": "...", "title": "iOS Device Dynamic Analysis Report", ...}</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error Response:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>500 Internal Server Error</code> or <code>405 Method Not Allowed</code> or <code>422 Unprocessable Entity</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": <error message> }</code>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Code:</strong> <code>401 Unauthorized</code> <br />
|
|
<strong>Content-Type:</strong> <code>application/json; charset=utf-8</code> <br />
|
|
<strong>Content:</strong> <code>{"error": "You are unauthorized to make this request." }</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><strong>Sample Call:</strong></p>
|
|
<ul>
|
|
<li>
|
|
<pre><code>curl -X POST --url http://localhost:8000/api/v1/ios/device_report_json --data "device_id=00008110-000A4CE00C81C01E&bundle_id=com.example.app" -H "Authorization: {{ api_key}}"
|
|
</code></pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<!-- end API Docs-->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|