為什么要學(xué)習(xí)安卓逆向
....安卓發(fā)展一直都挺好崖咨,逆向也是屬于興趣吧陪毡,覺(jué)得比較高大上,話不多說(shuō)轮锥,開(kāi)始進(jìn)入正題
一矫钓、環(huán)境的搭建
學(xué)習(xí)安卓逆向第一步必須先把環(huán)境搭建好,這是你學(xué)習(xí)安卓逆向的開(kāi)始交胚,環(huán)境搭建好后表示正式邁入安卓逆向份汗。
Eclipse搭建安卓開(kāi)發(fā)環(huán)境
Eclipse搭建NDK開(kāi)發(fā)環(huán)境
Android 模擬器配置以及ROOT
二、JAVA層的逆向
1.程序反編譯
常用工具:APKToolKit蝴簇、 ApkIde 杯活、JEB?。
2.smali語(yǔ)法
關(guān)于smali語(yǔ)法熬词,最基本的要求是能看懂旁钧。意思就是,能在不借助java代碼的前提下互拾,熟練的快速的看出某一段smali語(yǔ)句對(duì)應(yīng)的功能
3.簡(jiǎn)單的逆向分析
熟練掌握smali語(yǔ)法之后歪今,可以嘗試逆向分析一些簡(jiǎn)單的程序,樣本等等颜矿。當(dāng)然了寄猩,現(xiàn)在很難找到適合初學(xué)者逆向分析的應(yīng)用。在這里骑疆,建議初學(xué)者自己開(kāi)發(fā)程序田篇。切記一開(kāi)始
便去找某某游戲,某某最新樣本來(lái)進(jìn)行分析箍铭,一方面泊柬,對(duì)于新手來(lái)說(shuō),收獲不大诈火。另一方面兽赁,會(huì)大大打消你的學(xué)習(xí)積極性。學(xué)習(xí)要循序漸進(jìn),那些難啃的樣本程序以后多的是機(jī)會(huì)啃刀崖!
4.常見(jiàn)靜態(tài)分析手法
a:信息收集
一個(gè)apk惊科,前期對(duì)其的一些信息收集是很有必要的,別拿到一個(gè)apk就馬上反編譯看代碼去了蒲跨。注意抓住重點(diǎn)译断。打蛇打七寸。首先關(guān)注其字符串信息或悲,服務(wù),廣播等等
b:關(guān)鍵位置定位
定位堪唐,是一個(gè)技術(shù)活巡语。這里面有很多的奇淫巧計(jì),需要大家練習(xí)淮菠。
通過(guò)“特征函數(shù)”定位男公,比如說(shuō)控件的事件函數(shù)onXXXClick, Show(),如果你要找網(wǎng)絡(luò)方面的信息HttpGet、HttpPost合陵、HttpUriRequest枢赔、socket等等,追蹤隱私IMSI拥知、IMEI,敏感操作踏拜,發(fā)送短信、撥打電話等等
c:活用logcat
logcat在之前還未出現(xiàn)動(dòng)態(tài)調(diào)試smali的時(shí)候低剔,可謂是逆向分析者們手中的一大利器速梗。logcat中包含了程序原有的一些調(diào)試信息,這些往往是不夠用的襟齿。這便有了“smali注入”
d:smali注入
通過(guò)向反編譯之后的代碼中插入自己的代碼姻锁,重打包之后,使程序運(yùn)行之后猜欺,在log中打印出目標(biāo)函數(shù)的參數(shù)位隶,返回值等我們想知道的任何東西。這樣开皿,就達(dá)到了半動(dòng)態(tài)調(diào)試apk的作用涧黄。
smali注入對(duì)smali語(yǔ)法的功能要求得稍微高一點(diǎn),而且會(huì)遇到很多不確定因素副瀑。需要多多嘗試弓熏。
5.常見(jiàn)動(dòng)態(tài)調(diào)試手法
越到后面,單純的靠靜態(tài)分析是滿足不了逆向分析人員的需求的糠睡。便出現(xiàn)了動(dòng)態(tài)調(diào)試技術(shù)挽鞠。
a:Eclipse + Apktool動(dòng)態(tài)調(diào)試apk
支持單步調(diào)試,動(dòng)態(tài)查看寄存器的值。但是不能在系統(tǒng)函數(shù)下斷點(diǎn)信认。
b:Netbeans + Apktool動(dòng)態(tài)調(diào)試apk
同上
c:jdb
支持調(diào)試的基本功能材义,可以在配置文件中預(yù)下斷點(diǎn),批量下斷點(diǎn)嫁赏,給系統(tǒng)函數(shù)下斷點(diǎn)其掂,缺點(diǎn)是沒(méi)有界面,不支持查看寄存器的值潦蝇,時(shí)常跑著跑著就飛了
d:andbug
沒(méi)用過(guò)
e:JSwat Debugger
jdb的界面版吧~
f:IDA
ida6.6以后就可以動(dòng)態(tài)調(diào)試apk了款熬。用得不多
三、Native層的逆向
目前來(lái)說(shuō)攘乒,基本上都把核心部分放在了native層贤牛。只有充分學(xué)習(xí)對(duì)這部分的逆向分析才能有更好的發(fā)展。
1.Native的開(kāi)發(fā)
要想學(xué)好逆向则酝,首先得會(huì)編寫native程序殉簸。熟練常見(jiàn)的系統(tǒng)api以及開(kāi)發(fā)流程等等
2.Native層相關(guān)機(jī)制的學(xué)習(xí)
這部分需要去分析源代碼中jni的部分內(nèi)容
3.靜態(tài)分析
這部分靜態(tài)分析沒(méi)什么技巧,唯一需要的就是對(duì)匯編指令的掌握程度沽讹!載入IDA般卑,自己看匯編指令即可,要想靜態(tài)分析出一些信息來(lái)爽雄,需要分析人員有很高的匯編語(yǔ)言功底蝠检。非一日之功!
4.動(dòng)態(tài)分析(重中之重)
動(dòng)態(tài)分析主要是利用IDA來(lái)實(shí)現(xiàn)盲链,具體的分析手法不是一點(diǎn)點(diǎn)篇幅能說(shuō)清楚的蝇率,這方面的教程網(wǎng)上也有很多了。這里就不再贅述刽沾。
四本慕、進(jìn)階篇之源碼分析
和windows平臺(tái)上的逆向差不多,要想更深入的學(xué)習(xí)下去 侧漓,了解這個(gè)系統(tǒng)的一些原理锅尘,底層上的東西是很有必要的 。android給我們提供了很大的便利布蔗。它是開(kāi)源的藤违。
分析android源代碼我一般使用:SourceInsight!支持函數(shù)高亮纵揍,任意索引顿乒,唯一的缺點(diǎn)是不支持UTF-8,不過(guò)這相對(duì)于它的優(yōu)點(diǎn)來(lái)說(shuō)泽谨,都不算是事兒~
五璧榄、應(yīng)用之加固與脫殼
1. 了解dex文件整體加密特漩、Dex代碼抽取加密。
2. 了解so文件整體加密骨杂、函數(shù)加密涂身、區(qū)段加密、加殼搓蚪、混淆蛤售。
3. 分析通用脫殼機(jī)的實(shí)現(xiàn)原理及應(yīng)用場(chǎng)景。
4. 了解主流加固特點(diǎn)及對(duì)應(yīng)的脫殼技巧妒潭。
六悴能、總之重要一點(diǎn)
學(xué)習(xí)貴在堅(jiān)持!?注重基礎(chǔ)杜耙,一定要把Java層和Native層搞懂搜骡。
學(xué)習(xí)中不要糾結(jié)細(xì)節(jié),要學(xué)會(huì)抓大放小