iOS安全防護系列之字符串及系統(tǒng)函數(shù)隱藏詳解
前言
用hopper打開macho文件可以看出你具體函數(shù)跳轉(zhuǎn)與字符串的使用,那么在項目中,你的加密Key就容易泄漏,你使用的加密方法如果是系統(tǒng)的,那么可以被fishhook給hook住,所以字符串和系統(tǒng)方法的隱藏可以作為安全防護的一環(huán)。
一 字符串加密
如果你使用對稱加密,你的秘鑰很可能被macho文件暴露

要想字符串不進(jìn)常量區(qū),可以先用一個字符去異或,然后再異或回來,字符串直接換算,就不會被macho暴露。
//測試環(huán)境
static NSString * KEY(){
unsigned char key[] = {
(pw_encrypt_key ^ 'a'),(pw_encrypt_key ^ '2'),(pw_encrypt_key ^ 's'),(pw_encrypt_key ^ '5'),(pw_encrypt_key ^ '4'),(pw_encrypt_key ^ 'b'),
(pw_encrypt_key ^ 'e'),(pw_encrypt_key ^ '5'),(pw_encrypt_key ^ 'f'),(pw_encrypt_key ^ '3'),(pw_encrypt_key ^ 'f'),(pw_encrypt_key ^ '4'),
(pw_encrypt_key ^ 'f'),
(pw_encrypt_key ^ '\0')
};
unsigned char *p = key;
while (((*p) ^= pw_encrypt_key) != '\0') {
p++;
}
return [NSString stringWithUTF8String:(const char *)key];
}
二 隱藏系統(tǒng)函數(shù)
當(dāng)你調(diào)用系統(tǒng)函數(shù)加密是,macho是可以找到對應(yīng)的函數(shù)跳轉(zhuǎn)的:

要想隱藏系統(tǒng)函數(shù),可以直接從庫里面找到函數(shù)句柄,然后調(diào)用函數(shù)指針進(jìn)行加密。
1、找到庫
下符號斷點,找到自己的加密函數(shù)CCCryptorCreate;

然后lldb調(diào)試:(lldb) image list;
找到libcommonCrypto.dylib庫在:[ 39] 50EEB933-DCEB-3AA2-8A43-DD3A791139CE 0x0000000182e1e000 /Users/mac/Library/Developer/Xcode/iOS DeviceSupport/11.3 (15E216)/Symbols/usr/lib/system/libcommonCrypto.dylib
libcommonCrypto.dylib的位置是:/usr/lib/system/libcommonCrypto.dylib
2、獲取句柄
#import <dlfcn.h>
//句柄
void * handle = dlopen("/usr/lib/system/libcommonCrypto.dylib",RTLD_LAZY);
RTLD_LAZY:懶加載表
3、獲取加密函數(shù)
unsigned char str[] = {
('a' ^ 'C'),
('a' ^ 'C'),
('a' ^ 'C'),
('a' ^ 'r'),
('a' ^ 'y'),
('a' ^ 'p'),
('a' ^ 't'),
('a' ^ 'o'),
('a' ^ 'r'),
('a' ^ 'C'),
('a' ^ 'r'),
('a' ^ 'e'),
('a' ^ 'a'),
('a' ^ 't'),
('a' ^ 'e'),
('a' ^ '\0')
};
unsigned char * p = str;
while (((*p) ^= 'a') != '\0') p++;
CCCryptorStatus (* CCCryptorCreate_p)(
CCOperation op, /* kCCEncrypt, etc. */
CCAlgorithm alg, /* kCCAlgorithmDES, etc. */
CCOptions options, /* kCCOptionPKCS7Padding, etc. */
const void *key, /* raw key material */
size_t keyLength,
const void *iv, /* optional initialization vector */
CCCryptorRef *cryptorRef) /* RETURNED */
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0) = dlsym(handle, (const char *)str);
4、用函數(shù)指針加密
status = CCCryptorCreate_p( kCCEncrypt, algorithm, options,
[keyData bytes], [keyData length], [ivData bytes],
&cryptor );
結(jié)果如下

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
IOS 網(wǎng)絡(luò)請求中設(shè)置cookie
這篇文章主要介紹了IOS 網(wǎng)絡(luò)請求中設(shè)置cookie的相關(guān)資料,需要的朋友可以參考下2017-06-06
iOS App設(shè)計模式開發(fā)中對迭代器模式的使用示例
這篇文章主要介紹了iOS App設(shè)計模式開發(fā)中對迭代器模式的使用示例,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03
iOS13適配深色模式(Dark Mode)的實現(xiàn)
這篇文章主要介紹了iOS13適配深色模式(Dark Mode)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
快速解決低版本Xcode不支持高版本iOS真機調(diào)試的問題方法
這篇文章主要介紹了快速解決低版本Xcode不支持高版本iOS真機調(diào)試的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
iOS開發(fā)中UIDatePicker控件的使用方法簡介
這篇文章主要介紹了iOS開發(fā)中UIDatePicker控件的使用方法簡介,用來處理各種時間日期的選擇,需要的朋友可以參考下2015-11-11
關(guān)于iOS自帶九宮格拼音鍵盤和Emoji表情之間的一些坑
這篇文章主要給大家介紹了關(guān)于iOS自帶九宮格拼音鍵盤和Emoji表情之間的一些坑文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
淺談iOS解析HTMl標(biāo)簽以及開發(fā)中的一些坑
這篇文章主要介紹了淺談iOS解析HTMl標(biāo)簽以及開發(fā)中的一些坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12

