最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS安全防護(hù)系列之字符串及系統(tǒng)函數(shù)隱藏詳解

 更新時間:2018年07月09日 11:25:34   作者:meryin  
這篇文章主要給大家介紹了關(guān)于iOS安全防護(hù)系列之字符串及系統(tǒng)函數(shù)隱藏的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

用hopper打開macho文件可以看出你具體函數(shù)跳轉(zhuǎn)與字符串的使用,那么在項(xiàng)目中,你的加密Key就容易泄漏,你使用的加密方法如果是系統(tǒng)的,那么可以被fishhook給hook住,所以字符串和系統(tǒng)方法的隱藏可以作為安全防護(hù)的一環(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、找到庫

下符號斷點(diǎn),找到自己的加密函數(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)文章

最新評論

寿阳县| 甘南县| 河北省| 南投市| 赞皇县| 沅陵县| 临泉县| 甘泉县| 大邑县| 南漳县| 麻江县| 隆昌县| 青浦区| 临洮县| 屯门区| 清涧县| 新宁县| 长兴县| 桃园市| 洪洞县| 荥经县| 焉耆| 合阳县| 兴海县| 得荣县| 崇义县| 布尔津县| 洛扎县| 宁陵县| 遂宁市| 巴青县| 堆龙德庆县| 冀州市| 弋阳县| 资阳市| 卢湾区| 孟州市| 仪征市| 石棉县| 衡水市| 冕宁县|