這篇文章主要為大家展示了“iOS如何加密字符串及隱藏系統(tǒng)函數(shù)”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“iOS如何加密字符串及隱藏系統(tǒng)函數(shù)”這篇文章吧。
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元堯都做網(wǎng)站,已為上家服務(wù),為堯都各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
一 字符串加密
如果你使用對(duì)稱加密,你的秘鑰很可能被macho文件暴露
要想字符串不進(jìn)常量區(qū),可以先用一個(gè)字符去異或,然后再異或回來,字符串直接換算,就不會(huì)被macho暴露。
//測(cè)試環(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是可以找到對(duì)應(yīng)的函數(shù)跳轉(zhuǎn)的:
要想隱藏系統(tǒng)函數(shù),可以直接從庫里面找到函數(shù)句柄,然后調(diào)用函數(shù)指針進(jìn)行加密。
1、找到庫
下符號(hào)斷點(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//句柄 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é)果如下
以上是“iOS如何加密字符串及隱藏系統(tǒng)函數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!