Files
Mobile-Security-Framework-M…/mobsf/templates/dynamic_analysis/android/dynamic_analysis.html
T
Ajin Abraham 70e243d661 4.1.8 (#2448)
* APKID QA.
* Bash and Batch file script QA.
* Android Report template optimizations on how exported components are displayed.
* Clickable Android Activities, Services, Providers and Recievers.
* Updated Android version support to 11.0 for Android Studio AVD.
* Created helper scripts for AVDs `scripts/start_avd.sh` and `scripts/start_avd.ps1`.
2024-11-10 00:44:20 -08:00

328 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{% extends "base/base_layout.html" %}
{% load static %}
{% block sidebar_option %}
sidebar-collapse
{% endblock %}
{% block extra_css %}
<!-- DataTables -->
<link href="{% static "datatables/css/datatables.combined.min.css" %}" rel="stylesheet">
<link rel="stylesheet" href="{% static "others/css/spinner.css" %}">
<link href="{% static "adminlte/plugins/sweetalert2/sweetalert2.min.css" %}" rel="stylesheet">
<style>
#app_icon{
width: 64px;
height: 64px;
}
textarea {
width: 100%;
height: 500px;
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background: none repeat scroll 0 0 rgba(0, 0, 0, 0.07);
border-color: -moz-use-text-color #FFFFFF #FFFFFF -moz-use-text-color;
border-image: none;
border-radius: 6px 6px 6px 6px;
border-style: none solid solid none;
border-width: medium 1px 1px medium;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12) inset;
color: #555555;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 1em;
line-height: 1.4em;
padding: 5px 8px;
transition: background-color 0.2s ease 0s;
}
textarea:focus {
background: none repeat scroll 0 0 #FFFFFF;
outline-width: 0;
}
/* disable button */
{% if not identifier %}
.disable {
background-color: #7b7b7b;
pointer-events: none;
cursor: default;
}
{% endif %}
</style>
{% endblock %}
{% block content %}
<div class="content-wrapper">
<div class="content-header">
</div>
<div class="container-fluid">
<div class="row">
{% if not identifier %}
<div class="col-md-12">
<div class="card bg-gradient-danger">
<div class="card-header">
<h3 class="card-title">Android Runtime not found!</h3>
<!-- /.card-tools -->
</div>
<!-- /.card-header -->
<div class="card-body">
<p> MobSF cannot find android instance identifier. Make sure that an android instance is running and refresh this page.</p><p> If this error persists, Please set <i>ANALYZER_IDENTIFIER</i> in <strong>{{ settings_loc }}</strong> or via environment variable <strong>MOBSF_ANALYZER_IDENTIFIER</strong>.
</p>
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</div>
<!-- /.col -->
{% endif %}
<div class="col-md-12">
<div class="card bg-gradient-primary">
<!-- /.card-header -->
<div class="card-body">
<div class="row">
<div class="col-md-9">
<h4>MobSF Dynamic Analyzer Supports</h4>
<h5>
<strong>• Genymotion Android VM</strong> version 4.1 - 11.0 (arm64, x86, upto API 30)<br/>
<strong>• Android Emulator AVD</strong> (non production) version 5.0 - 11.0 (arm, arm64, x86, and x86_64 upto API 30)<br/>
<strong>• Corellium Android VM</strong> (userdebug builds) version 7.1.2 - 11.0 (arm64 upto API 30)
</h5>
<p>
{% if android_version %}
Android version >= <strong>9.0</strong> recommended<br/>
Detected Android Version: <strong>{{android_version}}</strong>, SDK: API level <strong>{{ android_sdk }}</strong> <br/>
{% if android_sdk|floatformat > android_supported|floatformat %}
<script src="{% static "adminlte/plugins/sweetalert2/sweetalert2.min.js" %}"></script>
<script>
Swal.fire(
'Android Version/SDK not supported',
'You are running Android Version <strong>{{ android_version }}</strong> and SDK <strong>{{ android_sdk }}</strong> which is not supported by MobSF. Please use a supported Android version/API level.',
'error'
)
</script>
{% endif %}
{% endif %}
{% if android_version < 5 %}
Xposed Framework is used for instrumentation and you must MobSFy and reboot the Android Runtime prior to Dynamic Analysis.
{% if android_version < 4.4 %}
<br/>For Android version <strong>4.1 - 4.3</strong>, set Android VM proxy as <strong>{% if proxy_ip %} {{ proxy_ip }}{% else %} <i>&lt;Host IP&gt;</i>{% endif %}:{{proxy_port}}</strong>
{% endif %}
{% endif %}
</p>
</div>
<div class="col-md-3">
<br/>
<br/>
<br/>
<p>
<button class="btn btn-info disable" role="button" data-toggle="modal" data-target="#mmobsfy">MobSFy Android Runtime</button> <p>Android instance: <strong>{{ identifier }}</strong></p></div>
</p>
</div>
</div>
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</div>
<!-- /.col -->
<div class="col-md-12">
<div class="card card-default">
<div class="card-header">
<h3 class="card-title"><i class="fa fa-rocket"></i> MobSF Dynamic Analysis</h3>
</div>
<div class="card-body">
<div class="table-responsive">
<h4> Apps in Device</h4>
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th>APP</th>
<th>LOCATION IN DEVICE</th>
<th>ACTION</th>
</tr>
</thead>
<tbody>
{% if device_packages %}
{% for hash, det in device_packages.items %}
<tr>
<td align="center">
<img id="app_icon" src="/download/{{ hash }}-icon.png" onerror="this.onerror=null;this.src='{% static 'img/no_icon.png' %}'"/>
<br/><strong>{{ det.0 }}</strong>
</td>
<td>
{{ det.1}}
</td>
<td align="center">
<p>
<a class="btn btn-primary disable" onclick="dynamic_loader()" href="{% url "dynamic_analyzer" checksum=hash %}?re_install=0&install=0"><i class="fab fa-android"></i> Start Dynamic Analysis</a>
</p>
<p>
<a class="btn btn-warning disable" onclick="dynamic_loader()" href="{% url "static_scan" checksum=hash %}"><i class="fa fa-download"></i> Pull &amp; Static Analysis</a>
</p>
<p>
<a class="btn btn-info" href="{% url "dynamic_report" checksum=hash %}"><i class="fa fa-mobile"></i> View Report </a>
</p>
</td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
</br>
<h4> Apps Available</h4>
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th>APP</th>
<th>FILE NAME</th>
<th>PACKAGE</th>
<th>ACTION</th>
</tr>
</thead>
<tbody>
{% if apps %}
{% for e in apps %}
<tr>
<td align="center">
<img id="app_icon" src="{% if e.ICON_PATH %}/download/{{ e.ICON_PATH }}{% else %}{% static 'img/no_icon.png' %}{% endif %}"/>
<br/><strong>{{ e.APP_NAME }} - {{ e.VERSION_NAME }}</strong>
</td>
<td>
{{ e.FILE_NAME }}
</td>
<td>
{{ e.PACKAGE_NAME }}
</td>
<td align="center">
<p>
<a class="btn btn-success disable" onclick="dynamic_loader()" href="{% url "dynamic_analyzer" checksum=e.MD5 %}"><i class="fab fa-android"></i> Start Dynamic Analysis</a>
</p>
<p>
<a class="btn btn-primary btn-sm disable" onclick="dynamic_loader()" href="{% url "dynamic_analyzer" checksum=e.MD5 %}?re_install=0"><i class="fab fa-android"></i> Start Dynamic Analysis (No reinstall)</a>
</p>
<p>
<a class="btn btn-info {% if not e.DYNAMIC_REPORT_EXISTS %}disabled{% endif %}" href="{% url "dynamic_report" checksum=e.MD5 %}"><i class="fa fa-mobile"></i> View Report </a>
</p>
</td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
</div>
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</div>
<!-- /.col -->
</div>
</div>
</div>
</div>
</div>
</div>
<!--Modal-->
<div class="modal" id="mmobsfy" tabindex="-1" role="dialog">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">MobSFy Android Runtime</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form role="form">
<div class="form-group">
<label>IP &amp; Port/Identifier</label>
<input id="identifier" type="text" class="form-control" value="{{ identifier }}">
</div>
<div class="form-group">
<label>Status</label>
<textarea id="stat" class="form-control" rows="10" placeholder="" disabled=""></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button id="mobsfy" type="button" class="btn btn-primary disable">MobSFy!</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!--Loader-->
<div class="hidden loading">
<div class='uil-ring-css' style='transform:scale(0.79);'>
<div></div>
</div>
</div>
{% endblock %}
{% block extra_scripts %}
<!-- DataTables -->
<script src="{% static "datatables/js/pdfmake.min.js" %}"></script>
<script src="{% static "datatables/js/vfs_fonts.js" %}"></script>
<script src="{% static "datatables/js/datatables.combined.min.js" %}"></script>
<script src="{% static "others/js/datatables_init.js" %}"></script>
<script>
function dynamic_loader(){
var loadingOverlay = document.querySelector('.loading');
loadingOverlay.classList.remove('hidden');
}
//MobSFy AJAX
$("#mobsfy").one( "click", function() {
$('#stat').append("\nMobSFying Android Runtime\n");
$.ajax({
url : "{% url 'mobsfy' %}",
type : "POST",
dataType: "json",
data : {
csrfmiddlewaretoken: '{{ csrf_token }}',
identifier: $('#identifier').val() ,
},
success : function(json) {
if (json.status==="ok"){
$('#stat').append("\nSucessfully created MobSF Dynamic Analysis environment.");
if (json.android_version < 5){
$('#stat').append("\n* Download & Install Xposed Framework.\n* Restart the device.");
$('#stat').append("\n* Enable all the Xposed modules.\n* Restart the device once more.");
} else{
$('#stat').append("\nMobSF agents and Frida server installed.");
}
}
else if(json.status === "failed"){
$('#stat').append(json.message);
}
$('#stat').scrollTop($('#stat')[0].scrollHeight);
},
error : function(xhr, errmsg, err) {
$('#stat').append("\nERROR!!! \n\n"+ err);
$('#stat').scrollTop($('#stat')[0].scrollHeight);
}
});
return false;
});
</script>
{% endblock %}