iOS逆向編程

iOS逆向編程

我不敢說(shuō)我這篇文章是最全的逆向工程解說(shuō),但是我可以肯定的告訴你,你圍繞我這篇文章,無(wú)論是逆向的方法、工具的選擇,你可以少走很多彎路,逆向道路千千條,我為你開辟一道陽(yáng)關(guān)大道。

前言:

還記得搞iOS逆向編程已經(jīng)是去年的事情了,趁現(xiàn)在還有點(diǎn)印象,趕緊打開了簡(jiǎn)書寫下自己的學(xué)習(xí)過(guò)程。

先給大家看看我的工具:


這里用到的工具 和 使用方法 更具體的可以去百度,你可以圍繞我這篇文章去百度 尋找需要的工具


1、Jason-2(面具) 用于json格式化顯示,正常iOS 開發(fā)網(wǎng)絡(luò)請(qǐng)求 header 頭返回application/json都會(huì)用到。(下次有時(shí)間再補(bǔ)圖)

2、Charles (青花瓷)? 設(shè)置代理后可進(jìn)行抓URI 便于我們分析項(xiàng)目里的數(shù)據(jù)。(下次有時(shí)間再補(bǔ)圖)

3、Reveal 這是分析項(xiàng)目節(jié)目圖層的工具,當(dāng)然前提是你得有個(gè)越獄手機(jī)才可以使用。(后面推薦個(gè)更好的FLEXLoader)

越獄手機(jī) cydia下載Reveal 后




選中需要查看圖層的app,這里我選擇了最后一個(gè)


再打開app ,進(jìn)去手機(jī)頁(yè)面

這時(shí)候Mac端的Reveal 就能同步看到圖層關(guān)系了,便于我們分析程序使用了哪些控件。

效果如下:

其實(shí)還有一種更好的方法:截圖你可能也看到了!沒錯(cuò),那就是FLEXLoader

和手機(jī)端打開Reveal一樣,我們選擇項(xiàng)目 后,再進(jìn)去 FLEXLoader 效果是這樣的:


多了一個(gè)工具條一樣的東西,我們點(diǎn)select 試試



一樣可以查看到圖層之間的關(guān)系,當(dāng)然只是沒有Reveal 看到的更令人愉悅而已。

4、iFUNBox 是連接手機(jī) 后 方便我們查看 手機(jī)文件的工具。(下次有時(shí)間再補(bǔ)圖)

5、iResign 是用來(lái)重新簽名app的工具(之前簽名繞了好多個(gè)彎子,使用了很多命令,雖然也成功了,但是用了這個(gè)工具,我真的是愛不釋手)(下面有用到)

6、go2shell 是在當(dāng)前文件位置打開終端的一個(gè)小工具(避免了使用cd到當(dāng)前文件位置,就相當(dāng)于window里面的shift+右鍵 打開終端一個(gè)意思)(可選)

7、machOview? 這是用來(lái)查看可執(zhí)行文件的結(jié)構(gòu)的(查看MachO文件格式信息,IOS系統(tǒng)中可執(zhí)行程序?qū)儆贛ach-O文件格式)其實(shí)你不用也能逆向(下次有時(shí)間再補(bǔ)圖)

8、IDA ,我下載了兩種:hopper Disassembiler v4 和? IDA、? IDA 64 (將二進(jìn)制翻譯成為代碼的工具,前提是 你的二進(jìn)制已經(jīng)砸殼成功)。(下次有時(shí)間再補(bǔ)圖)

9、最后就是Xcode了 ,我們需要給他安裝一個(gè)插件:monkeyDev

你可能會(huì)百度看到網(wǎng)上教程說(shuō)到iOSOpenDev,iOSOpenDev也能做到,但是那玩意太久遠(yuǎn)了,monkeyDev讓我更親近點(diǎn)。你可以選擇這個(gè)插件。

這玩意是干嘛的呢,告訴你,你逆向?qū)懙拇a,就是在這里創(chuàng)建新的項(xiàng)目里面寫的!(和我們正常創(chuàng)建iOS項(xiàng)目一樣)

網(wǎng)上有很多種寫法,但是對(duì)于iOS開發(fā)者是不是更喜歡使用Xcode的呢???答案是肯定的!!!



準(zhǔn)備逆向前說(shuō)明一下:裝逼神器

cycript是什么?

網(wǎng)上很多講到了cycript,其實(shí)這個(gè)沒啥大用,說(shuō)白了就是調(diào)試用的。也能看看效果

因?yàn)閯?dòng)態(tài)調(diào)試嘛!!!

你可以選擇不用他,反正可以爽爽。用法筆記:http://www.lxweimin.com/p/aeaf9c956d1c

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

?????????????????????????

我要強(qiáng)調(diào)的是:這個(gè)改了只是調(diào)試,真正的逆向是:

Xcode用monkeyDev 創(chuàng)建的項(xiàng)目運(yùn)行得到一個(gè)可執(zhí)行的dylib文件(再使用yololib注入到咂過(guò)殼的app里面去,重新簽名,生成新的ipa)

??????????????????????????

yololib:這個(gè)就是個(gè)可執(zhí)行文件,具體的百度,后面我會(huì)再詳細(xì)說(shuō)明。

番外:非本文內(nèi)容:

下載得到線上ipa

你可以使用windows 系統(tǒng)安裝的愛思助手下載得到安裝包



好了,工具也介紹了,現(xiàn)在開始我們的逆向之旅


? 越獄手機(jī)手機(jī)客戶端下載愛思助手,安裝一款你需要砸殼的app

? 基本都是加過(guò)密的,需要砸殼,怎么砸殼呢? 下面我給大家列一下我記得筆記:

//Clutch砸殼

? ? //? ? 拷貝到手機(jī)里面

? ? //? ? scp Clutch root@192.168.1.94:/usr/bin/

? ? //連接手機(jī)

? ? //? ? ssh root@192.168.1.94

? ? //Clutch -i 查看安裝的bundleID

? ? //Clutch -d bundleID

你需要準(zhǔn)備:

第一:Clutch :GitHub下載最新版Clutch,https://github.com/KJCracks/Clutch/releases

下載得到的Clutch 拷貝到手機(jī)/usr/bin/里面(記住要cd到Clutch 的位置,為了方便你可以使用我推薦的go2shell工具)

第二:ssh? Mac 終端自帶ssh,手機(jī)需要cydia里面安裝插件ssh (不會(huì)的去百度)

root@后面的是Mac 電腦的IP地址

砸殼步驟:(下次有時(shí)間再補(bǔ)圖)

Clutch拷進(jìn)手機(jī)

ssh連接手機(jī),

手機(jī)就有了Clutch 功能,

Clutch -i 命令可以查看所以安裝的app的bundleID(省的你去用machoview 查看了)

Clutch -d bundleID? 砸對(duì)應(yīng)bundleID 的app

這時(shí)候終端會(huì)有砸殼的進(jìn)度,最后會(huì)告訴你砸完殼后的存儲(chǔ)路徑

第三: 怎么拿到咂過(guò)的可執(zhí)行文件呢? 用命令行???? no no no!!!? 真的用命令行,那得多枯燥,這時(shí)候就用到我給你推薦的工具了:iFunbox (自己百度)

第四:使用我推薦的兩種IDA ,打開IDA? 導(dǎo)入剛才的可執(zhí)行文件,這時(shí)候就可以分析整個(gè)項(xiàng)目了!!!記住這個(gè)是分析!

這時(shí)候你的準(zhǔn)備工作已經(jīng)做了一大半了,oc項(xiàng)目都有.h 和 .m文件,.h 是暴露出來(lái)的,當(dāng)然也就能獲取到。使用Class-dump獲取(下次有時(shí)間再補(bǔ)圖)

第五:Class-dump (自行百度下載安裝)

class-dump的下載地址:http://stevenygard.com/download/class-dump-3.5.tar.gz

使用方法:(方法很簡(jiǎn)單,你也別去百度了,下面的筆記足夠了)

//? ? Class-dump 的使用

//? 1、 cd 到app位置

//? 2、 class-dump -H xxx.app -o test(備注:xxx.app 是app名稱? test是放頭文件的文件夾 這個(gè)名字你隨便起 )

這時(shí)候你的test文件夾就有了所有頭文件了,下面開始我們的逆向之旅:monkeyDev 創(chuàng)建項(xiàng)目

Xcode 的monkeyDev 插件自行百度安裝

你可能要疑惑,我新建的hook項(xiàng)目 和我砸殼的怎么關(guān)聯(lián)呢?我們帶著疑惑慢慢看。

1、新建

2、將剛才 Class-dump 的頭文件headers 也拖進(jìn)項(xiàng)目,Xcode 開發(fā)著 當(dāng)然用Xcode看更讓人愉悅啦!

3、修改配置文件plist,位置在如圖所示地方?

修改:

改成你砸殼的Bundles id :(為了你們方便 我復(fù)制一下代碼)

打開方式,然后替換下面的代碼

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<dict>

Filter


Bundles


<string>xingfu.XFExpressCameraDemo</string>

</dict>

</plist>

4、.mm文件編寫我們的hook 代碼,咋一看還挺像oc的呢!!!

先截個(gè)圖看看:



我們來(lái)分析一下:

CHDeclareClass(UIViewControllerWrapperView);

括號(hào)里面是你要hook的對(duì)象 UIViewControllerWrapperView 這個(gè)類是我砸殼的app里面的一個(gè)類

CHOptimizedMethod(1, self, void, UIViewControllerWrapperView, btnClick,id,arg1)

括號(hào)里面是你要在UIViewControllerWrapperView 這個(gè)類 hook的方法 (btnClick 是方法名),參數(shù)是id? !!!?

我是怎么找到的呢????

1、還記得我給你們提到的工具Reveal和FLEXLoader 嗎???UIViewControllerWrapperView 類 (你要找的類)可以在界面層級(jí)看到。

2、還記得我給你們提到的獲取頭文件headers嗎?(Class-dump 得到),UIViewControllerWrapperView.h得到的頭文件里面的方法。(我找到的是btnClick)

? UIButton*btn = arg1;

? ? btn.backgroundColor = [UIColor redColor];

? ? // write code here ...

? ? NSLog(@"===================");

? ? NSLog(@"這是我hook植入的代碼");

? ? NSLog(@"===================");

? ? UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"hook" message:@"這是我hook的代碼"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delegate:nilcancelButtonTitle:@"好的"otherButtonTitles: nil];

? ? [alertshow];

上面的是我給他?的hook的代碼。

最后記得釋放哦


5、寫完運(yùn)行 得到一個(gè)dylib動(dòng)態(tài)庫(kù)

我們?nèi)タ纯次覀兊某晒?/i>

6、項(xiàng)目怎么注入動(dòng)態(tài)庫(kù)呢?百度一搜,網(wǎng)上資料都是一堆命令行腳本!麻煩?是的,非常麻煩!

這時(shí)候就用到 yololib 了,GitHub 自行下載

yololib不需要安裝,網(wǎng)上一堆講解,我不想說(shuō)有多好,反正我看著就頭疼。

我的方法很粗暴,我們直接拿它用

粗暴的方法:把dylib動(dòng)態(tài)庫(kù)。 yololib? 都拷貝到。XFExpressCameraDemo.decrypted(砸殼得到的那個(gè)文件)位置:


這樣就可以粗暴的使用yololib 命令了

使用yololib簡(jiǎn)單的執(zhí)行下面一句就可以成功完成注入。

注意:我們先cd到之前保存的XFExpressCameraDemo.decrypted位置,即已砸完殼的可執(zhí)行文件位置。

./yololib 目標(biāo)可執(zhí)行文件 需注入的dylib? (空格隔開)

( 目標(biāo)可執(zhí)行文件:因?yàn)槲乙呀?jīng)cd到目標(biāo)位置,直接使用名字即可)

成功效果:

7、最后我們重新簽名

你可以百度到網(wǎng)上一堆使用腳本重新簽名的方法,這些都太繁瑣太繁瑣。逆向難,很多原因是因?yàn)榉爆崳瑳]有一篇合適的文章或者教程入門。可是看我的文章你是不是覺得也不是太難啊,沒錯(cuò),就是so easy! 不廢話了,我們繼續(xù)最后一個(gè)環(huán)節(jié) 重新簽名ipa!

使用工具iResign (百度自行下載,或者去github找)


1、ipa 路徑

2、embedded.mobileprovision路徑 :這就是配置文件(iOS開發(fā)打包的pp文件)


你可以用你自己賬戶新建一個(gè),不會(huì)的自己百度

iOS開發(fā)都知道,這個(gè)里面有你的開發(fā)者證書信息,bundleID,團(tuán)隊(duì),有效期,設(shè)備ID等等(線上的話是生產(chǎn)證書)

3、entitlements.plist的路徑:這個(gè)需要你自己用Xcode建:

(網(wǎng)上一堆資料用腳本就是搞這個(gè)的,我們粗暴點(diǎn),自己用plist建,還不會(huì)出錯(cuò)!)


關(guān)鍵詞復(fù)制下面的介紹

(1)、key:? application-identifier? ? ? value:? 2Y2QCD75VJ.xingfu.XFExpressCameraDemo

value這是app ID,你可以這樣看到?

(2)、com.apple.developer.team-identifier:appID 前面的那部分

(3)、get-task-allow 設(shè)置NO就行了

(4)、keychain-access-groups (數(shù)組)item0: app ID

4、需要修改的appID,配置的pp證書里面是什么和它一一對(duì)應(yīng)即可

5、選擇對(duì)應(yīng)的開發(fā)者團(tuán)隊(duì)(iOS程序員都會(huì),不多說(shuō)了)


重新簽名即可得到你hook后的app啦!!!!

運(yùn)行效果(下次有時(shí)間再補(bǔ)圖)

(完結(jié))

(完結(jié))

(完結(jié))

(完結(jié))

(完結(jié))

(完結(jié))

有人疑惑了,你讓我安裝的IDA 也沒用到啊!!!是的,入門級(jí)的教程是上面的,下面番外篇才是進(jìn)階。

到這里了,還不點(diǎn)贊,后面的進(jìn)階我就不寫了


番外篇:iOS逆向之使用ida (偽代碼? ? 靜態(tài)分析項(xiàng)目)

? ? ? ? ? ? ? ? ? iOS逆向之 Xcode動(dòng)態(tài)分析項(xiàng)目

? ? ? ? ? ? ? ? ? iOS逆向使用cycript(動(dòng)態(tài)調(diào)試)

? ? ? ? ? ? ? ? ? iOS代碼保護(hù),數(shù)據(jù)加密,反調(diào)試,反注入,代碼混淆

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,791評(píng)論 6 545
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,795評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,943評(píng)論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,057評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,773評(píng)論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,106評(píng)論 1 330
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,082評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,282評(píng)論 0 291
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,793評(píng)論 1 338
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,507評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,741評(píng)論 1 375
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,220評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,929評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,325評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,661評(píng)論 1 296
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,482評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,702評(píng)論 2 380