电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

淺談IOS如何對(duì)app進(jìn)行安全加固

瀏覽:3日期:2022-09-16 15:58:10
目錄防止 tweak 依附1.限制二進(jìn)制文件頭內(nèi)的段2.setuid 和 setgid檢測(cè)越獄設(shè)備上是否有針對(duì)性 tweak防 http 抓包混淆(或者加密)硬編碼的明文字符串使用 Swift 開發(fā)使用靜態(tài)內(nèi)連 C 函數(shù)使用 block代碼混淆其他方法注意事項(xiàng)防止 tweak 依附

通常來說,我們要分析一個(gè) app,最開始一般是砸殼,

$ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /path/to/XXX.app/XXX

然后將解密之后的二進(jìn)制文件扔給類似 hopper 這樣的反編譯器處理。直接將沒有砸殼的二進(jìn)制文件扔個(gè) hopper 反編譯出來的內(nèi)容是無法閱讀的(被蘋果加密了)。所以說砸殼是破解分析 app 的第一步。對(duì)于這一步的防范,有兩種方式。

1.限制二進(jìn)制文件頭內(nèi)的段

通過在 Xcode 里面工程配置 build setting 選項(xiàng)中將

-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null

添加到 'Other Linker Flags'(注意這里我在項(xiàng)目中碰到了一個(gè) 問題,在 iPod touch iOS 9.3 的設(shè)備上,使用了 swift 的項(xiàng)目會(huì)導(dǎo)致莫名奇妙的 swift 標(biāo)準(zhǔn)庫無法找到,而在 iOS 10 的設(shè)備上沒有這個(gè)問題。之前并沒有以為是因?yàn)樘砑恿诉@個(gè)的原因,直到網(wǎng)上搜了所有解決方案,比如這個(gè) SO Post 都沒有效果的時(shí)候,我才發(fā)現(xiàn)是這個(gè)設(shè)置的原因)

2.setuid 和 setgid

Apple 不接受調(diào)用這兩個(gè)函數(shù)的 app,因?yàn)樗梢酝ㄟ^查看符號(hào)表來判斷您的二進(jìn)制運(yùn)行文件是否包含這兩個(gè)函數(shù)

檢測(cè)越獄設(shè)備上是否有針對(duì)性 tweak

一般來說在越獄手機(jī)上,我們會(huì)使用 TheOS 創(chuàng)建 tweak 類型的工程。然后針對(duì)我們要分析的類,使用提供的 logify.pl 命令生成的 mk 文件來打印該類所有方法的入?yún)⒑统鰠ⅰ_@對(duì)分析 app 的運(yùn)行方式有很大的幫助。當(dāng)然,我們也可以自己創(chuàng)建某個(gè)類的 mk,來 hook 某個(gè)函數(shù),讓它以我們想要的方式運(yùn)行,比如說對(duì)于一些做了證書綁定的 app,如果它用的框架是 AFNetWorking 的話,那么我們可以創(chuàng)建一個(gè) mk 文件,hook AFSecurityPolicy 類的下列方法:

- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain

讓這個(gè)方法永遠(yuǎn)返回 YES,那么大多數(shù)的應(yīng)用所做的證書綁定也就失效了。用過 TheOS 的 tweak 模版的話,你會(huì)發(fā)現(xiàn)這種方式相當(dāng)簡(jiǎn)單快速。

對(duì)于這一步的防范,可以在工程的 main 函數(shù)里面加入一層判斷,首先讀取 /Library/MobileSubstrate/DynamicLibraries 下所有的 plist 文件的內(nèi)容,查看是否某個(gè) plist 含有你的 app 的 bundle id,是的話,可以判定有人想利用 tweak 攻擊你的 app,這時(shí)候你可以采取比如說將 app 給 crash 掉,或者限制某些功能等方式來應(yīng)對(duì)。

具體原理可以查看參考資料4,簡(jiǎn)單來說,就是 MobileSubstrate 在 app 加載到內(nèi)存的時(shí)候會(huì)先去檢查 /Library/MobileSubstrate/DynamicLibraries 下面是否有需要加載的 tweak,有的話就加載,怎么判斷有沒有?就是根據(jù) plist 里面的 bundle ID 判斷的。

代碼參考如下

static __inline__ __attribute__((always_inline)) int anti_tweak(){ uint8_t lmb[] = {’S’, ’u’, ’b’, ’s’, ’t’, ’r’, ’a’, ’t’, ’e’, ’/’, ’D’, ’y’, ’n’, ’a’, ’m’, ’i’, ’c’, 0, }; NSString *dir = [NSString stringWithFormat:@'/%@/%@%s%@', @'Library', @'Mobile', lmb, @'Libraries']; NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dir error:nil]; NSArray *plistFiles = [dirFiles filteredArrayUsingPredicate: [NSPredicate predicateWithFormat: [NSString stringWithFormat:@'%@ %@%@ ’.%@%@’',@'self', @'EN', @'DSWITH', @'pli', @'st']]]; int cnt = 0; for (NSString *file in plistFiles) {NSString *filePath = [dir stringByAppendingPathComponent:file];NSString *fileContent = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];if (fileContent && [fileContent rangeOfString:[[NSBundle mainBundle] bundleIdentifier]].location != NSNotFound) { cnt ++;} } // 返回有針對(duì)本 app 的 tweak 數(shù)量,為 0 說明沒有 return cnt;}防 http 抓包

通常破解一個(gè) app,我們會(huì)抓包。這樣的話,我們的 app 所有接口,接口數(shù)據(jù)都會(huì)暴露在逆向人員的眼皮底下。這時(shí)候,我們可以限制 http 抓包。方式很簡(jiǎn)單,就是將 NSURLSessionConfiguration 的 connectionProxyDictionary 設(shè)置成空的字典,因?yàn)檫@個(gè)屬性就是用來控制會(huì)話的可用代理的。可用參見官方文檔,也就是參考資料5。下面是對(duì)于 AFNetWorking 的使用方法:

// 繼承 AFHTTPSessionManager,重寫下列方法- (instancetype)initWithServerHost:(PDLServerHost*)serverHost {#ifdef DEBUG // debug 版本的包仍然能夠正常抓包 self = [super initWithBaseURL:serverHost.baseURL];#else// 由于使用 ephemeralSessionConfiguration session 發(fā)起的請(qǐng)求不帶 cookie 和使用緩存等 NSURLSessionConfiguration *conf = [NSURLSessionConfiguration ephemeralSessionConfiguration]; conf.connectionProxyDictionary = @{}; self = [super initWithBaseURL:serverHost.baseURL sessionConfiguration:conf];#endif return self;}

但是由于 OC 方法很容易被 hook,避免抓包是不可能的,所以,個(gè)人認(rèn)為最好的方式是對(duì)請(qǐng)求參數(shù)進(jìn)行加密(最好是非對(duì)稱加密,比如 RSA)

混淆(或者加密)硬編碼的明文字符串

對(duì)于被砸殼的二進(jìn)制文件,逆向分析人員分析代碼有一條重要線索,也就是被硬編碼的明文字符串。比如說,你的 app 被人抓包了,某些數(shù)據(jù)請(qǐng)求接口也被人發(fā)現(xiàn)了,那么很簡(jiǎn)單,逆向人員可以直接拷貝特征比較明顯的字符串到 hopper 中搜索,通過查看該字符串被引用的地方,可以很快的找到相應(yīng)的邏輯代碼。

對(duì)于這一步的防范,需要做的就是對(duì)硬編碼的明文進(jìn)行加密或混淆。 有個(gè)開源代碼可以用,UAObfuscatedString,但是這個(gè)開源混淆代碼寫出來的字符串是相當(dāng)長(zhǎng)的(也就是麻煩),同時(shí)不支持加密。最近我寫了一個(gè)工具,可以在編譯期間加密所有代碼中的明文字符串,在 app 運(yùn)行的時(shí)候解密字符串。這個(gè)工具的特點(diǎn)如下:

1.簡(jiǎn)單,開發(fā)人員可以硬編碼明文字符串,所有的加密會(huì)在編譯開始時(shí)自動(dòng)處理

2.可以自定義加密或者混淆方式,(為了不影響 app 運(yùn)行效率,需要提供一個(gè)簡(jiǎn)單快速的加密或混淆方式)提高解密難度

使用 Swift 開發(fā)

Swift 是目前比較新的開發(fā) iOS 語言,由于 Swift 目前還不是很穩(wěn)定,越獄開源社區(qū)對(duì)這個(gè)的支持也不是很即時(shí),比如說 class-dump 工具目前就不支持含有 Swift 的二進(jìn)制文件。 TheOS 也是最近才開始支持 Swift,但是還沒有加到主分支上(可以參見Features)。所以目前來看,至少 Swift 可能比純 OC 的工程要安全一點(diǎn)點(diǎn)。當(dāng)然,等 Swift 日趨穩(wěn)定,以及越獄開源社區(qū)的逐漸支持,這一點(diǎn)優(yōu)勢(shì)可能就不明顯了。

使用靜態(tài)內(nèi)連 C 函數(shù)

由于 OC 語言的動(dòng)態(tài)性,導(dǎo)致 OC 的代碼是最容易被破解分析的。在安全性上,更推薦使用 C 語言寫成的函數(shù)。但是 C 語言的函數(shù)也是可以被 hook 的,主要有3種方式:

1.使用 Facebook 開源的fishhook

2.使用 MobileSubstrate 提供的 hook C 語言函數(shù)的方法

void MSHookFunction(void* function, void* replacement, void** p_original);

3.使用 mach_override,關(guān)于mach_override 和 fishhook的區(qū)別請(qǐng)看 mach_override 和 fishhook 區(qū)別

由于上面這三種方式可以 hook C 函數(shù)。要想不被 hook 解決方法是使用靜態(tài)內(nèi)聯(lián)函數(shù),這樣的話需要被 hook 的函數(shù)沒有統(tǒng)一的入口,逆向人員想要破解只能去理解該函數(shù)的邏輯。

使用 block

嚴(yán)格來說使用 block 并不能很大程度提高安全性,因?yàn)槟嫦蛉藛T只要找到使用該 block 的方法,一般來說在其附近就會(huì)有 block 內(nèi)代碼的邏輯。

但是個(gè)人認(rèn)為使用 block 的安全性是比直接使用 oc 方法是要高的。在我的逆向分析 app 的經(jīng)驗(yàn)中,對(duì)于使用了 block 的方法,目前我還不知道到怎么 hook (有知道的話,可以在 blog 上提個(gè) issue 告訴我,先謝過)同時(shí)對(duì)于含有嵌套的 block 或者是作為參數(shù)傳遞的 block,處理起來就更加復(fù)雜了。所以,如果能將內(nèi)斂 C 函數(shù),嵌套 block , block 類型參數(shù)組合起來的話,安全性應(yīng)該是會(huì)有一定提升。

代碼混淆

代碼混淆的方式有幾種:

添加無用又不影響邏輯的代碼片段,迷糊逆向人員

對(duì)關(guān)鍵的類、方法,命名成與真實(shí)意圖無關(guān)的名稱

個(gè)人認(rèn)為最好的一個(gè)加密混淆工具是ios-class-guard,不過目前這個(gè)項(xiàng)目已經(jīng)停止維護(hù)了。但是這種方式的混淆我覺得才是最終極的方案。

其他方法

比如 ptrace 反調(diào)試等(不過據(jù)說已經(jīng)可以很容易被繞過)

// see http://iphonedevwiki.net/index.php/Crack_prevention for detailstatic force_inline void disable_gdb() {#ifndef DEBUG typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);#ifndef PT_DENY_ATTACH#define PT_DENY_ATTACH 31#endif // this trick can be worked around, // see http://stackoverflow.com/questions/7034321/implementing-the-pt-deny-attach-anti-piracy-code void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW); ptrace_ptr_t ptrace_ptr = dlsym(handle, [@''.p.t.r.a.c.e UTF8String]); ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0); dlclose(handle);#endif}注意事項(xiàng)

通過了解 OC 的運(yùn)行時(shí)特性和 mach-o 二進(jìn)制文件的結(jié)構(gòu),借助現(xiàn)有的工具,你會(huì)發(fā)現(xiàn) hook 方法 是很簡(jiǎn)單就能完成的。雖然上面我提到了一些提高安全性的幾個(gè)方案,但是,所有這些方式只是增加了逆向人員的逆向難度,并不能讓 app 變的堅(jiān)不可摧。不過采取一定的措施肯定比什么措施都不采取來的安全。

以上就是淺談IOS如何對(duì)app進(jìn)行安全加固的詳細(xì)內(nèi)容,更多關(guān)于IOS如何對(duì)app進(jìn)行安全加固的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: IOS
相關(guān)文章:
主站蜘蛛池模板: 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 广州云仓代发-昊哥云仓专业电商仓储托管外包代发货服务 | 铝箔-铝板-花纹铝板-铝型材-铝棒管-上海百亚金属材料有限公司 | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 润滑脂-高温润滑脂-轴承润滑脂-食品级润滑油-索科润滑油脂厂家 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 高精度电阻回路测试仪-回路直流电阻测试仪-武汉特高压电力科技有限公司 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 山西3A认证|太原AAA信用认证|投标AAA信用证书-山西AAA企业信用评级网 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 电脑刺绣_绣花厂家_绣花章仔_织唛厂家-[源欣刺绣]潮牌刺绣打版定制绣花加工厂家 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 板式换网器_柱式换网器_自动换网器-郑州海科熔体泵有限公司 | 成都装修公司-成都装修设计公司推荐-成都朗煜装饰公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 上海佳武自动化科技有限公司| 电子巡更系统-巡检管理系统-智能巡检【金万码】 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 湖南成人高考报名-湖南成考网| 3D全息投影_地面互动投影_360度立体投影_水幕灯光秀 | 广东银虎 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 10吨无线拉力计-2吨拉力计价格-上海佳宜电子科技有限公司 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 |