1. 程式人生 > 其它 >爬蟲工程師教你如何入門Android逆向

爬蟲工程師教你如何入門Android逆向

背景
這篇文章寫給Python爬蟲工程師們,網際網路行業的處境越來越艱辛,流量越來越湧向移動端,爬蟲和反爬的攻防不斷升級,這一切的一切,都讓我們只能一刻不停的學習新技能,才能保持競爭力和養家餬口(一群單身狗,掙的錢連自己都養不活) 。

App逆向不斷出現在爬蟲工程師的日程表裡,可是到底該怎麼入門App逆向?

1. 指出一些自學的誤區

2.推薦一些入門的學習資料

這篇文章的目標讀者是計劃學習Android逆向的爬蟲er,他們可能有如下特徵

幾乎沒有Java基礎

幾乎沒有Android基礎

對Android逆向的思路和工具缺少了解

下文會一一解答這些困惑和焦慮,但適合每個人的學習模式也各有不同,可以選擇性的實踐。本文對Android逆向老手幫助不大,但如果老手願意在評論區分享經驗和教訓,給過來人一些指點,我表示衷心的感謝。

一、自學Android逆向的誤區和陷阱


1.1. 不要試圖熟練掌握Java程式設計和Android開發後再開始學習逆向

Java是一門複雜精妙 的語言,但你又不是要當Java開發工程師???

你可能很想反駁,那我不懂Java,不懂Android怎麼可能搞得了逆向,佛系逆向隨緣逆向?別別別,我可沒說這話,我指的只是入門時不必精通Java和Android。原因有一堆,但我認為最主要的原因在於——開發和逆向的關注點不同。

我們先羅列一下Android面試和實際應用開發中出現的一些技術關鍵詞:

Java虛擬機器,Davlik虛擬機器,UI佈局,四/五大元件及其細節,Intent,Handler,資料持久化,程序執行緒和非同步,
SharedPreferences,螢幕適配,相容性,Android訊息機制,WebView,bitmap,Java與C++如何相互呼叫,
第三方SDK接入,記憶體洩漏和管理,網路通訊和優化,熱修復和外掛化,Dex分包和優化,Kotlin語言
RecyclerView,註解框架,音視訊的處理,設計模式,應用框架,其他優化……
而我們破解時需要關注什麼?尤其是對爬蟲的逆向需求來說,簡而言之,我們在破解加密欄位如何生成,那我們的關鍵詞是這些:

抓包和反抓包,App的混淆,加固,高度混淆
加解密演算法,Jni,放在C中的加密,smali
Java層動態除錯,Jadx,Jeb,ida


開發人員需要開發和實現App的各種功能、關注數十個廠商上百個機型的適配、Apk體積的優化,App效能的優化,更吸引使用者的UI,更友好的bug解決機制(熱修復),而我們破解,一般來說,只需要關注應用的網路通訊、加解密方法、安全防護即可。開發和逆向的目標完全不同,所以你並不需要對開發的那一套了然於胸,才能開始破解。

除此之外,App的安全問題只是Android開發的眾多議題之個。一部分Android開發人員,甚至連反編譯App的流程和工具都只是聽聞過而已,尤其是對於小廠/一般App,安全問題它們能投入的精力十分有限,這個原因十分好理解。

狗仔和偷拍只是明星成名之後才會煩惱的事,而十八線女星正在下雨的橫店乞討著生活,App也是這樣,如果你搞的不是大廠App(騰訊系/阿里系/今日頭條系等)、超級App(支付寶/微信/抖音/快手等),或者特殊用處的App(買票/支付/網商等),那麼開發人員給App盤個市面上常見的加固,弄個so層的加密,已經是它們防護的上限,可能這些不算太簡單,但難也難得有限。因為App的使用者留存和開發人員的溫飽才是他們最要命的議題。

所以,你不必花太多時間瞭解和實踐紛繁複雜的Android開發知識,只需要掌握Java的基礎語法,Android的基礎知識,就可以專注於逆向所需要關注的各種技術和方法了。

1.2. 不要好高騖遠

1.3. 不要收集過多的資料 & 分辨資料的時效性

1.4. 不要自負,覺得Android逆向很簡單

二、Android逆向入門的資料和基礎
這些書和內容都是非常好的,我這次沒有提供百度雲連結,網上資源很多,我很希望大家通過pdf資料被大佬的文筆和內容所吸引和折服,然後購買正版書籍放在身邊看。

一、基礎中的基礎

1,java

《Java 核心技術 卷一》1-6章節
主要關注裡面的這些基礎:Java基礎資料型別,Java面向物件和三大特性,Java介面,String類,Array,Map。
你看完這幾章,大致就可以看懂簡單的Java程式碼了。


2.Android

《第一行程式碼(第2版)》
這本書簡單,直白,通俗易懂,寫的很好,是公認的Android入門書。
你可以認認真真照著例子全部敲一遍,也可以只走馬觀花了解一邊App的開發流程,看完本書,你會明白一個Android App是怎麼從無到有。


3.加解密

《Java 加密與解密的藝術 (第二版)》
講了如何使用Java實現各種各樣的加密,這本書是工具書,建議買一本,很不錯,用到就翻翻,平時上廁所也可以當成廁所讀物。
就這麼簡單,你就可以開始Android逆向之旅了,這是最簡單的配置,按照需求,你後續可以學習這些東西。


二、Android逆向書籍和資料

1.《Android 軟體安全權威指南》

白色的封面,我愛叫它白皮書。這本書真的太棒了,如果你想入門Android逆向,這本書幾乎沒法跳過。Android逆向入門需要的方方面面,它都涉及到了,而且講的還都有內容有深度。
這本書適合按照需求找章節看,如果按照順序看,你可能會死在第三章“Dalvik可執行格式與位元組碼規範”
我重新排一下序,同時,我建議第一章的軟體安裝和環境配置,別急著去實踐,可以裝了java開發環境後,用jadx或者jeb萬金油直接擼,但如果你喜歡敲命令列,用無大礙,下面的閱讀順序只是我個人喜好,讀者自行甄別和選擇。
第一、二章——環境搭建和如何分析Android程式,瀏覽即可。
第三、第四章——Dalvik可執行格式與位元組碼規範和Android檔案格式,瀏覽即可,內容很重要,但不是入門的內容。
第五章——靜態分析Android app,這也是很多培訓課程的第一課,我個人也認為這個應該先看,而且寫的很好。
第六章——動態分析Android應用,寫的很好,但6.1的動態分析框架我沒有用過,似乎有些老舊不太好用,讀者可以試試。
第十章——Hook與注入,Xposed+Frida是這一章節的重點,Frida是目前最流行的動態插樁工具。
第一十章節——軟體保護技術,講的很全面。
章節七八九是Native層的內容,我把它劃分到下一部分,入門單單指Java層,章節十二是軟體殼的內容,也是進階的內容。


2.《Android應用安全防護和逆向分析》

黃色封面,我叫它黃皮書,這本書的內容也充實有料,和白皮書一樣,也是面向Android開發/安全人員,門檻比較高。
我個人也是建議按照模組看,按照順序看的話小心坑。
全書分成三個部分,防護篇和工具篇都講的很好。這本書也是必備。
這兩本書是引路明燈,但光看這兩本書,是遠遠不夠的,你需要真正的實戰,還有更多更廣更全的資料。


三、入門補充,我建議這些按照需求,或者在遇到的時候再學習和查閱

Java——異常處理/反射/動態代理,這對你理解逆向中的Hook等技術非常有用
Android——網路請求框架/應用框架/……


三、Android逆向長遠的資料
這部分內容非常多且雜,我需要好好整理一下。大家加油。