冬令营Day1:移动应用程序渗透测试
Android系统架构
应用层
内置应用和安装应用
应用框架层(Java)
为开发人员提供的各种API 用java编写 分为活动管理、位置管理器、包管理器等等
系统运行库层(native)
分为C/C++程序库和Android运行时库
JVM(java)、DVM(dalvik)、ART(arm)虚拟机
硬件抽象层(HAL)
位于操作系统内核与硬件电路之间的接口层,其目的在于把接口抽象化。
Linux内核层
Android运行机制
init启动
按下电源键->系统启动->BootLoader->Linux内核->init进程(init.rc)
通过一个init.cpp启动zygote进程再启动systemserver进程
Android应用渗透测试
工具使用
ADB、Frida、Burp、Jadx
关于frida安装的时候可能会有目录报错和权限报错,视情况加上pip3.8
python -m easy_install
sudo
等等
可以看这里https://refate.github.io/2019/01/13/rida_install/
安装包签名校验
jarsigner -verify
或者jarsigner -verify -verbose -certs
apktool使用
之前记载了
smali代码阅读
首先这个网站十分详细https://blog.csdn.net/lpohvbe/article/details/7981386
判断组件是否能够导出
drozer验证组件安全
安装
https://blog.csdn.net/muier/article/details/49929863
https://www.jianshu.com/p/168cdd3daa1d
就是各种pip就可以
由于drozer是py2版本,所以需要各种pip2的安装,在cp安装过程的时候要记得用pip2,由于mac上没有pip2所以先要去安装一下
brew install python@2
组件安全
- Activity(可视界面)
- Service(后台程序)
- Broadcast Reciever(震动通知等等)
- Content Provider(共享接口)
本地拒绝服务检测
getIntent()
Intent.getXXXExtra()
http://portecle.sourceforge.net/
iptables -t nat -A OUTPUT -p tcp -dport 目标端口 -j DANT --to burpip和端口 这个不太懂。有时间再看
Webview安全
- 任意代码执行
- 密码明文存储
- 域控制不严格
敏感信息安全
- 配置文件
- SQLite数据库
- xml文件内容
- logcat日志信息
进程安全
通过对客户端内存的访问,查看各种未加密的敏感信息
apk:memspector
外部动态加载Dex安全风险检测
渗透测试
burp抓包
- http
- 手机与电脑连到同一WiFi下
- 手机代理主机为WiFi的ip
- proxy listener 8080端口
- https
- 需要手机安装证书
- 之后补充吧,网上也有
smali动态调试
adb install
adb shell am start -D -n 调试模式启动应用
adb forward
进行端口转发,用adb shell ps | grep 包名
获取jdwp的pid
as导入smali工程,File -> Project Structure 设定jdk版本
smali文件夹mark as Resource Root
打开ddms 在run configurations里设定端口号
打断点然后就可以了
由于关掉as了就懒得放效果图了
提供阅读:https://www.bodkin.ren/index.php/archives/566/
so动态调试
先打开静态so,打断点,打开debug选项
手机打开应用,
adb shell su -c "/data/local/tmp/android_server"
转发23946
attach
选中对应的apk后就开始了
适当继续,然后到手机输入东西。
由于在检验处打了断点,所以输入的值会被监视
按下确定键后
然后在debug里面打开local看当地变量
就看到了
进阶教程:
IDA使用https://www.01hai.com/note/av189045#IDA-4
绕过反调试https://blog.csdn.net/jltxgcy/article/details/50598670