Merge remote-tracking branch 'MobSF/master'

This commit is contained in:
Matan Dobrushin
2018-05-11 15:21:20 +03:00
9 changed files with 126 additions and 29 deletions
+34 -1
View File
@@ -22,7 +22,7 @@ MALWARE_DB_DIR = TOOLS_DIR = os.path.join(
settings.BASE_DIR, 'MalwareAnalyzer/malwaredb/')
def apkid_analysis(app_dir):
def apkid_analysis(app_dir, apk_file):
"""APKiD Analysis of DEX file"""
if settings.APKID_ENABLED:
dex_file = app_dir + 'classes.dex'
@@ -79,6 +79,39 @@ def apkid_analysis(app_dir):
else:
apkid_dict["manipulator"] = ""
apkid_dict["result"] = ""
print("[INFO] APKiD Analysis on apk file")
result = apkid.scan(apk_file, 30, True)
if "files" in result:
apkid_dict["result"] = result["files"][0]["results"]
if "apkid_version" in result:
apkid_dict["apkid_version"] = result["apkid_version"]
if "anti_vm" in apkid_dict["result"]:
apkid_dict["anti_vm"] = apkid_dict["result"]["anti_vm"]
if "compiler" in apkid_dict["result"]:
apkid_dict["compiler"] = apkid_dict["result"]["compiler"]
if "packer" in apkid_dict["result"]:
apkid_dict["packer"] = apkid_dict["result"]["packer"]
if "obfuscator" in apkid_dict["result"]:
apkid_dict["obfuscator"] = apkid_dict["result"]["obfuscator"]
if "abnormal" in apkid_dict["result"]:
apkid_dict["abnormal"] = apkid_dict["result"]["abnormal"]
if "anti_disassembly" in apkid_dict["result"]:
apkid_dict["anti_disassembly"] = apkid_dict[
"result"]["anti_disassembly"]
if "dropper" in apkid_dict["result"]:
apkid_dict["dropper"] = apkid_dict["result"]["dropper"]
if "manipulator" in apkid_dict["result"]:
apkid_dict["manipulator"] = apkid_dict["result"]["manipulator"]
apkid_dict["result"] = ""
return apkid_dict
return {}
+2 -2
View File
@@ -151,11 +151,11 @@ except NameError:
Exception('Please create a %s file with random characters \
to generate your secret key!' % SECRET_FILE)
# Run Once
# Windows Setup
windows_config_local(MobSF_HOME)
utils.make_migrations(BASE_DIR)
utils.migrate(BASE_DIR)
utils.kali_fix(BASE_DIR)
# Windows Setup
windows_config_local(MobSF_HOME)
#=============================================
+85 -21
View File
@@ -1,4 +1,5 @@
import os
import signal
import platform
import random
import subprocess
@@ -77,13 +78,14 @@ def printMobSFverison():
print("Dist: " + str(platform.dist()))
FindJava(True)
FindVbox(True)
check_basic_env()
adb_binary_or32bit_support()
check_update()
def check_update():
try:
print("\n[INFO] Checking for Update.")
print("[INFO] Checking for Update.")
github_url = "https://raw.githubusercontent.com/MobSF/Mobile-Security-Framework-MobSF/master/MobSF/settings.py"
try:
proxies, verify = upstream_proxy('https')
@@ -232,26 +234,50 @@ def FindVbox(debug=False):
if debug:
PrintException("[ERROR] Cannot find VirtualBox path.")
# Maintain JDK Version
JAVA_VER = '1.7|1.8|1.9|2.0|2.1|2.2|2.3'
def FindJava(debug=False):
""" Find Java """
# Maintain JDK Version
java_versions = '1.7|1.8|1.9|2.0|2.1|2.2|2.3|8|9'
"""
This code is needed because some people are not capable
of setting java path :-(
"""
win_java_paths = [
"C:/Program Files/Java/",
"C:/Program Files (x86)/Java/",
"D:/Program Files/Java/",
"D:/Program Files (x86)/Java/",
"E:/Program Files/Java/",
"E:/Program Files (x86)/Java/",
"F:/Program Files/Java/",
"F:/Program Files (x86)/Java/",
"G:/Program Files/Java/",
"G:/Program Files (x86)/Java/",
"H:/Program Files/Java/",
"H:/Program Files (x86)/Java/",
"I:/Program Files/Java/",
"I:/Program Files (x86)/Java/",
]
try:
err_msg1 = "[ERROR] Oracle JDK 1.7 or above is not found!"
if len(settings.JAVA_DIRECTORY) > 0 and isDirExists(settings.JAVA_DIRECTORY):
return settings.JAVA_DIRECTORY
if platform.system() == "Windows":
if isDirExists(settings.JAVA_DIRECTORY):
if settings.JAVA_DIRECTORY.endswith("/"):
return settings.JAVA_DIRECTORY
elif settings.JAVA_DIRECTORY.endswith("\\"):
return settings.JAVA_DIRECTORY
else:
return settings.JAVA_DIRECTORY + "/"
elif platform.system() == "Windows":
if debug:
print("\n[INFO] Finding JDK Location in Windows....")
# JDK 7 jdk1.7.0_17/bin/
for java_path in ["C:/Program Files/Java/",
"C:/Program Files (x86)/Java/"]:
for java_path in win_java_paths:
if os.path.isdir(java_path):
for dirname in os.listdir(java_path):
if "jdk" in dirname:
win_java_path = java_path + dirname + "/bin/"
args = [win_java_path + "java", "--version"]
args = [win_java_path + "java", "-version"]
dat = RunProcess(args)
if "java" in dat:
if debug:
@@ -262,7 +288,7 @@ def FindJava(debug=False):
java_home = os.environ.get(env)
if java_home and os.path.isdir(java_home):
win_java_path = java_home + "/bin/"
args = [win_java_path + "java", "--version"]
args = [win_java_path + "java", "-version"]
dat = RunProcess(args)
if "java" in dat:
if debug:
@@ -274,31 +300,42 @@ def FindJava(debug=False):
return "java"
else:
if debug:
print("\n[INFO] Finding JDK Location in Linux/MAC....")
MAC_LINUX_JAVA = "/usr/bin/"
args = [MAC_LINUX_JAVA + "java"]
print("[INFO] Finding JDK Location in Linux/MAC....")
# Check in Environment Variables
for env in ["JDK_HOME", "JAVA_HOME"]:
java_home = os.environ.get(env)
if java_home and os.path.isdir(java_home):
lm_java_path = java_home + "/bin/"
args = [lm_java_path + "java", "-version"]
dat = RunProcess(args)
if "oracle" in dat:
if debug:
print("\n[INFO] Oracle Java is installed!")
return lm_java_path
mac_linux_java_dir = "/usr/bin/"
args = [mac_linux_java_dir + "java"]
dat = RunProcess(args)
if "oracle" in dat:
args = [MAC_LINUX_JAVA + "java", '-version']
args = [mac_linux_java_dir + "java", '-version']
dat = RunProcess(args)
f_line = dat.split("\n")[0]
if re.findall(JAVA_VER, f_line):
if re.findall(java_versions, f_line):
if debug:
print("\n[INFO] JDK 1.7 or above is available")
return MAC_LINUX_JAVA
print("[INFO] JDK 1.7 or above is available")
return mac_linux_java_dir
else:
err_msg = "[ERROR] Please install Oracle JDK 1.7 or above"
if debug:
print(Color.BOLD + Color.RED + err_msg + Color.END)
return ""
return "java"
else:
if debug:
print(Color.BOLD + Color.RED + err_msg1 + Color.END)
return ""
return "java"
except:
if debug:
PrintException("[ERROR] Oracle Java (JDK >=1.7) is not found!")
return ""
return "java"
def RunProcess(args):
@@ -533,3 +570,30 @@ def adb_binary_or32bit_support():
print(Color.BOLD + Color.ORANGE + msg + Color.END)
else:
print(msg)
def check_basic_env():
"""Check if we have basic env for MobSF to run"""
print("[INFO] MobSF Basic Environment Check")
try:
import capfuzz
except ImportError:
PrintException("[ERROR] CapFuzz not installed!")
os.kill(os.getpid(), signal.SIGTERM)
try:
import lxml
except ImportError:
PrintException("[ERROR] lxml is not installed!")
os.kill(os.getpid(), signal.SIGTERM)
if platform.system() == "Windows":
java = settings.JAVA_PATH + 'java.exe'
else:
java = settings.JAVA_PATH + 'java'
if not isFileExists(java):
print("[ERROR] Oracle Java is not available or `JAVA_DIRECTORY` in settings.py is configured incorrectly!")
print("JAVA_DIRECTORY=%s" % settings.JAVA_DIRECTORY)
print('''Example Configuration:
JAVA_DIRECTORY = "C:/Program Files/Java/jdk1.7.0_17/bin/"
JAVA_DIRECTORY = "/usr/bin/"
''')
os.kill(os.getpid(), signal.SIGTERM)
Binary file not shown.
+1 -1
View File
@@ -139,7 +139,7 @@ def jar_2_java(app_dir, tools_dir):
):
jd_path = settings.CFR_DECOMPILER_BINARY
else:
jd_path = os.path.join(tools_dir, 'cfr_0_119.jar')
jd_path = os.path.join(tools_dir, 'cfr_0_128.jar')
args = [settings.JAVA_PATH + 'java', '-jar',
jd_path, jar_path, '--outputdir', output]
elif settings.DECOMPILER == "procyon":
@@ -1292,7 +1292,7 @@ def get_manifest_file(app_path, app_dir, tools_dir):
if len(settings.APKTOOL_BINARY) > 0 and isFileExists(settings.APKTOOL_BINARY):
apktool_path = settings.APKTOOL_BINARY
else:
apktool_path = os.path.join(tools_dir, 'apktool_2.3.2.jar')
apktool_path = os.path.join(tools_dir, 'apktool_2.3.3.jar')
output_dir = os.path.join(app_dir, "apktool_out")
args = [settings.JAVA_PATH + 'java', '-jar',
apktool_path, "--match-original", "-f", "-s", "d", app_path, "-o", output_dir]
@@ -184,7 +184,7 @@ def static_analyzer(request, api=False):
cert_dic = cert_info(
app_dic['app_dir'], app_dic['tools_dir'])
apkid_results = apkid_analysis(app_dic[
'app_dir'])
'app_dir'], app_dic['app_path'])
dex_2_jar(app_dic['app_path'], app_dic[
'app_dir'], app_dic['tools_dir'])
dex_2_smali(app_dic['app_dir'], app_dic['tools_dir'])
+2 -2
View File
@@ -1,7 +1,7 @@
Django==2.0.4
Django==2.0.5
pdfkit==0.6.1
configparser==3.5.0
androguard==3.1.2
androguard==3.2.0
lxml==4.2.1
rsa==3.4.2
git+https://github.com/MobSF/CapFuzz.git