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

page34image37046928.jpg

判断组件是否能够导出

image-20200113115637546

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()

image-20200113142949617

http://portecle.sourceforge.net/

iptables -t nat -A OUTPUT -p tcp -dport 目标端口 -j DANT --to burpip和端口 这个不太懂。有时间再看

Webview安全

  • 任意代码执行
  • 密码明文存储
  • 域控制不严格

敏感信息安全

  • 配置文件
  • SQLite数据库
  • xml文件内容
  • logcat日志信息

进程安全

通过对客户端内存的访问,查看各种未加密的敏感信息

apk:memspector

外部动态加载Dex安全风险检测

image-20200113144053568

渗透测试

burp抓包

  • http
    1. 手机与电脑连到同一WiFi下
    2. 手机代理主机为WiFi的ip
    3. proxy listener 8080端口
  • https
    1. 需要手机安装证书
    2. 之后补充吧,网上也有

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选项

image-20200113232759461

手机打开应用,

adb shell su -c "/data/local/tmp/android_server"

转发23946

attach

image-20200113233006022

选中对应的apk后就开始了

适当继续,然后到手机输入东西。

由于在检验处打了断点,所以输入的值会被监视

按下确定键后

image-20200113233617789

然后在debug里面打开local看当地变量

image-20200113233800317

就看到了

进阶教程:

IDA使用https://www.01hai.com/note/av189045#IDA-4

绕过反调试https://blog.csdn.net/jltxgcy/article/details/50598670