一、應用程序層 平時所見的一些java爲主編寫的Appjava
二、應用程序框架層 應用框架層爲應用開發者提供了用以訪問核心功能的API框架android
android.app:提供高層的程序模型和基本的運行環境。c++
android.content:包含對各類設備上的數據進行訪問和發佈。git
android.net:提供幫助網絡訪問的類,超過一般的java.net.接口。github
android.os:提供了系統服務、消息傳輸和IPC機制。web
android.provider:提供訪問Android內容提供者的類。算法
android.telephony:提供與撥打電話相關的API交互。shell
android.view:提供基礎的用戶界面接口框架。數據庫
android.util:涉及工具性的方法,例如時間日期的操做。瀏覽器
三、C、C++本地庫和Android運行時環境
什麼是運行時? 運行時就是一個供操做系統使用的系統,它負責將你用高級語言(好比 Java)編寫的代碼轉換成 CPU/處理器可以理解的機器碼 Android運行時(runtime)與庫位於相同的層,ART和Dalvik都算是一種Android運行時環境,或者叫作虛擬機 Linux內核的上層是Android的本地庫,這些庫由c/c++編寫 四、Linux內核與驅動層 最底層由Linux內核組成 Android的內存管理、進程管理、網絡協議棧、驅動模型和安全等主要的系統服務依賴於Linux
一個Activity一般就是一個單獨的屏幕(窗口)
Activity的生命週期
onCreate()建立
onStart()啓動
onResume()運行
onPause()待機
onStop()中止
onDestroy()銷燬
Services 服務簡單來講就是剝奪界面的Activity,Service一直運行於後臺,不會與用戶交互,可用來處理一些耗時的任務 它能夠運行在它本身的進程,也能夠運行在其餘應用程序進程的上下文(context)裏面,其它的組件能夠綁定到一個服務(Service)上面
Service的生命週期,
IBinder onBind(Intent intent) 該方法是Service必須實現的一個方法,參數爲意圖,返回一個IBinder對象
void onCreate() 當Service第一次被建立後,系統將當即回調該方法
void onDestory()當Service被關閉以前會回調該方法
廣播接收者 Broadcast 廣播是用於應用程序之間傳輸信息的機制
Broadcast Receiver 廣播接收者對發送出來的廣播進行過濾接收並響應
應用程序共享的空間,用於在不一樣的應用程序之間實現數據共享的功能
以XML文件形式存儲
SharedPreferences存儲路徑:/data/data/包名/shared_prefs/
getDataDirectory() 獲取到Android中的data數據目錄(sd卡中的data文件夾)
getDownloadCacheDirectory() 獲取到下載的緩存目錄(sd卡中的download文件夾)
getExternalStorageDirectory() 獲取到外部存儲的目錄 通常指SDcard(/storage/sdcard0)
getExternalStorageState() 獲取外部設置的當前狀態 通常指SDcard
getRootDirectory() 獲取到Android Root路徑
SQLite是一款輕量級的關係型數據庫,它支持 SQL 語言,而且只利用不多的內存就有很好的性能 Android 提供了一個SQLiteOpenHelper 幫助類,藉助這個類就能夠很是簡單的對數據庫進行建立和升級 SQLite數據庫存儲路徑:/data/data/包名/database/
一個程序能夠經過實現一個ContentProvider的抽象接口將本身的數據徹底暴露出去 並且ContentProviders是以相似數據 庫中表的方式將數據暴露,也就是說ContentProvider就像一個「數據庫」 那麼外界獲取其提供的數據,也就應該與從數據庫中獲取數據的操做基 本同樣,只不過是採用URI來表示外界須要訪問的「數據庫」 大多數ContentProvider使用Android文件系統或者SQLite數據庫來保持數據,可是也能夠以任何方式來存儲
略
Android模擬器如夜神之類的,能夠模擬運行arm,手機通常是arm,可是也不排除例外
【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調試時用
通常APP的主入口文件就是這個文件,經過它能夠啓動APP,還有一些敏感的信息保存在裏面
下載burp suite 安裝包,監控本機IP
打開手機瀏覽器訪問IP:8080,下載安裝burp suite的證書,打開APP便可在burp suite上看到數據包
備註:對於有些品牌的手機,沒法加載用戶導入的證書,須要root設備才能夠,
Android 7.0以後只信任系統的證書,沒法加載用戶自定義的證書,解決辦法,root設備,將證書名稱base64以後,放在跟證書路徑下便可
第一步:從http://mwr.to/drozer下載Drozer (Windows Installer)
第二步:在Android設備中安裝agent.apk adb install agent.apk
nox_adb.exe connect 127.0.0.1:62001
端口轉發,轉發到Drozer使用的端口31415 adb forward tcp:31415 tcp:31415
開啓Drozer console drozer console connect
run app.package.attacksurface com.tencent.qqmusic
Attack Surface: 15
activities exported 13
broadcast receivers exported
0 content providers
exported 7 services exported
一、下載安裝
https://github.com/ac-pm/Inspeckage#information-gathering
二、使用 端口轉發
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記錄