Android SDK
https://www.androiddevtools.cn/
https://stackoverflow.com/questions/2677431/where-to-install-android-sdk-on-mac-os-x
https://www.androidcentral.com/installing-android-sdk-windows-mac-and-linux-tutorial
1、MacOS使用brew安装
1 | brew cask install android-sdk |
You will have to add the ANDROID_HOME
to profile (.zshrc or .bashrc)
1 | export ANDROID_HOME=/usr/local/share/android-sdk |
该方法安装时会出现未验证证书问题,参考下文解决方法。
2、通过Android Studio安装,参考链接
手工安装SDK环境
- SDK tools
- SDK platform-tools
- SDK build-tools(可选)
国内镜像:https://mirrors.cloud.tencent.com/AndroidSDK/
1、sdk tools
1 | wget https://dl.google.com/android/repository/sdk-tools-darwin-4333796.zip |
2、sdk platform-tools
1 | 下载地址 https://developer.android.com/studio/releases/platform-tools |
参考 安装adb调试工具
3、sdk build tools(可选)
build-tools_r28.0.2:android9
build-tools_r30.0.1: android11
下载对应压缩包,解压后放到/usr/local/opt/android-sdk/build-tools
最后添加环境变量
1 | export ANDROID_SDK_ROOT=/usr/local/opt/android-sdk |
或者
1 | export ANDROID_HOME=/usr/local/opt/android-sdk |
添加完环境变量后测试命令
1 | $ adb version |
安装SDK时可能遇到的问题
解决未验证license问题
1 | File /Users/ssooking/.android/repositories.cfg could not be loaded. |
解决方法
1 | cd /usr/local/opt/android-sdk/tools/bin |
一路输入y,接受证书。成功后,/usr/local/opt/android-sdk/
会生成licenses目录
编译项目时找不到SDK路径
1 | FAILURE: Build failed with an exception. |
这个问题是找不到SDK路径,可以到 android/ 文件夹下找到 local.properties 文件,如果没有就创建一个,然后在里面修改对应的sdk路径。修改local.properties
1 | sdk.dir = /usr/local/opt/android-sdk/ |
MacOS ADB问题
如果您的Mac已安装EasyTether应用程序,则可能会干扰ADB。
在此页面中,您可以执行以下命令:
1 | sudo kextunload /System/Library/Extensions/EasyTetherUSBEthernet.kext |
这将卸载您的EasyTether扩展。如果您需要重新启用EasyTether进行网络共享,可以使用:
1 | sudo kextload /System/Library/Extensions/EasyTetherUSBEthernet.kext |
反编译工具
常用工具
无论是什么平台,反编译APK都离不开apktool、dex2jar、jd-gui :
- apktool:一款Apk逆向工具,有编译、反编译、签名等功能。
- dex2jar:作用主要是将dex文件转换成jar文件,转换成jar借助JD-GUI来查看反编译class代码;
- jd-gui:一款Java反编译器GUI,可以查看到dex反编译后的class代码,通常需要配合dex2jar使用;
- objdump:反编译Android原生库(C/C++),以及ARM平台的的二进制可执行文件
- https://github.com/Jermic/Android-Crack-Tool
其他工具:jadx-gui、classyshark、bytecode-viewer
Mac安装
1 | # Install apktool |
apktool会被安装在:
/usr/local/Cellar/apktool/[version]/
linked to /usr/local/bin/apktool
为了使用方便,可以给dex2jar设置软链接:
1 | sudo mv dex2jar-2.0 /usr/local/Cellar/ |
Android抓包工具
手机端
PC端
- BurpSuite
- Charles
- Fildder
抓https需要先安装工具提供的证书
1.启动Burp Suite,Proxy > Options > Import/Export CA certificate
以der格式导出Burp证书,保存为.cer/.crt文件。例如cacert.cer/ cacert.crt
2.在Android的/sdcard/中推送cacert.cer证书
1 | adb push ~/TMPFile/burp123.cer /sdcard/Download/ |
3.打开手机设置,选择从SD卡安装CA证书,选择cacert.cer或者crt文件。
Android 7.0及以下:设置→安全→从SD卡安装CA证书
Android 7.0以上:设置→安全→加密与凭据→从SD卡/存储设备安装CA证书
如果证书安装正常,在设置→安全→可信凭证→用户下看到PortSwigger。
Android 7.0及以上版本证书问题
https://www.theburpsuite.com/2020/05/intercepting-android-application-https.html
Android 7.0及更高版本,Google已实施了一些安全功能以减少攻击面。面向API级别24+的应用程序不再信任用户安装的证书颁发机构(CA)。可以在此处阅读更多信息。
用户证书存储路径在
/data/misc/user/0/cacerts-added/
;系统证书存储路径在
/system/etc/security/cacerts
我们可以将Burp或者Charles的证书作为系统信任证书安装。
导出Burp der格式的证书后,使用openssl来进行转换。然后使用adb将<hash>.0
文件push到模拟器的/system/etc/security/文件夹中,并将权限修改为644。
1 | openssl x509 -inform DER -in burp.der -out burp.pem |
Android使用证书的哈希值并在末尾添加.0来重命名和存储证书。如果安装了多个设备的Burpsuite CA证书,则末尾序号会进行递增,如9a5ba575.1。
例如,我的cacert.cer证书存储为9a5ba575.0。通过输入su进入adb shell并成为root用户,然后输入。
1 | adb shell |
也可以利用Magisk的一个插件模块自动实现这样的功能。
在Magisk中安装Magisk Trust User Certs
、MoveCertificates
模块。此模块会将所有安装的用户证书添加到Android系统信任证书存储中。
1.单击此处 下载最新版本的.zip文件。
2.将下载的zip文件推送到Android设备的/sdcard/Download/
3.打开Magisk,转到模块
,单击加号,然后选择MagiskTrustUserCerts.zip文件路径以安装该模块。单击重新启动
以激活该模块。
4.打开Magisk并转到模块
以检查是否已安装Always Trust User Certificates
模块。
这样以普通用户身份安装在/data/misc/user/0/cacerts-added/
下的Burp Suite CA,在重启手机后将同样安装在/system/etc/security/cacerts
作为系统信任证书。
https://medium.com/bugbountywriteup/android-pentesting-lab-4a6fe1a1d2e0
burpsuite导出证书为der格式
Use Openssl to convert DER to PEM and rename to <cert-hash>.0
1 | # Convert certificate format from DER to PEM |
https://www.bbsmax.com/R/Vx5ML2YYJN/
https://www.bbsmax.com/A/o75NX24ezW/
抓包工具:https://www.zhihu.com/question/20467503
设置抓包代理
配置模拟器的代理网络
设置→Wi-Fi→ WiredSSID→ 修改网络 →代理→手动设置
鼠标长按 wiredSSID—》修改网络:
手动设置代理为burpsuite 添加的代理地址
Android调试工具
Objection
1 | sudo -H pip3 install objection |
实际上,只要计算机上安装了objection,Frida也会自动被安装。
https://nosec.org/home/detail/2192.html
使用objection
1 | objection -g com.xxx.xx explore |
1 | # Hook Java方法 |
Spawn方式Hook
从Objection的使用操作中我们可以发现,Obejction采用Attach附加模式进行Hook,这可能会让我们错过较早的Hook时机,可以通过如下的代码启动Objection,引号中的objection命令会在启动时就注入App。
1 | objection -g packageName explore --startup-command 'android hooking watch xxx' |
首先加载App,进入交互式分析环境。 objection -g 包名 explore
1 | objection -g com.xunmeng.pxxx explore |
然后Hook这两个类:
1 | android hooking watch class 'com.aimi.android.common.service.d$a' |
这样可以一次性把这两个类下所有的函数都Hook,方便咱们定位到底是哪个函数来做了 anti-token 计算
1:objection1
现形了,很明显是 com.xunmeng.pxxx.secure.s.a 函数,不过又遇到一个问题,a函数有好几个重载,而且也看不到他们的入参和返回值?
这时候就可以使用 android hooking watch class_method 来hook函数,并且打印出入参和返回值:
1 | android hooking watch class_method 'com.xunmeng.pxxx.secure.s.a' --dump-args --dump-return |
frida
Frida是一款基于Python + JavaScript的Hook调试框架,可以将自己编写的JavaScript代码注入到Windows,MACOS,Linux, iOS,Android和QNX 的应用中从而进行Hook,其实Frida功能不仅仅是Hook,还包括以下这些功能:
1 | sudo -H pip3 install frida-tools |
如果安装时报错如下:
1 | error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)> |
解决方法是去Applications的Python下找到Install Certificates.command,执行后重新安装frida-tools即可
安装时到编译阶段时,可能会卡住,需要手工安装
1 | Building wheel for frida (setup.py) ... \ |
在上面的安装命令输出结果中找到frida版本,直接下载对应平台的frida Python库的安装包,frida python库地址:https://pypi.org/project/frida/#files。
这里需要注意下载的版本,比如当前系统是macOS10.15,Python是3.8,就应该下载frida-12.7.11-py3.8-macosx-10.6-intel.egg、frida-15.1.9-py3.8-macosx-10.9-x86_64.egg 。
egg文件是一种打包,后缀名可以改成rar,直接解压缩,按照源码的形式安装,即把egg文件和egg文件解压出来的文件夹直接复制到Python的第三方库文件夹…Lib\site-packages中。
默认python路径/Library/Python/3.8/site-packages/
下载完成后直接安装:
1 | sudo easy_install frida-12.11.17-py3.8-macosx-11.0-arm64.egg |
安装完成后,在终端中输入frida-ps
命令查看,如果能显示当前系统进程则证明安装成功
frida-server
注意:frida-server需要以root权限运行
直接去frida release 下载对应的版本即可
注意:frida-server的版本必须跟宿主机的frida版本保持一致。比如宿主机Frida版本是12.7.6,Android手机是arm64的,则应该下载:frida-server-12.7.6-android-arm64.xz。
忘记frida版本可以使用
frida --version
命令查看。如果不知道 Android架构信息,可以 adb shell 然后执行cat /proc/cpuinfo
命令查看。
如果是在模拟器进行调试,下载frida-server-x.x.x-android-x86_64或者x86的;
如果使用实体手机进行调试,下载frida-server-x.x.x-android-arm
注意:genymotion是32位,需要下载frida-server-xx.x.x-android-x86.xz
下载后解压文件,并将二进制文件重命名为: frida-server
, 并使用adb push
命令推送到手机中
1 | adb push frida-server /data/local/tmp/ |
推送完成后将frida-sever赋予执行的权限,并启动frida-server,使用以下命令:
1 | adb shell |
如果执行frida-server时出现卡死的情况,可以参考。
然后在终端中执行
1 | frida-ps -U |
应该就会看到如下进程列表了
1 | PID Name |
参数-U 代表USB,意思让Frida检查USB设备,使用frida-ps -R
也可以,但是需要进行转发。执行adb forward tcp:27042 tcp:27042
后执行frida-ps -R
也可以看到手机上的进程.
到此为止,Frida工作环境已经准备好了,下一篇文章介绍一下Android Hook工具之Frida 基础使用
如果frida-server没有正常运行,会出现以下情况的报错
1 | Failed to enumerate processes: unable to connect to remote frida-server: Unexpected lack of content trying to read a line |
1 | frida-ps -Uai |
是的,您可以通过指定-N
/ --network
标志然后提供给远程设备--host
并--port
使用Frida在explore
命令之前监听的位置来连接到远程设备。像这样objection -N -h 192.168.0.1 -p 27042 explore
。
1 | 我修改了LaunchDaemon的plist,以启动frida-server侦听ip地址。ssh连接似乎也可行,但异议会超时。 |
最后分享一个小工具:frida-server start/stop 脚本。
注入进程https://zhuanlan.kanxue.com/article-350.htm
在 iPhone 上部署 Frida 框架的官方教程(含越狱和非越狱环境,英文):www.frida.re/docs/ios/ 116 给frida 做了个图形界面,动态分析iOS 应用 - iOS逆向论坛
frida基本命令
1 | frida-ls-devices |
调试某个PID的进程
1 | frida-ps -Uai |
1 | echo 'export PYENV_ROOT="$HOME/.pyenv"' >> .zshrc |
- 强制启动一个应用进程
frida -U --no-pause -f [应用包名]
使用-f
选项表示强制启动一个应用程序,--no-pause
选项表示不中断应用程序的启动,如果不使用这个选项总是会遇到 在强制启动应用程序2秒左右后程序自动退出,
例: 强制启动Chrome并attach到当前进程
1 | frida -U --no-pause -f com.android.chrome |
Frida使用手册:https://github.com/hookmaster/frida-all-in-one
免Root运行Frida
https://github.com/WooyunDota/DroidDrops/blob/master/2018/Frida.Android.Practice.md
Frida提供了免root的Hook方案,即手动注入frida-gadget库, Objection对其进行了封装,但实际没啥用(搞逆向的怎么会没一台root机器)。除此之外,Objection提供了对IOS的Hook,以及对sslunpinng的处理,Hook剪切板/Root检测等,但实际使用中用处不大,一般会选择其他专门的工具,此处不提。
详情参考Objection github目录下objection—console—helpfiles
FridaGadget注入源程序
首先在原APK的lib目录下分别加入各自架构的FridaGadget库 https://github.com/frida/frida/releases/
并在同目录下写入配置文件(执行哪个脚本) 配置文件名就是库名的so前加config.
使用objection自动完成frida gadget注入到apk中.
兼容性较差,不是很推荐.
1 | » pip3 install -U objection |
其他
Magisk,它现在有个超强的Magisk Hide功能,能隐藏root状态。
https://www.52pojie.cn/thread-1048786-1-1.html
Frida GUI Tools
- FridaHooker:android管理启动frida工具
- AppMon—基于Frida的应用程序监视和注入的GUI工具(由@dpnishant提供)
- Dwarf
- Zentracer:Zentracer采用了Attach方式Hook,在使用前需要启动App
- Passionfruit:iOS应用黑盒评估工具
Zentracer
- 点击打开 “设置” 应用;
- 选择 Action → Match RegEx
- 输入E:java.io.File,点击add,然后关闭窗口
- 输入M:java.io.File,模糊匹配
- 点击 Action → Start
https://www.cxyzjd.com/article/m0_37696990/104787127
Dwarf对类或方法查添断点
菜单栏java下面有两个选项
class: 点击class会弹出JVM instector,该标签主要用于对指定的类 构造器及类的方法进行下断点
trace:点击trace会弹出JVM trace标签,该签主要用于对指定类进行调用关系的展示
Dwarf断点移除或清空后,该断点不可再次添加,如果需要添加需要重启应用程序:即菜单process->restart 快捷键F9
在断点处停下时,会出现一个JVM debugger标签,可以此时可以看到一些拦截到的变量值;
最右侧的threads则显示当前当前线程,可以选中内容右健=>resume进行断点释放。如果有多个断点则resume,右下角的日志栏也有相应信息
注:菜单process-> step F7 ,setp call f8 ,step block也可以释放断点,目前测试功能好像一样,释放断点后如需再次对该方法进行断点需要重启
trace列是要查看调用关系的类
class列是显示所有已加载的类,可以右键-》search进行过滤显示,选择要trace的类双击,然后在trace会添加上选择的类
APP审计工具
Android测试环境虚拟机:https://androidtamer.com/tamer4-release
https://github.com/facebook/mariana-trench 针对Android和Java的静态代码审计工具
https://bbs.pediy.com/thread-269196.htm
Android漏洞挖掘三板斧——drozer+Inspeckage(Xposed)+MobSF
https://github.com/LoRexxar/Kunlun-M
https://github.com/MobSF/Mobile-Security-Framework-MobSF
https://bbs.pediy.com/thread-269196.htm
1 | docker pull opensecurity/mobile-security-framework-mobsf |
MobileSF
https://mp.weixin.qq.com/s/-4F5o54Sqo4YL85hzQr_rg
/Users/ssooking/.MobSF/config.py
如果 Dynamic Analyzer 没有检测到您的 android 设备,您需要ANALYZER_IDENTIFIER
在~/.MobSF/config.py
环境变量中或通过环境变量手动配置ANALYZER_IDENTIFIER
。
例子:ANALYZER_IDENTIFIER = '192.168.56.101:5555'
。
可以从 Genymotion 标题栏中找到 Android 设备 IP,默认端口为5555
.
1 | ./mac_run.sh 127.0.0.1:8000 |
推荐七个有代表性的免费APP应用安全测试工具:
1)OWASPZedAttackProxy(ZAP)
OWASPZAP是目前最流行的免费APP移动安全测试工具,由全球数百个志愿者维护。该工具可以在APP的开发和测试阶段自动查找安全漏洞。OWASPZAP同时还是高水平渗透测试专家非常喜爱的手动安全测试工具。
2)QARK(QuickAndroidReviewKit)
QARK是一种Android程序源代码安全漏洞分析工具。该工具有自己的开发社区,任何人都可以免费使用。QARK还会尝试提供提供动态生成的AndroidDebugBridge(ADB)命令来帮助核实潜在漏洞。
3)Devknox
对于使用AndroidStudio开发Android应用程序的开发者来说,Devknox是此类移动安全检测工具种的佼佼者,Devknox不但能检测基本的移动安全问题,还能向开发者提供问题修复的实时建议。
4)Drozer
Drozer是一个相当全面的Android安全与攻击框架,这个移动app安全测试工具能够通过进程间通讯机制(IPC)与其他Android应用和操作系统互动,这种互动机制使其有别于其他自动化扫描工具。
5)MobSF(MobileSecurityFramework)
MobileSecurityFramework是一个自动化的移动app安全测试工具,支持Android和iOS双平台,能够进行静态、动态分析以及webAPI测试。MobSF经常被用来对Android或iOSapp进行快速安全分析,支持二进制(APK&IPA)形式以及源代码的zip压缩包。
6)Mitmproxy
Mitmproxy是一个免费的开源工具,可以用于拦截、检测、修改或延迟app与后端服务之间的通讯数据,该工具的名字也可以看出这是一种类似中间人攻击的测试模式。当然,这也意味着该工具确实可以被黑客利用。
7)iMAS
iMAS也是一个开源移动app安全测试工具,可以帮开发者在开发阶段遵守安全开发规则,例如应用数据加密、密码提示、预防应用程序篡改、在iOS设备中部署企业安全策略等。无论是检查设备越狱,保护驻内存敏感信息还是防范二进制补丁,iMAS能为你的iOS程序在充满敌意的环境中提供安全保障。
参考:https://blog.csdn.net/u010278862/article/details/73240573
参考:https://blog.csdn.net/u013107656/article/details/52876312
在线安全测试工具
- 腾讯金刚审计系统 http://service.security.tencent.com/kingkong 免费 无限制
- 腾讯御安全 http://yaq.qq.com/ 免费 查看漏洞详情需认证
- 阿里聚安全 http://jaq.alibaba.com/ 免费 查看漏洞详情需认证
- 360显微镜 http://appscan.360.cn/ 免费 无限制
- 360APP漏洞扫描 http://dev.360.cn/html/vulscan/scanning.html 免费 无限制
- 百度MTC http://mtc.baidu.com 9.9元/次 无限制
- 梆梆 https://dev.bangcle.com 免费 无限制
- 爱内测 http://www.ineice.com/ 免费 无限制
- 通付盾 http://www.appfortify.cn/ 免费 无限制
- NAGA http://www.nagain.com/appscan/ 免费 无限制
- GES审计系统 http://01hackcode.com/ 免费 无限制
- 盘古出品的Janeushttp://appscan.io
- Janus http://cloud.appscan.io
- APP逆向main_classify_list https://android.fallible.co/
- java在线反编译Java decompiler online http://www.javadecompilers.com
- 腾讯电脑管家:哈勃 http://habo.qq.com/
- 腾讯TSRC:金刚 http://service.security.tencent.com/
- 阿里聚安全:http://jaq.alibaba.com/
- 西安交通大学 sanddroid:http://sanddroid.xjtu.edu.cn/#home
- 瀚海源文件B超:https://b-chao.com
Android调试分析
在抓包过程中看到:请求参数中包含了一个key, 它的值是加密的。
// 启动Monitor
cd /Users/mtdp/Library/Android/sdk/tools
./monitor
Monitor的logcat中,并未打印出换行的数据。
- Post title:APP测试环境工具
- Post author:ssooking
- Create time:2019-09-16 14:36:00
- Post link:https://ssooking.github.io/2019/09/app测试环境工具/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.