2. 移動安全滲透測試-(Android安全基礎)

 2.1 Android系統架構

一、應用程序層 平時所見的一些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

 

2.2 四大組件

一、Activity  

一個Activity一般就是一個單獨的屏幕(窗口)  

Activity的生命週期   

onCreate()建立   

onStart()啓動   

onResume()運行   

onPause()待機   

onStop()中止   

onDestroy()銷燬

二、Service  

Services 服務簡單來講就是剝奪界面的Activity,Service一直運行於後臺,不會與用戶交互,可用來處理一些耗時的任務  它能夠運行在它本身的進程,也能夠運行在其餘應用程序進程的上下文(context)裏面,其它的組件能夠綁定到一個服務(Service)上面   

Service的生命週期,

IBinder onBind(Intent intent) 該方法是Service必須實現的一個方法,參數爲意圖,返回一個IBinder對象

void onCreate() 當Service第一次被建立後,系統將當即回調該方法

void onDestory()當Service被關閉以前會回調該方法

 

三、Broadcast Receiver

廣播接收者  Broadcast 廣播是用於應用程序之間傳輸信息的機制  

Broadcast Receiver 廣播接收者對發送出來的廣播進行過濾接收並響應

四、Content Provider  

應用程序共享的空間,用於在不一樣的應用程序之間實現數據共享的功能

 

2.3 五大存儲

一、SharedPreferences存儲  

以XML文件形式存儲  

SharedPreferences存儲路徑:/data/data/包名/shared_prefs/

二、本地存儲  

getDataDirectory() 獲取到Android中的data數據目錄(sd卡中的data文件夾)  

getDownloadCacheDirectory() 獲取到下載的緩存目錄(sd卡中的download文件夾)  

getExternalStorageDirectory() 獲取到外部存儲的目錄 通常指SDcard(/storage/sdcard0)  

getExternalStorageState() 獲取外部設置的當前狀態 通常指SDcard  

getRootDirectory() 獲取到Android Root路徑

三、SQLite數據庫存儲  

SQLite是一款輕量級的關係型數據庫,它支持 SQL 語言,而且只利用不多的內存就有很好的性能  Android 提供了一個SQLiteOpenHelper 幫助類,藉助這個類就能夠很是簡單的對數據庫進行建立和升級  SQLite數據庫存儲路徑:/data/data/包名/database/  

四、ContentProvider存儲  

一個程序能夠經過實現一個ContentProvider的抽象接口將本身的數據徹底暴露出去  並且ContentProviders是以相似數據 庫中表的方式將數據暴露,也就是說ContentProvider就像一個「數據庫」  那麼外界獲取其提供的數據,也就應該與從數據庫中獲取數據的操做基 本同樣,只不過是採用URI來表示外界須要訪問的「數據庫」  大多數ContentProvider使用Android文件系統或者SQLite數據庫來保持數據,可是也能夠以任何方式來存儲

五、網絡存儲

 

2.4 六大布局

一、LineartLayout 線性佈局

二、FrameLayout 幀佈局

三、TableLayout 表格佈局

四、RelativeLayout 相對佈局

五、AbsoluteLayout 絕對佈局

六、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

二、使用 鏈接上模擬器/真機

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

 

2.10 自動化分析Inspeckage框架

一、下載安裝

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

相關文章
相關標籤/搜索