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记录