1.动态库符号是没法被裁剪的。
2.不希望对方在汇编中看到特定的字符串
3.那指针去调用方法,裁剪的符号表就会看不到这个响应的符号了。
unsignedcharstr[] = {
('a' ^ 'C'),
('a' ^ 'C'),
('a' ^ 'C'),
('a' ^ 'r'),
('a' ^ 'y'),
('a' ^ 'p'),
('a' ^ 't'),
('a' ^ '\0')
};
unsignedchar* p = str;
while(((*p) ^= 'a') != '\0') p++;
//句柄
void * handle = dlopen("/usr/lib/system/libcommonCrypto.dylib",RTLD_LAZY);//第一个参数,函数所在的动态库,第二个参数(选择类型,这个是懒加载)
CCCryptorStatus (* CCCrypt_p)(
CCOperationop, /* kCCEncrypt, etc. */
CCAlgorithmalg, /* kCCAlgorithmAES128, etc. */
CCOptionsoptions, /* kCCOptionPKCS7Padding, etc. */
constvoid*key,
size_tkeyLength,
constvoid*iv, /* optional initialization vector */
constvoid*dataIn, /* optional per op and alg */
size_tdataInLength,
void*dataOut, /* data RETURNED here */
size_tdataOutAvailable,
size_t*dataOutMoved)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0) =dlsym(handle, (constchar*)str); //返回一个函数指针给CCCrypt_p,这个就是方法3的做法。
这个dlsym中的str就是要找的ccrypt,(这里是通过异或算法,进行了加密)