mirror of
https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
synced 2026-10-11 22:50:09 +00:00
187 lines
6.2 KiB
Python
Executable File
187 lines
6.2 KiB
Python
Executable File
# -*- coding: utf_8 -*-
|
|
"""MobSF REST API V 1."""
|
|
|
|
from django.http import HttpResponse
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from mobsf.MobSF.views.helpers import request_method
|
|
from mobsf.MobSF.views.home import RecentScans, Upload, delete_scan
|
|
from mobsf.MobSF.views.api.api_middleware import make_api_response
|
|
from mobsf.StaticAnalyzer.views.android import view_source
|
|
from mobsf.StaticAnalyzer.views.android.static_analyzer import static_analyzer
|
|
from mobsf.StaticAnalyzer.views.ios import view_source as ios_view_source
|
|
from mobsf.StaticAnalyzer.views.ios.static_analyzer import static_analyzer_ios
|
|
from mobsf.StaticAnalyzer.views.shared_func import (
|
|
compare_apps,
|
|
pdf,
|
|
)
|
|
from mobsf.StaticAnalyzer.views.windows import windows
|
|
|
|
|
|
@request_method(['POST'])
|
|
@csrf_exempt
|
|
def api_upload(request):
|
|
"""POST - Upload API."""
|
|
upload = Upload(request)
|
|
resp, code = upload.upload_api()
|
|
return make_api_response(resp, code)
|
|
|
|
|
|
@request_method(['GET'])
|
|
@csrf_exempt
|
|
def api_recent_scans(request):
|
|
"""GET - get recent scans."""
|
|
scans = RecentScans(request)
|
|
resp = scans.recent_scans()
|
|
if 'error' in resp:
|
|
return make_api_response(resp, 500)
|
|
else:
|
|
return make_api_response(resp, 200)
|
|
|
|
|
|
@request_method(['POST'])
|
|
@csrf_exempt
|
|
def api_scan(request):
|
|
"""POST - Scan API."""
|
|
params = {'scan_type', 'hash', 'file_name'}
|
|
if set(request.POST) >= params:
|
|
scan_type = request.POST['scan_type']
|
|
# APK, Android ZIP and iOS ZIP
|
|
if scan_type in {'xapk', 'apk', 'zip'}:
|
|
resp = static_analyzer(request, True)
|
|
if 'type' in resp:
|
|
# For now it's only ios_zip
|
|
request.POST._mutable = True
|
|
request.POST['scan_type'] = 'ios'
|
|
resp = static_analyzer_ios(request, True)
|
|
if 'error' in resp:
|
|
response = make_api_response(resp, 500)
|
|
else:
|
|
response = make_api_response(resp, 200)
|
|
# IPA
|
|
elif scan_type == 'ipa':
|
|
resp = static_analyzer_ios(request, True)
|
|
if 'error' in resp:
|
|
response = make_api_response(resp, 500)
|
|
else:
|
|
response = make_api_response(resp, 200)
|
|
# APPX
|
|
elif scan_type == 'appx':
|
|
resp = windows.staticanalyzer_windows(request, True)
|
|
if 'error' in resp:
|
|
response = make_api_response(resp, 500)
|
|
else:
|
|
response = make_api_response(resp, 200)
|
|
else:
|
|
response = make_api_response(
|
|
{'error': 'Missing Parameters'}, 422)
|
|
return response
|
|
|
|
|
|
@request_method(['POST'])
|
|
@csrf_exempt
|
|
def api_delete_scan(request):
|
|
"""POST - Delete a Scan."""
|
|
if 'hash' in request.POST:
|
|
resp = delete_scan(request, True)
|
|
if 'error' in resp:
|
|
response = make_api_response(resp, 500)
|
|
else:
|
|
response = make_api_response(resp, 200)
|
|
else:
|
|
response = make_api_response(
|
|
{'error': 'Missing Parameters'}, 422)
|
|
return response
|
|
|
|
|
|
@request_method(['POST'])
|
|
@csrf_exempt
|
|
def api_pdf_report(request):
|
|
"""Generate and Download PDF."""
|
|
params = {'hash'}
|
|
if set(request.POST) == params:
|
|
resp = pdf(request, api=True)
|
|
if 'error' in resp:
|
|
if resp.get('error') == 'Invalid scan hash':
|
|
response = make_api_response(resp, 400)
|
|
else:
|
|
response = make_api_response(resp, 500)
|
|
elif 'pdf_dat' in resp:
|
|
response = HttpResponse(
|
|
resp['pdf_dat'], content_type='application/pdf')
|
|
response['Access-Control-Allow-Origin'] = '*'
|
|
elif resp.get('report') == 'Report not Found':
|
|
response = make_api_response(resp, 404)
|
|
else:
|
|
response = make_api_response(
|
|
{'error': 'PDF Generation Error'}, 500)
|
|
else:
|
|
response = make_api_response(
|
|
{'error': 'Missing Parameters'}, 422)
|
|
return response
|
|
|
|
|
|
@request_method(['POST'])
|
|
@csrf_exempt
|
|
def api_json_report(request):
|
|
"""Generate JSON Report."""
|
|
params = {'hash'}
|
|
if set(request.POST) == params:
|
|
resp = pdf(request, api=True, jsonres=True)
|
|
if 'error' in resp:
|
|
if resp.get('error') == 'Invalid scan hash':
|
|
response = make_api_response(resp, 400)
|
|
else:
|
|
response = make_api_response(resp, 500)
|
|
elif 'report_dat' in resp:
|
|
response = make_api_response(resp['report_dat'], 200)
|
|
elif resp.get('report') == 'Report not Found':
|
|
response = make_api_response(resp, 404)
|
|
else:
|
|
response = make_api_response(
|
|
{'error': 'JSON Generation Error'}, 500)
|
|
else:
|
|
response = make_api_response(
|
|
{'error': 'Missing Parameters'}, 422)
|
|
return response
|
|
|
|
|
|
@request_method(['POST'])
|
|
@csrf_exempt
|
|
def api_view_source(request):
|
|
"""View Source for android & ios source file."""
|
|
params = {'file', 'type', 'hash'}
|
|
if set(request.POST) >= params:
|
|
if request.POST['type'] in {'eclipse', 'studio',
|
|
'apk', 'java', 'smali'}:
|
|
resp = view_source.run(request, api=True)
|
|
else:
|
|
resp = ios_view_source.run(request, api=True)
|
|
if 'error' in resp:
|
|
response = make_api_response(resp, 500)
|
|
else:
|
|
response = make_api_response(resp, 200)
|
|
else:
|
|
response = make_api_response({'error': 'Missing Parameters'}, 422)
|
|
return response
|
|
|
|
|
|
@request_method(['POST'])
|
|
@csrf_exempt
|
|
def api_compare(request):
|
|
"""Compare 2 apps."""
|
|
params = {'hash1', 'hash2'}
|
|
if set(request.POST) >= params:
|
|
resp = compare_apps(
|
|
request,
|
|
request.POST['hash1'],
|
|
request.POST['hash2'],
|
|
True)
|
|
if 'error' in resp:
|
|
response = make_api_response(resp, 500)
|
|
else:
|
|
response = make_api_response(resp, 200)
|
|
else:
|
|
response = make_api_response({'error': 'Missing Parameters'}, 422)
|
|
return response
|