場(chǎng)景
iOS逆向靜態(tài)分析,字符串的硬編碼比較容易成為逆向者的突破口匪蟀。因此有必要做一些字符串硬編碼的混淆,如加密的對(duì)稱加密key螟蒸,md5的key坛芽,域名,接口名等态秧。
方法
利用位運(yùn)算方式 編譯換算成結(jié)果 ,不會(huì)進(jìn)入字符串常量區(qū)
代碼事例: 原始字符串: IUIDISTP#
#define STRING_ENCRYPT_KEY 0xAC
static NSString * AES_KEY(){
unsigned char key[] = {
(STRING_ENCRYPT_KEY ^ 'I'),
(STRING_ENCRYPT_KEY ^ 'U'),
(STRING_ENCRYPT_KEY ^ 'I'),
(STRING_ENCRYPT_KEY ^ 'D'),
(STRING_ENCRYPT_KEY ^ 'I'),
(STRING_ENCRYPT_KEY ^ 'S'),
(STRING_ENCRYPT_KEY ^ 'T'),
(STRING_ENCRYPT_KEY ^ 'P'),
(STRING_ENCRYPT_KEY ^ '#'),
(STRING_ENCRYPT_KEY ^ '\0')
};
unsigned char * p = key;
while (((*p) ^= STRING_ENCRYPT_KEY) != '\0') p++;
return [NSString stringWithUTF8String:(const char *)key];
}
應(yīng)用
NSString * str = [[EncryptionTools sharedEncryptionTools] encryptString:@"some message want to encrypted" keyString:AES_KEY() iv:nil];
總結(jié)
此方法應(yīng)用于敏感字符串手動(dòng)加密場(chǎng)景