Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android安全之旅系列博客導讀

Android安全之旅系列博客導讀

編輯:關於Android編程

總結下近一年的學習經歷,以中國的新年為節點。時間從2015年年後到今天,2015年年末。

首先我必須要感謝前輩的書籍和高質量的博客。

1、重新學習了一遍《Linux內核源代碼情景分析上下冊》,毛德操著,並記錄學習歷程,寫下了博客。

2、重新學習了一遍《Android系統源代碼情景分析》,羅升陽著,並記錄從開機啟動到Home界面的展示整個流程。

3、學習了一個小型java虛擬機的源代碼,並調試修改源代碼中的錯誤,最後可以運行了。參考鏈接https://github.com/cloudsec/ajvm。

4、學習了Dalvik虛擬機的工作原理,參考的博客是老羅寫的,列出來:

1)Dalvik虛擬機簡要介紹和學習計劃。

2)Dalvik虛擬機的啟動過程分析。

3)Dalvik虛擬機的運行過程分析。

4)Dalvik虛擬機JNI方法的注冊過程分析。

5)Dalvik虛擬機進程和線程的創建過程分析。

6)Dalvik虛擬機垃圾收集機制簡要介紹和學習計劃。

7)Dalvik虛擬機Java堆創建過程分析。

8)Dalvik虛擬機為新創建對象分配內存的過程分析。

還有就是鄧老師最近寫的深入理解Dalvik虛擬機,在看鄧老師的文章前,最好先看老羅的文章,老羅的文章具有系統性,鄧老師的文章是看完虛擬機的總結,直接看鄧老師的不容易看懂。

為了看懂Dalvik虛擬機,最好理解java虛擬機,不過市面上講java虛擬機的幾乎都不涉及源碼,沒有什麼用,所以推薦大家去看看上面github實現的小型jvm,對應解釋代碼的博客請參考http://club.alibabatech.org/article_detail.htm?articleId=6。

我的學習思路就是多看源碼,少看理論,這可能是低手學習的比較好的途徑,高手一般願意看理論,看理論的時候代碼就已經在心裡生成了。

5、學習Android安全,並已經寫下了幾篇文章,涉及到Android安全機制,反編譯等。

6、下面要說重點了,從十一後就沒有更新博客,這段時間我一直在研究Android安全,我打算接下來的三個禮拜把近期研究的成果分享出來。現在簡單的梳理一下,方便後續寫博客。

以下每個標題都會獨立寫成博客。所有博客都會給出源代碼。

Android逆向分析

0x00

研究了Android加固的原理,網上大多只給多了源碼,參考Android中的Apk的加固(加殼)原理解析和實現,但沒有說明為什麼,我從系統的源碼的角度來分析目前常用加殼脫殼的原理,使用Android2.3源碼。

 

0x01

我們在分析阿裡殼子的時候,發現脫殼根本不涉及java層的代碼,可見核心脫殼的程序寫在了native層。這篇博客中我會把所有的脫殼程序通過JNI移到native層,並在Android2.3的模擬機上運行成功,並會公開源代碼。

0x02

講解DexClassLoader、PathClassLoader原理,adb install和開機自動時加載dex,都是通過PathClassLoader。而動態加殼脫殼則使用的是DexClassLoader。

講解上面的整個流程,包括優化dex。簡單的脫殼都是在dvmDexFileOpenPartial下斷點,結合下面一篇文章你就能明白為什麼要在這個函數下斷點。

0x03

講解dex文件優化,dex文件解析為DexFile,運行時加載數據為ClassObject到最後運行的流程。基於Android2.3源碼進行講解。

0x04

講解Davlik虛擬機運行時篡改字節碼,參考apk自我保護的一種實現方式——運行時自篡改dalvik指令。

0x05

阿裡的殼子會用一種技巧導致反編譯dex,看到的方法都被替換為throw exception(),這是怎麼做到的,運行時又是怎麼樣動態修復的呢?在這篇文章中,我會拋磚引玉,把其中一個方法修改為throw exception(),並且在運行時動態修復。當然所有的代碼都會放在github上。

0x06

講解一個開源的脫殼機,DexHunter,參考從Android運行時出發,打造我們的脫殼神器。進一步理解Dalvik虛擬機執行流程。其實就是一張圖:

\

 

0x07

使用ida靜態和動態調試so,網上有很多這樣的文章,為了在init_array下斷點,每個人都不一樣,其中最有效率的一個是安卓動態調試七種武器之孔雀翎-ida-pro,除了分析動態調試so,還要分析so調用函數的堆棧,方便看懂so的arm匯編語言。

0x08

講解常用的native反調試的方法,並且講解如何通過修改so來過掉這些反調試。

0x09

使用ida動態調試dex的smali源碼,有兩種方式,一種是反編譯apk + eclipse中調試smali,一種是直接使用ida調用dex。

0x0a

講解常用的防反編譯的方式,比如通過驗證簽名,驗證是否運行在虛擬機中等方式。這部分代碼可能在java層,也可能在native層。

0x0b

講解通過smali注入log或者注入方法的調用棧,來動態分析程序的運行。

0x0c

講解so加殼,一是對section加殼,一個是對函數加殼。參考Android逆向之旅---基於對so中的section加密技術實現so加固,Android逆向之旅---基於對so中的函數加密技術實現so加固。

0x0d

講解so注入和c/c++利用GOT表進行hook。參考Android中的so注入(inject)和掛鉤(hook) - For both x86 and arm。

0x0e

講解dex注入,參考dex注入實現詳解。

0x0f

講解java攔截技術,最簡單的攔截就是替換,在加殼脫殼程序中我們已經看到了。還有一種方式是通過Dalvik虛擬機的方式,如果我們能把一個Java函數修改為Native函數,並且將nativeFunc指針設置為自定義的函數,那麼就可以實現攔截了,參考注入安卓進程,並hook java世界的方法。

0x10

講解從system.loadlibrary到執行init_array的流程。

 

Android APP漏洞挖掘

組件公開安全漏洞

Content Provider文件目錄遍歷漏洞

AndroidManifest.xml配置安全檢測

Intent劫持風險安全檢測

數據存儲安全檢測

WebView高危接口安全檢測:webview高危接口漏洞,有漏洞利用代碼和詳細的講解。

拒絕服務攻擊安全檢測

WebView明文存儲密碼漏洞

隨機數生成函數使用錯誤

WebView不檢驗證書漏洞

中間人攻擊漏洞: 有漏洞代碼和詳細的講解。

從sdcard加載dex漏洞

Activity被劫持風險

file跨域訪問:webview跨域訪問訪問文件,有漏洞利用代碼和詳細的講解。

端口開發:主要分析Baidu地圖和高德地圖,並有漏洞利用代碼,展示實際的效果。並且通過反編譯smali分析了為什麼漏洞利用代碼要這麼寫。

明文存儲,明文傳輸

 

Android系統漏洞

0x00

講解了Linux下ROP,參考一步一步學ROP之linux_x86篇。

0x01

講解了android下ROP,DEP,ASLR,Information Leak,參考一步一步學rop之android-arm-32位篇。

0x02

講解了cve-2014-7911,講解了Dalvik-Heap Spray,C++反編譯後代碼的利用,參考Cve-2014-7911安卓提權漏洞分析,再論CVE-2014-7911安卓序列化漏洞。

0x03

講解部分Android Libcutils庫中整數溢出導致的堆破壞漏洞的發現與利用,漏洞利用代碼比較復雜,只講解其中一部分。

實際的博客可能還有出入,我也在學習中,歡迎交流,每條回復我都會認真回。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved