国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS安全防護系列之字符串及系統函數隱藏詳解

2019-10-21 18:40:46
字體:
來源:轉載
供稿:網友

前言

用hopper打開macho文件可以看出你具體函數跳轉與字符串的使用,那么在項目中,你的加密Key就容易泄漏,你使用的加密方法如果是系統的,那么可以被fishhook給hook住,所以字符串和系統方法的隱藏可以作為安全防護的一環。

一 字符串加密

如果你使用對稱加密,你的秘鑰很可能被macho文件暴露

iOS,安全防護,字符串,系統函數隱藏

要想字符串不進常量區,可以先用一個字符去異或,然后再異或回來,字符串直接換算,就不會被macho暴露。

//測試環境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];}

二 隱藏系統函數

當你調用系統函數加密是,macho是可以找到對應的函數跳轉的:

iOS,安全防護,字符串,系統函數隱藏

要想隱藏系統函數,可以直接從庫里面找到函數句柄,然后調用函數指針進行加密。

1、找到庫

下符號斷點,找到自己的加密函數CCCryptorCreate;

iOS,安全防護,字符串,系統函數隱藏

然后lldb調試:(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、獲取加密函數

 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、用函數指針加密

 status = CCCryptorCreate_p( kCCEncrypt, algorithm, options,         [keyData bytes], [keyData length], [ivData bytes],         &cryptor );

結果如下

iOS,安全防護,字符串,系統函數隱藏

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 徐汇区| 宣汉县| 容城县| 集安市| 诏安县| 长兴县| 定兴县| 隆昌县| 瑞昌市| 金塔县| 漯河市| 文水县| 潜江市| 呼伦贝尔市| 东辽县| 兴国县| 克山县| 东乡县| 鱼台县| 聂荣县| 曲靖市| 柳州市| 青浦区| 磴口县| 宜良县| 皮山县| 岳阳市| 时尚| 南充市| 武威市| 昭觉县| 吐鲁番市| 贵南县| 阜城县| 太仆寺旗| 成武县| 虎林市| 定结县| 清流县| 林甸县| 巴中市|