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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM