ipa加固防護

凡所有相,皆是虛妄。若見諸相非相,即見如來。

無加固的隱患

iOS系統相對于安卓平臺來說,在大家的觀念里一直是比較安全的。真實的情況是這樣的嗎,未必。在安卓上會遇到的破解、劫持、盜用等問題在iOS上幾乎都會遇到。只是很多時候,我們自以為被保護的太好了罷了。

1. 應用砸殼

App Store上的應用都使用了FairPlay DRM數字版權加密保護技術。使用AES 算法進行加密。解密所需的主密鑰也以加密形式存儲在容器文件中(FairPlay保護的文件)。解密主密鑰所需的密鑰稱為“用戶密鑰”。當用戶使用iTunes、App Store登陸新設備時,該設備向Apple服務器請求授權,從而獲得用戶密鑰。在試圖使用容器文件時,存儲在文件中的主密鑰隨后與用戶密鑰匹配,并且如果成功則允許使用。

第一種,最簡單的方法,就是從PP助手等相關平臺去下載已經砸過殼的應用。非常簡單。

第二種,自己砸殼

最早的砸殼工具是stefanesser寫的dumpdecrypted,通過手動注入然后啟動應用程序在內存進行dump解密后的內存實現砸殼,這種砸殼只能砸主App可執行文件。

對于應用程序里面存在framework的情況可以使用conradev的dumpdecrypted,通過_dyld_register_func_for_add_image注冊回調對每個模塊進行dump解密。但是這種還是需要拷貝dumpdecrypted.dylib,然后找路徑什么的,還是挺麻煩的。

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

環境配置:
首先上面也說了該工具基于frida,所以首先要在手機和mac電腦上面安裝frida,安裝方式參數官網的文檔:https://www.frida.re/docs/home/

如果mac端報如下錯:

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

然后將越獄設備通過USB連上電腦進行端口映射:

iproxy 2222 22

到此環境就配置好了(另當前python基于2.x的語法,先切換到python 2.x的環境)。

最簡單的方式直接使用./dump + 應用顯示的名字即可,如下:

 ./dump.py 微信

如果應用名稱重復了,可以使用如下命令查看安裝的應用的名字和bundle id:

./dump.py -l

然后使用如下命令對指定的bundle id應用進行砸殼即可:

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

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

2. 砸殼之后

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

otool -l ShareCarProject | grep crypt

使用class-dump導出頭文件

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

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

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

使用IDA工具靜態分析源碼

網盤鏈接 密碼:5sm3

選擇一個版本運行,然后點擊new,選擇自己要分析的應用(上面我們破解出來的.decrypted文件,.app文件,.ipa文件都可以選擇)。然后一直點下一步OK即可。

點擊F5 即可進入解析出來的源碼界面

MonKeyDev

MonkeyDev原文安裝鏈接,安裝完成后,新建項目時,關注以下界面:

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

在項目中,修改你想要控制的代碼。如果是動態庫,還需如下設置,不使用runtime庫。

如此,便成功修改了一個應用,常見的有微信搶紅包、修改運動步數等。應用的一切都被暴露出來了,危害不僅限于此。

簡單加固手段

  1. 完整性校驗

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

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

原理是:SignerIdentity的值在info.plist中是不存在的,開發者不會加上去,蘋果也不會,只是當ipa包被反編譯后篡改文件再次打包,需要偽造SignerIdentity。

  1. 越獄判斷

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

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

但是不要寫成BOOL開關方法,給攻擊者直接鎖定目標hook繞過的機會。攻擊者可能會改變這些工具的安裝路徑,躲過你的判斷。

那么,你可以嘗試打開cydia應用注冊的URL scheme:

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

但是不是所有的工具都會注冊URL scheme,而且攻擊者可以修改任何應用的URL scheme。

那么,你可以嘗試讀取下應用列表,看看有無權限獲取:

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

也可以通過檢測當前程序運行的環境變量:

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

未越獄設備返回結果是null,越獄設備就各有各的精彩了,尤其是老一點的iOS版本越獄環境。

  1. 簡單加固手段

分為:

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

原理即字符串替換,使用#define定義,然后用腳步替換成不可預知的字符串。當然還有比較復雜的LLVM加固,這個單列一篇。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容

  • 砸殼 軟件脫殼,顧名思義,就是對軟件加殼的逆操作,把軟件上存在的殼去掉(解密)。 砸殼原理 應用加殼(加密)提交給...
    looha閱讀 1,370評論 0 2
  • 砸殼原理 砸殼顧名思義就是對軟件進行逆向操作,對已加密的軟件進行解密,從而獲取真實軟件源碼。App Store下載...
    Hanfank閱讀 19,386評論 7 12
  • 概述 軟件脫殼,顧名思義,就是對軟件加殼的逆操作,把軟件上存在的殼去掉(解密)。 砸殼原理 應用加殼(加密)提交給...
    沒八阿哥的程序閱讀 7,144評論 0 2
  • 技 術 文 章 / 超 人 App Store上的應用都使用了FairPlay DRM數字版權加密保護技術Fair...
    樹下敲代碼的超人閱讀 20,651評論 21 55
  • 逆向工程的目的 1)分析競品的最新研究或者產品原型(包括所用的技術,所使用的框架)2)學術/學習目的。3)破解應用...
    90后的思維閱讀 6,966評論 3 14