mirror of
https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
synced 2026-10-12 02:06:59 +00:00
* Replace Warning with Medium and added Hotspot * Add file analysis to hotspot * Enterprise Feature Request Flag * EFR01 changes * version bump
1189 lines
42 KiB
HTML
Executable File
1189 lines
42 KiB
HTML
Executable File
{% extends "base/base_layout.html" %}
|
||
{% load static %}
|
||
{% block sidebar_option %}
|
||
sidebar-mini
|
||
{% endblock %}
|
||
{% block extra_css %}
|
||
<!-- DataTables -->
|
||
<link rel="stylesheet" href="{% static "adminlte/plugins/datatables-bs4/dataTables.bootstrap4.min.css" %}">
|
||
<style type="text/css" media="print">
|
||
@page { size: landscape; }
|
||
@media print {
|
||
.btn, #scan_options {
|
||
display: none;
|
||
}
|
||
}
|
||
</style>
|
||
<style>
|
||
#app_icon{
|
||
width: 64px;
|
||
height: 64px;
|
||
}
|
||
#pre-wrap {
|
||
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>
|
||
{% endblock %}
|
||
{% block sidebar %}
|
||
<!-- Main Sidebar Container -->
|
||
<!-- Sidebar -->
|
||
<div class="sidebar">
|
||
<!-- Sidebar user panel (optional) -->
|
||
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
|
||
<div class="info">
|
||
<a href="#" class="d-block">Static Analyzer</a>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sidebar Menu -->
|
||
<nav class="mt-2">
|
||
<ul class="nav nav-pills nav-sidebar flex-column nav-child-indent" data-widget="treeview" role="menu" data-accordion="false">
|
||
|
||
<li class="nav-item">
|
||
<a href="#information" class="nav-link">
|
||
<i class="nav-icon fas fa-info-circle"></i>
|
||
<p>
|
||
Information
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#scan_options" class="nav-link">
|
||
<i class="nav-icon fas fa-cog"></i>
|
||
<p>
|
||
Scan Options
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#url_schemes" class="nav-link">
|
||
<i class="nav-icon fas fa-hashtag"></i>
|
||
<p>
|
||
URL Schemes
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#permissions" class="nav-link">
|
||
<i class="nav-icon fas fa-list"></i>
|
||
<p>
|
||
Permissions
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#ios_api" class="nav-link">
|
||
<i class="nav-icon fab fa-apple"></i>
|
||
<p>
|
||
iOS API
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item has-treeview">
|
||
<a href="#" class="nav-link">
|
||
<i class="nav-icon fas fa-shield-alt"></i>
|
||
<p>
|
||
Security Analysis
|
||
<i class="fas fa-angle-left right"></i>
|
||
</p>
|
||
</a>
|
||
<ul class="nav nav-treeview">
|
||
<li class="nav-item">
|
||
<a href="#transport_security" class="nav-link">
|
||
<i class="nav-icon fas fa-lock"></i>
|
||
<p>
|
||
Transport Security
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#code_analysis" class="nav-link">
|
||
<i class="fa fa-code nav-icon"></i>
|
||
<p>Code Analysis</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#file_analysis" class="nav-link">
|
||
<i class="fa fa-file nav-icon"></i>
|
||
<p>File Analysis</p>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-item has-treeview">
|
||
<a href="#" class="nav-link">
|
||
<i class="nav-icon fa fa-bug"></i>
|
||
<p>
|
||
Malware Analysis
|
||
<i class="fas fa-angle-left right"></i>
|
||
</p>
|
||
</a>
|
||
<ul class="nav nav-treeview">
|
||
<li class="nav-item">
|
||
<a href="#serverlocations" class="nav-link">
|
||
<i class="fas fa-globe-asia nav-icon"></i>
|
||
<p>Server Locations</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#malware_check" class="nav-link">
|
||
<i class="fab fa-searchengin nav-icon"></i>
|
||
<p>Domain Malware Check</p>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-item has-treeview">
|
||
<a href="#" class="nav-link">
|
||
<i class="nav-icon fa fa-plus"></i>
|
||
<p>
|
||
Reconnaissance
|
||
<i class="fas fa-angle-left right"></i>
|
||
</p>
|
||
</a>
|
||
<ul class="nav nav-treeview">
|
||
<li class="nav-item">
|
||
<a href="#urls" class="nav-link">
|
||
<i class="fas fa-globe nav-icon"></i>
|
||
<p>URLs</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#firebase" class="nav-link">
|
||
<i class="fas fa-database nav-icon"></i>
|
||
<p>Firebase DB</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#emails" class="nav-link">
|
||
<i class="fas fa-envelope nav-icon"></i>
|
||
<p>Emails</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#trackers" class="nav-link">
|
||
<i class="fas fa-user-secret nav-icon"></i>
|
||
<p>Trackers</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#secrets" class="nav-link">
|
||
<i class="fas fa-key nav-icon"></i>
|
||
<p>Hardcoded Secrets</p>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="#files" class="nav-link">
|
||
<i class="nav-icon far fa-copy"></i>
|
||
<p>
|
||
Files
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="../pdf/?md5={{ md5 }}" class="nav-link">
|
||
<i class="nav-icon fas fa-file-pdf"></i>
|
||
<p>
|
||
PDF Report
|
||
</p>
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a href="javascript:window.print()" class="nav-link">
|
||
<i class="nav-icon fa fa-print"></i>
|
||
<p>
|
||
Print Report
|
||
</p>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
<!-- /.sidebar-menu -->
|
||
</div>
|
||
<!-- /.sidebar -->
|
||
{% endblock %}
|
||
{% block content %}
|
||
<!-- Content Wrapper. Contains page content -->
|
||
<div class="content-wrapper">
|
||
<!-- Content Header (Page header) -->
|
||
<div class="content-header">
|
||
<!--
|
||
<div class="container-fluid">
|
||
<div class="row mb-2">
|
||
<div id="mobsf_header" align="center">
|
||
</div>
|
||
</div>
|
||
</div>-->
|
||
</div>
|
||
<!-- /.content-header -->
|
||
|
||
|
||
<!-- Main content -->
|
||
<a id="information" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<h5 class="card-title"></h5>
|
||
<div class="row">
|
||
<div class="col-2">
|
||
<p><strong><i class="fas fa-check-double"></i> APP SCORES</strong></p>
|
||
<img id="app_icon" src="{% if not appstore_details.error %}{{appstore_details.icon}}{% elif icon_found %}/download/{{ md5 }}-icon.png{% else %}{% static 'img/no_icon.png' %}{% endif %}"/>
|
||
<p>
|
||
{% if average_cvss %}
|
||
<span class="badge bg-info">Average CVSS</span> <strong>{{ average_cvss }} </strong><br/>
|
||
{% endif %}
|
||
<span class="badge bg-{% if appsec.security_score < 40 %}danger{% elif appsec.security_score == 100 %}success{% else %}warning{% endif %}">Security Score</span> <strong>{{ appsec.security_score }}/100 </strong><br/>
|
||
{% if trackers.detected_trackers > 0 %}
|
||
<span class="badge bg-warning">Trackers Detection</span> <strong>{{ trackers.detected_trackers }}/{{ trackers.total_trackers }}</strong><br/>
|
||
{% else %}
|
||
<span class="badge bg-success">Trackers Detection</span> <strong>{{ trackers.detected_trackers }}/{{ trackers.total_trackers }}</strong><br/>
|
||
{% endif %}
|
||
</p>
|
||
<p> <a href="../appsec_dashboard/{{ md5 }}/" class="btn btn-outline-primary btn-sm" role="button"><i class="fas fa-user-shield"></i> MobSF Scorecard</a></p>
|
||
</div>
|
||
|
||
<div class="col-5">
|
||
<p><strong><i class="fas fa-box-open"></i> FILE INFORMATION </strong></p>
|
||
<span class="badge bg-primary">File Name</span>
|
||
{{ file_name }}<br/>
|
||
<span class="badge bg-primary">Size</span>
|
||
{{ size }}<br/>
|
||
<span class="badge bg-primary">MD5</span>
|
||
{{ md5 }}<br/>
|
||
<span class="badge bg-primary">SHA1</span>
|
||
{{ sha1 }}<br/>
|
||
<span class="badge bg-primary">SHA256</span>
|
||
{{ sha256 }}<br/>
|
||
</div>
|
||
<div class="col-5">
|
||
<p><strong><i class="fas fa-info"></i> APP INFORMATION </strong></p>
|
||
<span class="badge bg-primary">App Name</span>
|
||
{{ app_name }}<br/>
|
||
<span class="badge bg-primary">App Type</span>
|
||
{{ app_type }}<br/>
|
||
<span class="badge bg-primary">Identifier</span>
|
||
{{ bundle_id }}<br/>
|
||
<span class="badge bg-primary">SDK Name</span>
|
||
{{ sdk_name }}<br/>
|
||
<span class="badge bg-primary">Version</span>
|
||
{{ app_version }}
|
||
<span class="badge bg-primary">Build</span>
|
||
{{ build }}
|
||
<span class="badge bg-primary">Platform Version</span>
|
||
{{ platform }}
|
||
<span class="badge bg-primary">Min OS Version</span>
|
||
{{ min_os_version }} <br/>
|
||
<span class="badge bg-primary">Supported Platforms</span>
|
||
{% for pl in bundle_supported_platforms %}
|
||
{{pl}},
|
||
{% endfor %}
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- App Store -->
|
||
{% if not appstore_details.error %}
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fab fa-app-store-ios"></i> APP STORE INFORMATION</strong>
|
||
</p>
|
||
<span class="badge bg-info">Title</span>
|
||
{{ appstore_details.title }} <br/>
|
||
<span class="badge bg-info">Score</span>
|
||
{{ appstore_details.score}}
|
||
<span class="badge bg-info">Features</span>
|
||
{% for fea in appstore_details.features %}
|
||
{{ fea }},
|
||
{% endfor %}
|
||
<span class="badge bg-info">Price</span>
|
||
{{ appstore_details.price }}
|
||
<span class="badge bg-info">Category</span>
|
||
{% for cat in appstore_details.category %}
|
||
{{ cat }},
|
||
{% endfor %}
|
||
<span class="badge bg-info">App Store URL</span>
|
||
<a target="_blank" href="{{ appstore_details.itunes_url }}" rel="noopener noreferrer">{{ appstore_details.app_id }} </a>
|
||
<br/>
|
||
<span class="badge bg-info">Developer</span>
|
||
{{appstore_details.developer}},
|
||
<span class="badge bg-info">Developer ID</span>
|
||
{{appstore_details.developer_id}} <br/>
|
||
<span class="badge bg-info">Developer Website</span>
|
||
{{appstore_details.developer_website }} <br/>
|
||
<span class="badge bg-info">Developer URL</span>
|
||
{{appstore_details.developer_url}} <br/>
|
||
<span class="badge bg-info">Supported Devices</span>
|
||
{% for dev in appstore_details.supported_devices %}
|
||
{{ dev }},
|
||
{% endfor %}
|
||
<br/>
|
||
<span class="badge bg-info">Description</span>
|
||
<pre id="pre-wrap">{{ appstore_details.description }}</pre>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
{% endif %}
|
||
<!-- /.col -->
|
||
<!-- row and container-->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- =========================end information==================================== -->
|
||
|
||
|
||
|
||
<a id="scan_options" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-cog"></i> SCAN OPTIONS</strong>
|
||
</p>
|
||
<p align="center">
|
||
<a href="../static_analyzer_ios/?checksum={{ md5 }}&name={{ file_name }}&type=ios&rescan=1" class="btn btn-info" role="button"><i class="fa fa-sync"></i> Rescan</a>
|
||
<a data-target="#mplist" role="button" class="btn btn-primary" data-toggle="modal" href="#"><i class="fa fa-list"></i> View Info.plist</a>
|
||
</p>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end scan options================================== -->
|
||
<a id="url_schemes" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-hashtag"></i> CUSTOM URL SCHEMES</strong>
|
||
<p>
|
||
{% if bundle_url_types|length > 0 %}
|
||
<div class="table-responsive">
|
||
<table class="table table-bordered table-hover table-striped">
|
||
|
||
<thead>
|
||
<tr>
|
||
<th>URL NAME</th>
|
||
<th>SCHEMES</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
|
||
{% for scheme in bundle_url_types %}
|
||
<tr>
|
||
<td>
|
||
{{scheme | key:"CFBundleURLName" }}
|
||
{% if scheme|key:"CFBundleTypeRole" %}
|
||
<br>
|
||
{{scheme | key:"CFBundleTypeRole" }}
|
||
{% endif %}
|
||
</td>
|
||
<td>
|
||
{% if scheme|key:"CFBundleURLSchemes" %}
|
||
{% for ul in scheme.CFBundleURLSchemes %}
|
||
{{ul}} <br/>
|
||
{% endfor %}
|
||
{% endif %}
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
{% else %}
|
||
<p>
|
||
No URL Schemes found.
|
||
</p>
|
||
{% endif %}
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end url schemes ================================== -->
|
||
<a id="permissions" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fa fa-list"></i> APPLICATION PERMISSIONS</strong>
|
||
<p>
|
||
{% if permissions %}
|
||
<div class="table-responsive">
|
||
<table class="table table-bordered table-hover table-striped">
|
||
|
||
<thead>
|
||
<tr>
|
||
<th>PERMISSIONS</th>
|
||
<th>STATUS</th>
|
||
<th>INFO</th>
|
||
<th>REASON IN MANIFEST</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
|
||
{% for perm, desc in permissions.items %}
|
||
<tr>
|
||
<td>
|
||
{{ perm }}
|
||
</td>
|
||
<td>
|
||
{% if desc.status == 'dangerous' %}
|
||
<span class="badge bg-danger">dangerous</span>
|
||
{% else %}
|
||
<span class="badge bg-info">normal</span>
|
||
{% endif %}
|
||
</td>
|
||
<td>
|
||
{{ desc.info}}
|
||
</td>
|
||
<td>
|
||
{{ desc.description }}
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
{% else %}
|
||
<p>
|
||
No Permissions required.
|
||
</p>
|
||
{% endif %}
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end permission ================================== -->
|
||
|
||
<a id="ios_api" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fab fa-apple"></i> iOS API</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
<table class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>API</th>
|
||
<th>FILES</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for rule, details in ios_api.items %}
|
||
<tr>
|
||
<td>
|
||
{{ details.metadata.description }}
|
||
</td>
|
||
<td>
|
||
{% for file_path, lines in details.files.items %}
|
||
<a href="../view_file_ios/?file={{ file_path }}&md5={{ md5 }}&type=ios&lines={{ lines }}"> {{ file_path }}</a>
|
||
</br>
|
||
{% endfor %}
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end ios api analysis ================================== -->
|
||
<a id="transport_security" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-lock"></i> APP TRANSPORT SECURITY (ATS)</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
<table class="table table-bordered table-hover table-striped">
|
||
|
||
<thead>
|
||
<tr>
|
||
<th>NO</th>
|
||
<th>ISSUE</th>
|
||
<th>SEVERITY</th>
|
||
<th>DESCRIPTION</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% if ats_analysis|length > 0 %}
|
||
{% for findings in ats_analysis %}
|
||
<tr>
|
||
<td>{{ forloop.counter }}</td>
|
||
<td>
|
||
{{findings.issue}}
|
||
<td>
|
||
{% if findings.severity == "high" %}
|
||
<span class="badge bg-danger"> high</span>
|
||
{% elif findings.severity == "secure" %}
|
||
<span class="badge bg-success"> secure</span>
|
||
{% elif findings.severity == "warning" %}
|
||
<span class="badge bg-warning"> warning</span>
|
||
{% elif findings.severity == "info" %}
|
||
<span class="badge bg-info"> info</span>
|
||
{% endif %}
|
||
</td>
|
||
<td>
|
||
{{findings.description}}
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
{% else %}
|
||
<tr>
|
||
<td></td>
|
||
<td>
|
||
No ATS exceptions found.
|
||
<td>
|
||
<span class="badge bg-success">secure</span>
|
||
</td>
|
||
<td>
|
||
No insecure connections configured. App Transport Security (ATS) is enabled.
|
||
</td>
|
||
</tr>
|
||
{% endif %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===========================end transport security ================================== -->
|
||
|
||
<a id="code_analysis" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fa fa-code"></i> CODE ANALYSIS</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
<table class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>NO</th>
|
||
<th>ISSUE</th>
|
||
<th>SEVERITY</th>
|
||
<th>STANDARDS</th>
|
||
<th>FILES</th>
|
||
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for rule, details in code_analysis.items %}
|
||
<tr>
|
||
<td>{{ forloop.counter }}</td>
|
||
<td>
|
||
{% if details.metadata|key:"ref" %}
|
||
<a href="{{details.metadata.ref}}" target="_blank" rel="noopener"> {{ details.metadata.description }}</a>
|
||
{% else %}
|
||
{{ details.metadata.description }}
|
||
{% endif %}
|
||
</td>
|
||
<td>
|
||
{% if details.metadata.severity == "high" %}
|
||
<span class="badge bg-danger">high</span>
|
||
{% elif details.metadata.severity == "good" %}
|
||
<span class="badge bg-success">secure</span>
|
||
{% elif details.metadata.severity == "warning" %}
|
||
<span class="badge bg-warning">warning</span>
|
||
{% elif details.metadata.severity == "info" %}
|
||
<span class="badge bg-info">info</span>
|
||
{% endif %}
|
||
</td>
|
||
<td>
|
||
{% if average_cvss %}
|
||
<strong>CVSS V2:</strong>
|
||
{{ details.metadata.cvss }}
|
||
{% if details.metadata.cvss > 6 %}
|
||
(high)
|
||
{% elif details.metadata.cvss == 0 %}
|
||
(info)
|
||
{% elif details.metadata.cvss >= 4 %}
|
||
(medium)
|
||
{% elif details.metadata.cvss < 4 %}
|
||
(low)
|
||
{% endif %}
|
||
</br>
|
||
{% endif %}
|
||
{% if details.metadata.cwe %} <strong>CWE: </strong>{{details.metadata.cwe }}{% endif %}
|
||
{% if details.metadata|key:"owasp-mobile" %}</br> <strong>OWASP Top 10: </strong>{{ details.metadata|key:"owasp-mobile" }}{% endif %}
|
||
{% if details.metadata.masvs %}</br> <strong>OWASP MASVS: </strong>{{ details.metadata.masvs }}{% endif %}
|
||
</td>
|
||
<td>
|
||
{% for file_path, lines in details.files.items %}
|
||
<a href="../view_file_ios/?file={{ file_path }}&md5={{ md5 }}&type=ios&lines={{ lines }}"> {{ file_path }}</a>
|
||
</br>
|
||
{% endfor %}
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end code analysis ================================== -->
|
||
|
||
<a id="file_analysis" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fa fa-file"></i> FILE ANALYSIS</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
<table class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>NO</th>
|
||
<th>ISSUE</th>
|
||
<th>FILES</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for item in file_analysis %}
|
||
<tr>
|
||
<td>{{ forloop.counter }}</td>
|
||
<td>
|
||
{{ item.issue }}
|
||
</td>
|
||
<td>
|
||
{% for file in item.files %}
|
||
{% if file.type %}
|
||
<a href="../view_file_ios/?file={{file.file_path}}&type={{file.type}}&md5={{file.hash}}">{{ file.file_path }}</a>
|
||
{% else %}
|
||
{{ file.file_path }}
|
||
{% endif %}
|
||
<br/>
|
||
{% endfor %}
|
||
</td>
|
||
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end file analysis ================================== -->
|
||
<style>
|
||
#chartdiv {
|
||
width: 100%;
|
||
height: 500px;
|
||
overflow: hidden;
|
||
}
|
||
</style>
|
||
<a id="serverlocations" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-globe-asia"></i> SERVER LOCATIONS</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
<div id="chartdiv"></div>
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end server locations ================================== -->
|
||
<a id="malware_check" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fab fa-searchengin"></i> DOMAIN MALWARE CHECK</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
{% if domains %}
|
||
<table id="table_malware" class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>DOMAIN</th>
|
||
<th>STATUS</th>
|
||
<th>GEOLOCATION</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for domain, details in domains.items %}
|
||
<tr><td>{{domain}}</td><td>
|
||
|
||
{% if details|key:"bad" == "yes" %}
|
||
<span class="badge bg-danger">malware</span><br/>
|
||
<pre>
|
||
<strong>URL: </strong>{{details|key:"domain_or_url"}}
|
||
<strong>IP: </strong><span class="badge bg-danger">{{details|key:"ip"}}</span>
|
||
<strong>Description: </strong>{{details|key:"desc"}}
|
||
</pre>
|
||
{% else %}
|
||
<span class="badge bg-success">ok</span><br/>
|
||
{% endif %}
|
||
</td>
|
||
<td>
|
||
{% if details|key:"geolocation" %}
|
||
<strong>IP: </strong>{{details|key:"geolocation"|key:"ip"}} <br/>
|
||
<strong>Country: </strong>{{details|key:"geolocation"|key:"country_long"}} <br/>
|
||
<strong>Region: </strong>{{details|key:"geolocation"|key:"region"}} <br/>
|
||
<strong>City: </strong>{{details|key:"geolocation"|key:"city"}} <br/>
|
||
<strong>Latitude: </strong>{{details|key:"geolocation"|key:"latitude"}} <br/>
|
||
<strong>Longitude: </strong>{{details|key:"geolocation"|key:"longitude"}} <br/>
|
||
<strong>View: <a target="_blank" href="http://maps.google.com/maps?q={{details|key:"geolocation"|key:"latitude"}},{{details|key:"geolocation"|key:"longitude"}}">Google Map</a>
|
||
|
||
{% else %}
|
||
No Geolocation information available.
|
||
{% endif %}
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end domain malware check ================================== -->
|
||
<a id="urls" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-globe"></i> URLS</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
{% if urls %}
|
||
<table id="table_urls" class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>URL</th>
|
||
<th>FILE</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for urldict in urls %}
|
||
<tr>
|
||
<td>
|
||
{% for u in urldict|key:"urls" %}
|
||
{{ u }} <br/>
|
||
{% endfor %}
|
||
</td>
|
||
<td>
|
||
<a href="../view_file_ios/?file={{urldict|key:"path"}}&md5={{ md5}}&type=ios">{{urldict|key:"path"}}</a>
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end urls ================================== -->
|
||
<a id="firebase" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-database"></i> FIREBASE DATABASE</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
{% if firebase_urls %}
|
||
<table id="table_firebase" class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>FIREBASE URL</th>
|
||
<th>DETAILS</th>
|
||
</tr>
|
||
</thead>
|
||
|
||
<tbody>
|
||
{% for item in firebase_urls %}
|
||
<tr>
|
||
<td>
|
||
{{ item.url }}
|
||
</td>
|
||
<td>
|
||
{% if item.open %}
|
||
<span class="badge bg-danger">high</span><br/>Firebase Database is exposed publicly.
|
||
{% else %}
|
||
<span class="badge bg-primary">info</span><br/>App talks to a Firebase database.
|
||
{% endif %}
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end firebase db ================================== -->
|
||
<a id="emails" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-envelope"></i> EMAILS</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
{% if emails %}
|
||
<table id="table_emails" class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>EMAIL</th>
|
||
<th>FILE</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for email_dict in emails %}
|
||
<tr>
|
||
<td>
|
||
{% for e in email_dict|key:"emails" %}
|
||
{{ e }} <br/>
|
||
{% endfor %}
|
||
</td>
|
||
<td>
|
||
<a href="../?file={{email_dict|key:"path"}}&md5={{ md5}}&type=ios">{{email_dict|key:"path"}}</a>
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end emails ================================== -->
|
||
<a id="trackers" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-user-secret"></i> TRACKERS</strong>
|
||
</p>
|
||
<div class="table-responsive">
|
||
{% if trackers %}
|
||
<table id="table_trackers" class="table table-bordered table-hover table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>TRACKER NAME</th>
|
||
<th>CATEGORIES</th>
|
||
<th>URL</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for trk in trackers|key:"trackers" %}
|
||
<tr>
|
||
<td>
|
||
{{trk.name}}
|
||
</td>
|
||
<td>
|
||
{{trk.categories}}
|
||
</td>
|
||
<td>
|
||
<a target="_blank" href="{{trk.url}}" rel="noopener noreferrer">{{trk.url}}</a>
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end trackers ================================== -->
|
||
<a id="secrets" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="fas fa-key"></i> POSSIBLE HARDCODED SECRETS</strong>
|
||
</p>
|
||
<div class="list-group">
|
||
<p>
|
||
{% for val in secrets %}
|
||
{{ val }}<br/>
|
||
{% endfor %}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end secrets ================================== -->
|
||
<a id="files" class="anchor"></a>
|
||
<section class="content">
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<p>
|
||
<strong><i class="far fa-copy"></i> FILES</strong>
|
||
</p>
|
||
<div class="list-group">
|
||
<p>
|
||
{% for file in files %}
|
||
{{ file}} <br/>
|
||
{% endfor %}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><!-- /.card -->
|
||
</div>
|
||
<!-- end row -->
|
||
</div>
|
||
</section>
|
||
<!-- ===========================end files ================================== -->
|
||
<!-- end of contents -->
|
||
</div>
|
||
|
||
<!-- Modal -->
|
||
|
||
<div class="modal" id="mplist" tabindex="-1" role="dialog">
|
||
<div class="modal-dialog modal-xl">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<h4 class="modal-title">Info.plist</h4>
|
||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||
<span aria-hidden="true">×</span>
|
||
</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<pre><code>
|
||
{{ info_plist }}
|
||
</code></pre>
|
||
</div>
|
||
</div>
|
||
<!-- /.modal-content -->
|
||
</div>
|
||
<!-- /.modal-dialog -->
|
||
</div>
|
||
|
||
|
||
{% endblock %}
|
||
<!--end new UI-->
|
||
{% block extra_scripts %}
|
||
<!-- DataTables -->
|
||
<script src="{% static "adminlte/plugins/datatables/jquery.dataTables.min.js" %} "></script>
|
||
<script src="{% static "adminlte/plugins/datatables-bs4/dataTables.bootstrap4.min.js" %}"></script>
|
||
<script src="{% static "amcharts/core.js" %}"></script>
|
||
<script src="{% static "amcharts/maps.js" %}"></script>
|
||
<script src="{% static "amcharts/worldIndiaLow.js" %}"></script>
|
||
<script src="{% static "amcharts/animated.js" %}"></script>
|
||
<script>
|
||
$(function () {
|
||
// Datatable
|
||
$('table').DataTable({
|
||
"paging": true,
|
||
"lengthChange": false,
|
||
"searching": true,
|
||
"ordering": true,
|
||
"info": true,
|
||
"autoWidth": true,
|
||
"responsive": true,
|
||
});
|
||
});
|
||
// Navbar Active
|
||
$(".nav-link").on("click", function() {
|
||
$(".nav-link").removeClass("active");
|
||
$(this).addClass("active");
|
||
});
|
||
</script>
|
||
<script>
|
||
// Themes begin
|
||
am4core.useTheme(am4themes_animated);
|
||
// Themes end
|
||
|
||
// Create map instance
|
||
var chart = am4core.create("chartdiv", am4maps.MapChart);
|
||
|
||
// Set map definition
|
||
chart.geodata = am4geodata_worldIndiaLow;
|
||
|
||
// Set projection
|
||
chart.projection = new am4maps.projections.Miller();
|
||
|
||
// Create map polygon series
|
||
var polygonSeries = chart.series.push(new am4maps.MapPolygonSeries());
|
||
|
||
// Exclude Antartica
|
||
polygonSeries.exclude = ["AQ"];
|
||
|
||
// Make map load polygon (like country names) data from GeoJSON
|
||
polygonSeries.useGeodata = true;
|
||
|
||
// Configure series
|
||
var polygonTemplate = polygonSeries.mapPolygons.template;
|
||
polygonTemplate.tooltipText = "{name}";
|
||
polygonTemplate.polygon.fillOpacity = 0.6;
|
||
|
||
// Create hover state and set alternative fill color
|
||
var hs = polygonTemplate.states.create("hover");
|
||
hs.properties.fill = chart.colors.getIndex(0);
|
||
|
||
// Add image series
|
||
var imageSeries = chart.series.push(new am4maps.MapImageSeries());
|
||
imageSeries.mapImages.template.propertyFields.longitude = "longitude";
|
||
imageSeries.mapImages.template.propertyFields.latitude = "latitude";
|
||
imageSeries.mapImages.template.tooltipText = "{title}";
|
||
imageSeries.mapImages.template.propertyFields.url = "url";
|
||
|
||
var circle = imageSeries.mapImages.template.createChild(am4core.Circle);
|
||
circle.radius = 3;
|
||
circle.propertyFields.fill = "color";
|
||
|
||
var circle2 = imageSeries.mapImages.template.createChild(am4core.Circle);
|
||
circle2.radius = 3;
|
||
circle2.propertyFields.fill = "color";
|
||
|
||
|
||
circle2.events.on("inited", function(event){
|
||
animateBullet(event.target);
|
||
})
|
||
|
||
function animateBullet(circle) {
|
||
var animation = circle.animate([{ property: "scale", from: 1, to: 5 }, { property: "opacity", from: 1, to: 0 }], 1000, am4core.ease.circleOut);
|
||
animation.events.on("animationended", function(event){
|
||
animateBullet(event.target.object);
|
||
})
|
||
}
|
||
|
||
var colorSet = new am4core.ColorSet();
|
||
imageSeries.data = [
|
||
{% if domains %}
|
||
{% for domain, details in domains.items %}
|
||
{% if details|key:"geolocation" %}
|
||
{
|
||
'title': '{{details|key:"geolocation"|key:"country_long"}}/{{details|key:"geolocation"|key:"region"}}',
|
||
'latitude': {{details|key:"geolocation"|key:"latitude"}},
|
||
'longitude': {{details|key:"geolocation"|key:"longitude"}},
|
||
'color':colorSet.next()
|
||
},
|
||
{% endif %}
|
||
{% endfor %}
|
||
{% endif %}
|
||
];
|
||
</script>
|
||
{% endblock %} |