2. 移动安全渗透测试-(Android安全基础)

 2.1 Android系统架构

1、应用程序层 平时所见的一些java为主编写的App

2、应用程序框架层 应用框架层为应用开发者提供了用以访问核心功能的API框架

android.app:提供高层的程序模型和基本的运行环境。

android.content:包含对各种设备上的数据进行访问和发布。

android.net:提供帮助网络访问的类,超过通常的java.net.接口。

android.os:提供了系统服务、消息传输和IPC机制。

android.provider:提供访问Android内容提供者的类。

android.telephony:提供与拨打电话相关的API交互。

android.view:提供基础的用户界面接口框架。

android.util:涉及工具性的方法,例如时间日期的操作。

3、C、C++本地库和Android运行时环境

什么是运行时? 运行时就是一个供操作系统使用的系统,它负责将你用高级语言(比如 Java)编写的代码转换成 CPU/处理器能够理解的机器码 Android运行时(runtime)与库位于相同的层,ART和Dalvik都算是一种Android运行时环境,或者叫做虚拟机 Linux内核的上层是Android的本地库,这些库由c/c++编写 4、Linux内核与驱动层 最底层由Linux内核组成 Android的内存管理、进程管理、网络协议栈、驱动模型和安全等主要的系统服务依赖于Linux

 

2.2 四大组件

1、Activity  

一个Activity通常就是一个单独的屏幕(窗口)  

Activity的生命周期   

onCreate()创建   

onStart()启动   

onResume()运行   

onPause()待机   

onStop()停止   

onDestroy()销毁

2、Service  

Services 服务简单来说就是剥夺界面的Activity,Service一直运行于后台,不会与用户交互,可用来处理一些耗时的任务  它可以运行在它自己的进程,也可以运行在其他应用程序进程的上下文(context)里面,其它的组件可以绑定到一个服务(Service)上面   

Service的生命周期,

IBinder onBind(Intent intent) 该方法是Service必须实现的一个方法,参数为意图,返回一个IBinder对象

void onCreate() 当Service第一次被创建后,系统将立即回调该方法

void onDestory()当Service被关闭之前会回调该方法

 

3、Broadcast Receiver

广播接收者  Broadcast 广播是用于应用程序之间传输信息的机制  

Broadcast Receiver 广播接收者对发送出来的广播进行过滤接收并响应

4、Content Provider  

应用程序共享的空间,用于在不同的应用程序之间实现数据共享的功能

 

2.3 五大存储

1、SharedPreferences存储  

以XML文件形式存储  

SharedPreferences存储路径:/data/data/包名/shared_prefs/

2、本地存储  

getDataDirectory() 获取到Android中的data数据目录(sd卡中的data文件夹)  

getDownloadCacheDirectory() 获取到下载的缓存目录(sd卡中的download文件夹)  

getExternalStorageDirectory() 获取到外部存储的目录 一般指SDcard(/storage/sdcard0)  

getExternalStorageState() 获取外部设置的当前状态 一般指SDcard  

getRootDirectory() 获取到Android Root路径

3、SQLite数据库存储  

SQLite是一款轻量级的关系型数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能  Android 提供了一个SQLiteOpenHelper 帮助类,借助这个类就可以非常简单的对数据库进行创建和升级  SQLite数据库存储路径:/data/data/包名/database/  

4、ContentProvider存储  

一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去  而且ContentProviders是以类似数据 库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”  那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基 本一样,只不过是采用URI来表示外界需要访问的“数据库”  大多数ContentProvider使用Android文件系统或者SQLite数据库来保持数据,但是也可以以任何方式来存储

5、网络存储

 

2.4 六大布局

1、LineartLayout 线性布局

2、FrameLayout 帧布局

3、TableLayout 表格布局

4、RelativeLayout 相对布局

5、AbsoluteLayout 绝对布局

6、GridLayout 网格布局

2.5 arm架构和x86架构

Android模拟器如夜神之类的,可以模拟运行arm,手机一般是arm,但是也不排除例外

 

2.6 adb 常用指令

【1】kill-server  杀死adb服务

【2】start-server 开启服务

【3】adb install aa.apk 快速安装一个apk

【4】adb uninstall +应用的包名 快速卸载一个Android应用

【5】adb shell 进入手机终端

【6】adb pull test.txt 把一个文件从终端拉出来

【7】adb push test.txt /mnt/sdcard 把一个文件从电脑推到手机

【8】 cat 命令

查看文件内容 cat demo.txt |grep aaa

cat /proc/[pid]/maps 查看当前进程的内存映射信息 比如加载了那些so和dex cat /proc/[pid]/status 查看当前进程的状态信息 比如 TracerPid TracerPid是否为0,不为0表示该进程已经被ptrac cat /proc/[pid]/net/tcp/tcp6/udp/udp6 查看当前应用的端口号信息

【9】touch/echo 命令 创建文件

adb shell dumpsys activity top  查看当前应用activity的信息。

adb shell dumpsys 把当前系统所以运行的四大组件打印出来

adb jdwp 查看设备中可以被调试的应用的进程号

【10】ps 说明:查看设备的进程信息,货值指定进程的线程信息。 用法 :ps |grep 过滤的内容 ps -t [pid]

【11】 am start -D(debug运行) -n pkgname/pkgname.activityname 启动一个应用

【12】am broadcast -a [广播动作]

【13】 adb forward [(远程端)协议:端口号] [(设备端)协议:端口号]  端口转发,IDA调试时用

 

2.7 AndroidManifest.xml解析

一般APP的主入口文件就是这个文件,通过它可以启动APP,还有一些敏感的信息保存在里面

 

2.8 使用burp suite 抓APP HTTPS包

下载burp suite 安装包,监控本机IP

打开手机浏览器访问IP:8080,下载安装burp suite的证书,打开APP即可在burp suite上看到数据包

备注:对于有些品牌的手机,无法加载用户导入的证书,需要root设备才可以,

Android 7.0之后只信任系统的证书,无法加载用户自定义的证书,解决办法,root设备,将证书名称base64之后,放在跟证书路径下即可

 

2.9 drozer框架

1.、安装

第一步:从http://mwr.to/drozer下载Drozer (Windows Installer)

第二步:在Android设备中安装agent.apk adb install agent.apk

2、使用 连接上模拟器/真机

nox_adb.exe connect 127.0.0.1:62001

端口转发,转发到Drozer使用的端口31415 adb forward tcp:31415 tcp:31415

开启Drozer console drozer console connect

3、测试 确定攻击面

run app.package.attacksurface com.tencent.qqmusic

Attack Surface: 15

activities exported 13

broadcast receivers exported

0 content providers

exported 7 services exported

 

2.10 自动化分析Inspeckage框架

1、下载安装

https://github.com/ac-pm/Inspeckage#information-gathering 

2、使用 端口转发

adb forward tcp:8008 tcp:8008

127.0.0.1:8008

Settings Disable FLAG_SECURE

禁止截屏开关 SSL uncheck 是否关闭SSL验证

Logcat 实时查看该app的logcat输出

Tree View 可以实时浏览app的数据目录并直接下载文件到本地

Package Information 应用基本信息(组件信息、权限信息、共享库信息)

Shared Preferences LOG:app XML文件读写记录;

Files:具体XML写入内容

Serialization 反序列化记录

Crypto 常见加解密记录(KEY、IV值)

Hash 常见的哈希算法记录

SQLite SQLite数据库操作记录

HTTP HTTP网络请求记录

File System 文件读写记录

Misc. 调用Clipboard,URL.Parse()记录 WebView 调用webview内容

IPC 进程之间通信记录

+Hooks 运行过程中用户自定义Hook记录