本篇內(nèi)容主要從實(shí)現(xiàn)微信抓取來(lái)講述如何在Android平臺(tái)來(lái)逆向APP适贸。這篇文章主要面向剛接觸逆向工程灸芳,同時(shí)又對(duì)逆向有迫切實(shí)際需求的同學(xué),讓其少走彎路拜姿,有跡可循烙样;避免篇幅太長(zhǎng),內(nèi)容過于初級(jí)蕊肥,本文不會(huì)從gi的使用t谒获,linux基本命令一一贅述。
如有表述不當(dāng)或紕漏之處壁却,歡迎指正批狱。
背景介紹
一年前,在工作中儒洛,有做數(shù)據(jù)抓取的同學(xué)找到我問精耐,能不能幫他們實(shí)現(xiàn)從客戶端來(lái)抓取微信的消息,甚至是幫他們實(shí)現(xiàn)一些特定的功能需求琅锻。秉著樂善好施的為人基本準(zhǔn)則卦停,Zoe當(dāng)然是一口答應(yīng),此等小事恼蓬,不在話下惊完,下周一過來(lái)拿PoC方案。
既然夸下捍τ玻口小槐,那Zoe也只能周末加班加點(diǎn),來(lái)研究微信的逆向工作,還在Android的逆向在當(dāng)下也算趨于成熟凿跳,有不少可用的方案和框架件豌,再加上抓取同學(xué)的需求也只是集中在數(shù)據(jù)的獲取,所以幾天的時(shí)間還是足夠充裕的控嗜。
由于這篇文章Zoe主要是從實(shí)際操作出發(fā)茧彤,所以不會(huì)提前介紹「Reverse Engineering」相關(guān)的知識(shí),不過但凡涉及基礎(chǔ)知識(shí)點(diǎn)的地方疆栏,Zoe都會(huì)一一點(diǎn)明曾掂,還忘各位同學(xué)及時(shí)補(bǔ)充相關(guān)知識(shí)。
確定安裝包
這里很簡(jiǎn)單壁顶,我們需要確定一個(gè)版本的安裝包來(lái)做為我們研究的對(duì)象珠洗,或者說是作為以后使用的主要對(duì)象。其原因是Android的資源在不同版本中是有不同的ID若专,大多情況下我們需要使用這些ID來(lái)確定我們要使用的資源许蓖,比如按鍵的點(diǎn)擊等等。
這里富岳,我們第一考慮的不是其對(duì)逆向工作的難易程度蛔糯,而是先確認(rèn)所選的安裝包能不能滿足業(yè)務(wù)的基本使用,以及會(huì)不會(huì)存在其他風(fēng)險(xiǎn)窖式。比如選了一個(gè)很老的微信版本蚁飒,他根本就不支持掃描二維碼,那我們抓取同學(xué)的業(yè)務(wù)需求就跟本沒法滿足萝喘。
另外淮逻,我們還需要選擇當(dāng)下最新的版本,主要可避免升級(jí)提示帶來(lái)的麻煩阁簸,同時(shí)最大的原因可以增加開發(fā)工作的存活有效期爬早,越老的版本,其不能正常正常使用的風(fēng)險(xiǎn)也就越高启妹。
這里微信以6.5.14版本為例來(lái)展開后續(xù)工作筛严。
脫殼/解壓APK
一般情況下我們的APK會(huì)被加殼,這是軟件安全的一般手段饶米,其目的就是讓軟件的真是執(zhí)行代碼不易直接被看到桨啃。這一這里是不“易”而不是不“能”,也就說檬输,加殼并不能完全阻止其他人的惡意行為照瘾。
我們使用apktool工具講APK解壓并轉(zhuǎn)換成smali代碼,smali是一種JVM運(yùn)行的機(jī)器碼丧慈,這也將是我們之后工作的主要研究對(duì)象析命。
使用如下命令將APK解壓,很幸運(yùn)微信這個(gè)版本并沒有加殼,當(dāng)然了之前的版本也沒有鹃愤,
待上述命令執(zhí)行完畢簇搅,我們得到如下結(jié)構(gòu)的代碼目錄,
這基本等同于微信的源碼了昼浦,我們的主要工作也將從此處展開馍资。