Android 逆向分析學習路線?


==================================================

2016-12-19補充幾點:

(一)不要相信任何"網路(線上)培訓班",逆向無捷徑,真的想學請耐心泡論壇(看雪,52),以及看書.

android逆向是雜學,考驗的是知識廣度+深度+經驗

因此android逆向的培訓,無法像java,php,c#這類常規語言一樣被量化

這種培訓也很難達到"程序員工廠"的效果

號稱一兩個月畢業的"培訓班,幾乎毫無可能讓一個新手速成為高手.

他或許能教你一些容易上手的方法,但請相信,這些即使真的學到,也沒有任何用途.因為技術永遠是在不斷更新的

這類培訓班往往利用android逆向嚴重的信息不對稱性(逆向屬於小眾技術),以及學員想速成的心理盈利.

最令人鄙視的是,py都覺得不夠用的當下,一部分培訓班甚至拿著某中文偽代碼類vb編程語言(所謂X語言)進行教學.

判斷一個培訓班是不是靠譜可以考察兩個問題:

1.在報名時,培訓機構負責人是否詳細審核你的基礎知識(參考第二點)

如果沒有,請放棄,因為這一定是騙人的,沒人能把一個c不會,java不通,smali看不懂,py不會寫的人培訓成逆向高手.

2.授課時使用什麼語言?

如果對方用某中文編程語言授課,還是算了吧.

(二)什麼樣的人可以學android逆向

再強調一次,android逆向是雜學.

因此android逆向幾乎無法零基礎上手.

最適合學習android逆向的,是那些已經從事一段時間android sdk ndk開發的人.

這些人的特徵是

非常了解android系統的運行機制

並且長期使用CC++,java進行開發.

他們的優勢並不在於技術能力.而在於經驗積累.

他們所欠缺的只是逆向方法論,和逆向針對性技術.

我周圍的逆向大牛走的也幾乎都是這條路.

另外請注意,這些人基本上不會接觸和使用X語言(某中文偽代碼類vb編程語言).

==================================================

Android軟體安全與逆向分析 這本書可以作為入門

內容相對較淺

體現在對於具體的加固,協議棧(如有效演算法)的定向分析

這本書闡述了非常好的基礎分析思路和理論原理

非常適合作為入門書籍

我有x86逆向基礎,在接觸這個領域前用已經非常了解8086彙編和linux(教程沒看王爽,而是看小甲魚,linux在很早的時候讀完了私房菜,貌似暴露年齡)搞過幾年od,因此直接跳過入門過程.

請注意,我在這種前提下,斷斷續續搞了一年android逆向,才剛剛達到了中低手的水平.

目前對我幫助最大的書是(美)Chris Eagle的"ida pro權威指南"

逆向必備的基本功是 :

java,C++(jni非常重要)

C語言(F5插件看不懂會很麻煩)

python(後期腳本用)

arm彙編

Linux(最好精通一種shell,推薦bash)

密碼學(至少對aes des,iv向量,等一些基礎演算法有認識,否則會舉步維艱)

另外,請為自己買一個機械鍵盤

國內android逆向界現狀:

目前國內android逆向圈"偏科"問題很嚴重.

分為脫殼(dump),協議分析兩個大的方向

如果為了就業而學習,建議放棄脫殼直接學習協議分析.

後者在實際工作中應用遠高於前者.

目前沒有好的全體系教程.

自學途徑可以是(這個流程是默認你已經掌握android 的sdk ndk開發 Linux和python都略懂的基礎下):

非蟲(豐生強):Android軟體安全與逆向分析(建立逆向思維,學好smali及基礎分析)

(美)Chris Eagle:ida pro權威指南第二版 (掌握ida)

其他推薦閱讀:

arm:隨便找一本即可(因為大多知識點差不多)

密碼學:深入淺出密碼學(沒有數學基礎推薦看這本,有數學基礎的朋友應該不需要我推薦)

關於什麼時候看論壇:

建議初學者關掉論壇.

真正該看論壇是在你遇到針對性較強問題的時候.比如對於XX殼的dump方案,比如過XX反調試沒有思路的時候,但達到這程度的人,在國內往往能算上中手.


謝邀。

非蟲前輩的

Android軟體安全與逆向分析


複製一篇答案:

為了CTF比賽,如何學習逆向和反彙編? - 無名俠的回答 - 知乎


去看雪論壇吧,這方向的人比較多。


逆向未來,一個專註安卓逆向的論壇。你值得擁有。


首先你得自己熟悉安卓的開發,不然複雜一點的android app你就逆向不了了.

其次,android app的殼正在興起,不知道脫殼也是很大的不利.

然後呢,就回到軟體逆向這個話題上來了.針對不同的語言,逆向是有區別的.

如果僅僅靠一個人來做,我認為對於逆向也是很不利.因為軟體的構建早就是工程化的了,

你逆向還在原子化,這又如何應對?給你源代碼你也得花大量的時間去理解,何況是閉源軟體.

總結一下學習路線:

1.學習android app 開發.

2.熟悉軟體工程.

3.學習逆向技巧與基礎知識.

4.多練習,積累經驗.

如果你只是臨時起意想學android 逆向...上面所說的不適合你.


大約還是11年的時候,那時候剛從華為出來,去了一家反病毒相關的公司,做了和逆向有一點點相關的東西,破解某應用商店協議,編寫爬蟲扒應用。

那時候 做事流程是這樣的,

1、各種操作折騰點擊應用,看不同的操作會進到什麼頁面,這些跳轉都是可以通過查看ActivityManager的log來發現的。

2、dex轉可稍微看明白一點的代碼smali,當時用的工具是dex2smali來做的。

3、分析 smali代碼,smaili代碼是很難看明白的,這個時候自己寫個簡單的應用,些不同的代碼,然後再把自己的應用反編譯了,再查看smali代碼,對應的理解smali的意思。

4、用smali代碼加log, smali的寄存器概念很要命,有時候一個下午都加不了一個有意義的log

5、根據log推測運行步驟,

6、重複 4,5 直到分析清楚應用程序的下載地址是怎麼獲取到的。

7、拿python實現流程,從商店扒程序

8、應用商店策略一旦更改,再重複1~7的操作

逆向是一個很枯燥的過程,病毒分析更枯燥,當時還屬於android比較初期的階段,現在幾乎已經沒有應用可以讓大家這麼折騰了,現在基本上要靠抓包來分析了。

也許這還算不上逆向,僅僅是逆向的一個小小應用場景。

想逆向先得會開發,要看的懂smali(偽彙編),看的懂二進位(IDA 分析so),會簽名,會抓包,會腳本。攻防技術不斷發展,逆向難度不斷增加。沒有一個路線是全部適用的,先把功能點學全再結合適用,最重要的是不斷學習的能力。


我認為樓主說的是精易論壇吧。。 我就給坑了, 無奈


有一家機構叫15PB,不知道你聽說過沒。他們的課程里就有Android 逆向分析的課程,課程不錯,很全面。你可以諮詢他們看看。


我弱雞一隻。不過我覺得如果是入門階段可以先把java基礎學好把環境配好再說其他的。然後配合看論壇看視頻,然後路就被不知不覺走出來了。還有本書《Android軟體安全與逆向分析》。


看這裡,Android安全工程師-安全技能 -SecWiki

另外SecWiki也提供其它安全方面的學習路線。


推薦閱讀:

如何評價高通驍龍820四核滿載功耗9w?
如果只按性能配置來講,oppo R11應該值多少錢?同等性能、配置的其他手機大家有推薦的嗎?
如何評價 Google 新發布的原生相機應用,體驗如何?
如何評價 Google 推出的 Chrome ARC?
按照目前react native的發展,有沒有可能幾年之後原生開發技術不再被使用?

TAG:安全軟體 | Android |