赞
踩
1.MobSF可以对Android进行快速高效的移动分析。分析漏洞或者恶意代码非常好,而且还有很多其他功能。用python写的 使用Django开发的。
虽然下载挺麻烦。但是找到官网就可以比较顺利。
github上的release版
下载MobSF的环境
官网介绍 也是环境。
官网有个翻译不对劲
(本来是Ubuntu/Debian based Linux是Ubuntu或者是基于Linux的设备,直接翻译成操作指南就很怪。)
2. 因为我就用了Upload并且静态分析所以就分析Upload吧。
在mobsf\MobSF\views\home.py里面
输入的分析request,扫描request,拿到内容类型,对应类型去扫描
def upload(self): request = self.request scanning = Scanning(request) content_type = self.file.content_type file_name = self.file.name logger.info('MIME Type: %s FILE: %s', content_type, file_name) if self.file_type.is_apk(): return scanning.scan_apk() elif self.file_type.is_xapk(): return scanning.scan_xapk() elif self.file_type.is_apks(): return scanning.scan_apks() elif self.file_type.is_zip(): return scanning.scan_zip() elif self.file_type.is_ipa(): return scanning.scan_ipa() elif self.file_type.is_appx(): return scanning.scan_appx()
转到下面这个apk
def scan_apk(self):
"""Android APK."""
md5 = handle_uploaded_file(self.file, '.apk')
data = {
'analyzer': 'static_analyzer',
'status': 'success',
'hash': md5,
'scan_type': 'apk',
'file_name': self.file_name,
}
add_to_recent_scan(data)
logger.info('Performing Static Analysis of Android APK')
return data
取了md5,然后把数据放到data里面,添加最近扫描然后返回data数据
接下来是静态分析。
Mobile-Security-Framework-MobSFmaster\mobsf\StaticAnalyzer\views\android\static_analyzer.py
if typ == 'apk':
app_dic['app_file'] = app_dic['md5'] + '.apk' # NEW FILENAME
app_dic['app_path'] = (
app_dic['app_dir'] / app_dic['app_file']).as_posix()
app_dic['app_dir'] = app_dic['app_dir'].as_posix() + '/'
# Check if in DB
# pylint: disable=E1101
db_entry = StaticAnalyzerAndroid.objects.filter(
MD5=app_dic['md5'])
if db_entry.exists() and not rescan:
context = get_context_from_db_entry(db_entry)
else:
如果文件类型是apkname就先把信息放好,然后检查数据库里有没有之前存过。
如果是第一次那就接着
app_dic['size'] = str(file_size(app_dic['app_path'])) + 'MB' # FILE SIZE
app_dic['sha1'], app_dic[
'sha256'] = hash_gen(app_dic['app_path'])
app_dic['files'] = unzip(
app_dic['app_path'], app_dic['app_dir'])
logger.info('APK Extracted')
app_dic['certz'] = get_hardcoded_cert_keystore(app_dic[
'files'])
提取Path,然后解压。得到硬编码证书库(大概)
解析Manifest.xml文件
# Manifest XML
mani_file, mani_xml = get_manifest(
app_dic['app_path'],
app_dic['app_dir'],
app_dic['tools_dir'],
'',
True,
)
app_dic['manifest_file'] = mani_file
app_dic['parsed_xml'] = mani_xml
得到app名字
# get app_name
app_dic['real_name'] = get_app_name(
app_dic['app_path'],
app_dic['app_dir'],
app_dic['tools_dir'],
True,
)
拿到icon图标
# Get icon
res_path = os.path.join(app_dic['app_dir'], 'res')
app_dic['icon_hidden'] = True
manifest_analysis是对Manifest解析比如权限啥的。
get_app_details是知道app在应用商店的细节。
# Set Manifest link
app_dic['mani'] = ('../manifest_view/?md5='
+ app_dic['md5']
+ '&type=apk&bin=1')
man_data_dic = manifest_data(app_dic['parsed_xml'])
app_dic['playstore'] = get_app_details(
man_data_dic['packagename'])
man_an_dic = manifest_analysis(
app_dic['parsed_xml'],
man_data_dic,
'',
app_dic['app_dir'],
)
分析elf和证书
elf_dict = elf_analysis(app_dic['app_dir'])
cert_dic = cert_info(
app_dic['app_dir'],
app_dic['app_file'])
使用了apkid来检测用了啥混淆封装编译器。
apkid_results = apkid_analysis(app_dic[
'app_dir'], app_dic['app_path'], app_dic['app_name'])
检测跟踪器
tracker = Trackers.Trackers(
app_dic['app_dir'], app_dic['tools_dir'])
apk转java,java转smali,分析代码
apk_2_java(app_dic['app_path'], app_dic['app_dir'],
app_dic['tools_dir'])
dex_2_smali(app_dic['app_dir'], app_dic['tools_dir'])
code_an_dic = code_analysis(
app_dic['app_dir'],
'apk',
app_dic['manifest_file'])
得到string
# Get the strings from android resource and shared objects string_res = strings_from_apk( app_dic['app_file'], app_dic['app_dir'], elf_dict['elf_strings']) if string_res: app_dic['strings'] = string_res['strings'] app_dic['secrets'] = string_res['secrets'] code_an_dic['urls_list'].extend( string_res['urls_list']) code_an_dic['urls'].extend(string_res['url_nf']) code_an_dic['emails'].extend(string_res['emails_nf']) else: app_dic['strings'] = [] app_dic['secrets'] = []
检查有没有用FireBase
提升app功能的工具库
# Firebase DB Check
code_an_dic['firebase'] = firebase_analysis(
list(set(code_an_dic['urls_list'])))
检查存在的域名并且检查恶意软件
# Domain Extraction and Malware Check
logger.info(
'Performing Malware Check on extracted Domains')
code_an_dic['domains'] = MalwareDomainCheck().scan(
list(set(code_an_dic['urls_list'])))
复制图标
# Copy App icon
copy_icon(app_dic['md5'], app_dic['icon_path'])
app_dic['zipped'] = 'apk'
然后放到数据库里。
好多
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。