mirror of
https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
synced 2026-10-11 22:50:09 +00:00
HOTFIX: fix IPA download support
This commit is contained in:
+1
-2
@@ -20,7 +20,6 @@ from mobsf.StaticAnalyzer.views.common import (
|
||||
)
|
||||
from mobsf.StaticAnalyzer.views.android import (
|
||||
find,
|
||||
generate_downloads,
|
||||
manifest_view,
|
||||
source_tree,
|
||||
view_source,
|
||||
@@ -81,6 +80,7 @@ if settings.API_ONLY == '0':
|
||||
re_path(r'^upload/$', home.Upload.as_view),
|
||||
re_path(r'^download/', home.download),
|
||||
re_path(r'^download_scan/', home.download_apk),
|
||||
re_path(r'^generate_downloads/$', home.generate_download),
|
||||
re_path(r'^about$', home.about, name='about'),
|
||||
re_path(r'^donate$', home.donate, name='donate'),
|
||||
re_path(r'^api_docs$', home.api_docs, name='api_docs'),
|
||||
@@ -98,7 +98,6 @@ if settings.API_ONLY == '0':
|
||||
re_path(r'^source_code/$', source_tree.run, name='tree_view'),
|
||||
re_path(r'^view_file/$', view_source.run, name='view_source'),
|
||||
re_path(r'^find/$', find.run, name='find_files'),
|
||||
re_path(r'^generate_downloads/$', generate_downloads.run),
|
||||
re_path(r'^manifest_view/$', manifest_view.run),
|
||||
# IOS
|
||||
re_path(r'^static_analyzer_ios/$', ios_sa.static_analyzer_ios),
|
||||
|
||||
@@ -12,7 +12,10 @@ from wsgiref.util import FileWrapper
|
||||
from django.conf import settings
|
||||
from django.core.paginator import Paginator
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import (
|
||||
redirect,
|
||||
render,
|
||||
)
|
||||
from django.template.defaulttags import register
|
||||
|
||||
from mobsf.MobSF.forms import FormUtil, UploadFileForm
|
||||
@@ -296,6 +299,49 @@ def download(request):
|
||||
return HttpResponse(status=404)
|
||||
|
||||
|
||||
def generate_download(request):
|
||||
"""Generate downloads for uploaded binaries/source."""
|
||||
try:
|
||||
allowed = ('apk', 'ipa', 'smali', 'java', 'jar', 'aar', 'so')
|
||||
logger.info('Generating Downloads')
|
||||
md5 = request.GET['hash']
|
||||
file_type = request.GET['file_type']
|
||||
match = re.match('^[0-9a-f]{32}$', md5)
|
||||
if (not match
|
||||
or file_type not in allowed):
|
||||
msg = 'Invalid download type or hash'
|
||||
logger.exception(msg)
|
||||
return print_n_send_error_response(request, msg)
|
||||
app_dir = Path(settings.UPLD_DIR) / md5
|
||||
dwd_dir = Path(settings.DWD_DIR)
|
||||
file_name = ''
|
||||
if file_type == 'java':
|
||||
# For Java zipped source code
|
||||
directory = app_dir / 'java_source'
|
||||
dwd_file = dwd_dir / f'{md5}-java'
|
||||
shutil.make_archive(
|
||||
dwd_file.as_posix(), 'zip', directory.as_posix())
|
||||
file_name = f'{md5}-java.zip'
|
||||
elif file_type == 'smali':
|
||||
# For Smali zipped source code
|
||||
directory = app_dir / 'smali_source'
|
||||
dwd_file = dwd_dir / f'{md5}-smali'
|
||||
shutil.make_archive(
|
||||
dwd_file.as_posix(), 'zip', directory.as_posix())
|
||||
file_name = f'{md5}-smali.zip'
|
||||
elif file_type in ('apk', 'ipa', 'jar', 'aar', 'so'):
|
||||
# Binaries
|
||||
file_name = f'{md5}.{file_type}'
|
||||
src = app_dir / file_name
|
||||
dst = dwd_dir / file_name
|
||||
shutil.copy2(src.as_posix(), dst.as_posix())
|
||||
return redirect(f'/download/{file_name}')
|
||||
except Exception:
|
||||
msg = 'Generating Downloads'
|
||||
logger.exception(msg)
|
||||
return print_n_send_error_response(request, msg)
|
||||
|
||||
|
||||
def delete_scan(request, api=False):
|
||||
"""Delete Scan from DB and remove the scan related files."""
|
||||
try:
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
# -*- coding: utf_8 -*-
|
||||
"""Generate Zipped downloads."""
|
||||
|
||||
import logging
|
||||
import re
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
from django.shortcuts import redirect
|
||||
|
||||
from mobsf.MobSF.utils import print_n_send_error_response
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def run(request):
|
||||
"""Generate downloads for apk, jar, aar, so, java zip and smali zip."""
|
||||
try:
|
||||
allowed = ('apk', 'smali', 'java', 'jar', 'aar', 'so')
|
||||
logger.info('Generating Downloads')
|
||||
md5 = request.GET['hash']
|
||||
file_type = request.GET['file_type']
|
||||
match = re.match('^[0-9a-f]{32}$', md5)
|
||||
if (not match
|
||||
or file_type not in allowed):
|
||||
msg = 'Invalid download type or hash'
|
||||
logger.exception(msg)
|
||||
return print_n_send_error_response(request, msg)
|
||||
app_dir = Path(settings.UPLD_DIR) / md5
|
||||
dwd_dir = Path(settings.DWD_DIR)
|
||||
file_name = ''
|
||||
if file_type == 'java':
|
||||
# For Java zipped source code
|
||||
directory = app_dir / 'java_source'
|
||||
dwd_file = dwd_dir / f'{md5}-java'
|
||||
shutil.make_archive(
|
||||
dwd_file.as_posix(), 'zip', directory.as_posix())
|
||||
file_name = f'{md5}-java.zip'
|
||||
elif file_type == 'smali':
|
||||
# For Smali zipped source code
|
||||
directory = app_dir / 'smali_source'
|
||||
dwd_file = dwd_dir / f'{md5}-smali'
|
||||
shutil.make_archive(
|
||||
dwd_file.as_posix(), 'zip', directory.as_posix())
|
||||
file_name = f'{md5}-smali.zip'
|
||||
elif file_type in ('apk', 'ipa', 'jar', 'aar', 'so'):
|
||||
# Binaries
|
||||
file_name = f'{md5}.{file_type}'
|
||||
src = app_dir / file_name
|
||||
dst = dwd_dir / file_name
|
||||
shutil.copy2(src.as_posix(), dst.as_posix())
|
||||
return redirect(f'/download/{file_name}')
|
||||
except Exception:
|
||||
msg = 'Generating Downloads'
|
||||
logger.exception(msg)
|
||||
return print_n_send_error_response(request, msg)
|
||||
Reference in New Issue
Block a user