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記錄