ipa加固防護(hù)

凡所有相伪货,皆是虛妄们衙。若見諸相非相钾怔,即見如來。

無加固的隱患

iOS系統(tǒng)相對于安卓平臺來說蒙挑,在大家的觀念里一直是比較安全的宗侦。真實(shí)的情況是這樣的嗎,未必忆蚀。在安卓上會遇到的破解矾利、劫持、盜用等問題在iOS上幾乎都會遇到蜓谋。只是很多時(shí)候梦皮,我們自以為被保護(hù)的太好了罷了。

1. 應(yīng)用砸殼

App Store上的應(yīng)用都使用了FairPlay DRM數(shù)字版權(quán)加密保護(hù)技術(shù)桃焕。使用AES 算法進(jìn)行加密剑肯。解密所需的主密鑰也以加密形式存儲在容器文件中(FairPlay保護(hù)的文件)。解密主密鑰所需的密鑰稱為“用戶密鑰”观堂。當(dāng)用戶使用iTunes让网、App Store登陸新設(shè)備時(shí),該設(shè)備向Apple服務(wù)器請求授權(quán)师痕,從而獲得用戶密鑰溃睹。在試圖使用容器文件時(shí),存儲在文件中的主密鑰隨后與用戶密鑰匹配胰坟,并且如果成功則允許使用因篇。

第一種,最簡單的方法笔横,就是從PP助手等相關(guān)平臺去下載已經(jīng)砸過殼的應(yīng)用竞滓。非常簡單。

第二種吹缔,自己砸殼

最早的砸殼工具是stefanesser寫的dumpdecrypted商佑,通過手動注入然后啟動應(yīng)用程序在內(nèi)存進(jìn)行dump解密后的內(nèi)存實(shí)現(xiàn)砸殼,這種砸殼只能砸主App可執(zhí)行文件厢塘。

對于應(yīng)用程序里面存在framework的情況可以使用conradev的dumpdecrypted茶没,通過_dyld_register_func_for_add_image注冊回調(diào)對每個(gè)模塊進(jìn)行dump解密。但是這種還是需要拷貝dumpdecrypted.dylib晚碾,然后找路徑什么的抓半,還是挺麻煩的。

比較簡單的做法是使用frida-ios-dump格嘁,該工具基于frida提供的強(qiáng)大功能通過注入js實(shí)現(xiàn)內(nèi)存dump然后通過python自動拷貝到電腦生成ipa文件琅关,通過以下方式配置完成之后真的就是一條命令砸殼。

環(huán)境配置:
首先上面也說了該工具基于frida讥蔽,所以首先要在手機(jī)和mac電腦上面安裝frida涣易,安裝方式參數(shù)官網(wǎng)的文檔:https://www.frida.re/docs/home/

如果mac端報(bào)如下錯:

Uninstalling a distutils installed project (six) has been deprecated` `and` `will be removed` `in` `a future version. This` `is` `due to the fact that uninstalling a distutils project will only partially uninstall the project.

使用如下命令安裝即可:

sudo pip install frida –upgrade –ignore-installed six

然后將越獄設(shè)備通過USB連上電腦進(jìn)行端口映射:

iproxy 2222 22

到此環(huán)境就配置好了(另當(dāng)前python基于2.x的語法,先切換到python 2.x的環(huán)境)冶伞。

最簡單的方式直接使用./dump + 應(yīng)用顯示的名字即可新症,如下:

 ./dump.py 微信

如果應(yīng)用名稱重復(fù)了,可以使用如下命令查看安裝的應(yīng)用的名字和bundle id:

./dump.py -l

然后使用如下命令對指定的bundle id應(yīng)用進(jìn)行砸殼即可:

./dump.py -b com.tencent.xin

其他方式如:Clutch响禽,class-dump+ cycript + dumpdecrypted等大家可以自行研究徒爹。

2. 砸殼之后

使用命令查看ipa是否已砸殼

otool -l ShareCarProject | grep crypt

使用class-dump導(dǎo)出頭文件

class-dump -H ShareCarProject.app/ -o Headers

我們就可以在.h文件中查看所有公開方法的聲明,方便之后使用MonkeyDev hook該方法芋类。
類似如下:

對ipa包重簽名后隆嗅,就可以拿來玩了。

使用IDA工具靜態(tài)分析源碼

網(wǎng)盤鏈接 密碼:5sm3

選擇一個(gè)版本運(yùn)行侯繁,然后點(diǎn)擊new胖喳,選擇自己要分析的應(yīng)用(上面我們破解出來的.decrypted文件,.app文件贮竟,.ipa文件都可以選擇)丽焊。然后一直點(diǎn)下一步OK即可。

點(diǎn)擊F5 即可進(jìn)入解析出來的源碼界面

MonKeyDev

MonkeyDev原文安裝鏈接咕别,安裝完成后技健,新建項(xiàng)目時(shí),關(guān)注以下界面:

緊接著.我們需要做的就是把我們的ipa文件放到指定位置(當(dāng)然是放在工程目錄下了,這里就不多說了.).然后添加到工程中去.里面的put ipa or app here文件不要刪除惰拱。

在項(xiàng)目中雌贱,修改你想要控制的代碼。如果是動態(tài)庫偿短,還需如下設(shè)置欣孤,不使用runtime庫。

如此翔冀,便成功修改了一個(gè)應(yīng)用导街,常見的有微信搶紅包、修改運(yùn)動步數(shù)等纤子。應(yīng)用的一切都被暴露出來了搬瑰,危害不僅限于此。

簡單加固手段

  1. 完整性校驗(yàn)

     NSBundle *bundle = [NSBundle mainBundle];
     NSDictionary *info = [bundle infoDictionary];
     if ([info objectForKey:@"SignerIdentity"] != nil)
     {
     return YES;
     }
    return NO;
    

通過檢測SignerIdentity判斷是Mach-O文件否被篡改

原理是:SignerIdentity的值在info.plist中是不存在的控硼,開發(fā)者不會加上去泽论,蘋果也不會,只是當(dāng)ipa包被反編譯后篡改文件再次打包卡乾,需要偽造SignerIdentity翼悴。

  1. 越獄判斷

嘗試使用NSFileManager判斷設(shè)備是否安裝了如下越獄常用工具:

/Applications/Cydia.app
/Library/MobileSubstrate/MobileSubstrate.dylib
/bin/bash
/usr/sbin/sshd
/etc/apt

但是不要寫成BOOL開關(guān)方法,給攻擊者直接鎖定目標(biāo)hook繞過的機(jī)會。攻擊者可能會改變這些工具的安裝路徑鹦赎,躲過你的判斷谍椅。

那么,你可以嘗試打開cydia應(yīng)用注冊的URL scheme:

if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){
     NSLog(@"Device is jailbroken");
}

但是不是所有的工具都會注冊URL scheme古话,而且攻擊者可以修改任何應(yīng)用的URL scheme雏吭。

那么,你可以嘗試讀取下應(yīng)用列表陪踩,看看有無權(quán)限獲日让恰:

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){
        NSLog(@"Device is jailbroken");
        NSArray *applist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/User/Applications/"
                                                                               error:nil];
        NSLog(@"applist = %@",applist);
}

也可以通過檢測當(dāng)前程序運(yùn)行的環(huán)境變量:

void printEnv(void)
{
    char *env = getenv("DYLD_INSERT_LIBRARIES");
    NSLog(@"%s", env);
}

未越獄設(shè)備返回結(jié)果是null,越獄設(shè)備就各有各的精彩了肩狂,尤其是老一點(diǎn)的iOS版本越獄環(huán)境摘完。

  1. 簡單加固手段

分為:

方法名混淆
明文字符串混淆

原理即字符串替換,使用#define定義傻谁,然后用腳步替換成不可預(yù)知的字符串孝治。當(dāng)然還有比較復(fù)雜的LLVM加固,這個(gè)單列一篇栅螟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荆秦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子力图,更是在濱河造成了極大的恐慌步绸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃媒,死亡現(xiàn)場離奇詭異瓤介,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赘那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門刑桑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人募舟,你說我怎么就攤上這事祠斧。” “怎么了拱礁?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵琢锋,是天一觀的道長。 經(jīng)常有香客問我呢灶,道長吴超,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任鸯乃,我火速辦了婚禮鲸阻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己鸟悴,他們只是感情好陈辱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遣臼,像睡著了一般性置。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揍堰,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音嗅义,去河邊找鬼屏歹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛之碗,可吹牛的內(nèi)容都是我干的蝙眶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼褪那,長吁一口氣:“原來是場噩夢啊……” “哼幽纷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起博敬,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤友浸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后偏窝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體收恢,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年祭往,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伦意。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硼补,死狀恐怖驮肉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情已骇,我是刑警寧澤离钝,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站疾捍,受9級特大地震影響奈辰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乱豆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一奖恰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦瑟啃、人聲如沸论泛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屁奏。三九已至,卻和暖如春错负,著一層夾襖步出監(jiān)牢的瞬間坟瓢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工犹撒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留折联,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓识颊,卻偏偏與公主長得像诚镰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子祥款,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 砸殼 軟件脫殼刃跛,顧名思義抠艾,就是對軟件加殼的逆操作,把軟件上存在的殼去掉(解密)奠伪。 砸殼原理 應(yīng)用加殼(加密)提交給...
    looha閱讀 1,311評論 0 2
  • 砸殼原理 砸殼顧名思義就是對軟件進(jìn)行逆向操作绊率,對已加密的軟件進(jìn)行解密谨敛,從而獲取真實(shí)軟件源碼。App Store下載...
    Hanfank閱讀 19,232評論 7 12
  • 概述 軟件脫殼滤否,顧名思義脸狸,就是對軟件加殼的逆操作,把軟件上存在的殼去掉(解密)藐俺。 砸殼原理 應(yīng)用加殼(加密)提交給...
    沒八阿哥的程序閱讀 7,097評論 0 2
  • 技 術(shù) 文 章 / 超 人 App Store上的應(yīng)用都使用了FairPlay DRM數(shù)字版權(quán)加密保護(hù)技術(shù)Fair...
    樹下敲代碼的超人閱讀 20,530評論 21 55
  • 逆向工程的目的 1)分析競品的最新研究或者產(chǎn)品原型(包括所用的技術(shù)炊甲,所使用的框架)2)學(xué)術(shù)/學(xué)習(xí)目的。3)破解應(yīng)用...
    90后的思維閱讀 6,944評論 3 14