HOTFIX: fix IPA download support

This commit is contained in:
Ajin.Abraham
2023-08-16 14:42:30 -07:00
parent 2b7156c7cc
commit b1be6f54da
3 changed files with 48 additions and 60 deletions
+1 -2
View File
@@ -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),
+47 -1
View File
@@ -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)