移动安全--44--MobSF-v3.0源代码分析【长文巨献】(转载)
一、项目说明
分析日期:2020-01-17
源码地址:https://github.com/MobSF/Mobile-Security-Framework-MobSF
关于如何搭建源码分析环境,请阅读我的另一篇博客:MobSF移动安全框架实践–基于3.0beta版
移动安全框架(MobSF)是一种自动化的移动应用程序(Android/iOS/Windows)测试框架,能够执行静态、动态和恶意软件分析。 它可用于Android、iOS和Windows移动应用程序的有效和快速安全分析,并支持二进制文件(APK,IPA和APPX)和压缩源代码。 MobSF可以在运行时为Android应用程序进行动态应用程序测试,并具有由CapFuzz(一种特定于Web API的安全扫描程序)提供支持的Web API模糊测试。MobSF旨在使您的CI/CD或DevSecOps管道集成无缝。
二、项目入口
项目结构如下:
我们首先浏览项目源码,找到项目入口,然后从入口开始分析,这在分析任何源码都是一样的。
由于MobSF使用Django框架开发的,我们浏览源码后可以看到,入口在/MobSF/urls.py中,通过浏览器访问相应的URL地址,功能映射到对应的代码逻辑。
代码如下所示:
为了便于阅读,我将备注重写为中文备注
urlpatterns = [
# 一般功能URL
url(r'^$', home.index, name='home'),
url(r'^upload/$', home.Upload.as_view),
url(r'^download/', home.download),
url(r'^about$', home.about, name='about'),
url(r'^api_docs$', home.api_docs, name='api_docs'),
url(r'^recent_scans/$', home.recent_scans, name='recent'),
url(r'^delete_scan/$', home.delete_scan),
url(r'^search$', home.search),
url(r'^error/$', home.error, name='error'),
url(r'^not_found/$', home.not_found),
url(r'^zip_format/$', home.zip_format),
url(r'^mac_only/$', home.mac_only),
# 静态分析URL
# Android应用静态分析URL
url(r'^StaticAnalyzer/$', android_sa.static_analyzer),
url(r'^ViewSource/$', view_source.run),
url(r'^Smali/$', smali.run),
url(r'^Java/$', java.run),
url(r'^Find/$', find.run),
url(r'^generate_downloads/$', generate_downloads.run),
url(r'^ManifestView/$', manifest_view.run),
# IOS应用静态分析URL
url(r'^StaticAnalyzer_iOS/$', ios_sa.static_analyzer_ios),
url(r'^ViewFile/$', io_view_source.run),
# Windows应用静态分析URL
url(r'^StaticAnalyzer_Windows/$', windows.staticanalyzer_windows),
# PDF报告
url(r'^PDF/$', shared_func.pdf),
# 应用比较
url(r'^compare/(?P<hash1>[0-9a-f]{32})/(?P<hash2>[0-9a-f]{32})/$',
shared_func.compare_apps),
# 动态分析URL
url(r'^dynamic_analysis/$',
dz.dynamic_analysis,
name='dynamic'),
url(r'^android_dynamic/$',
dz.dynamic_analyzer,
name='dynamic_analyzer'),
url(r'^httptools$',
dz.httptools_start,
name='httptools'),
url(r'^logcat/$', dz.logcat),
# Android设备操作
url(r'^mobsfy/$', operations.mobsfy),
url(r'^screenshot/$', operations.take_screenshot),
url(r'^execute_adb/$', operations.execute_adb),
url(r'^screen_cast/$', operations.screen_cast),
url(r'^touch_events/$', operations.touch),
url(r'^get_component/$', operations.get_component),
url(r'^mobsf_ca/$', operations.mobsf_ca