iOS如何加密字符串及隐藏系统函数

这篇文章主要为大家展示了“iOS如何加密字符串及隐藏系统函数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS如何加密字符串及隐藏系统函数”这篇文章吧。

创新互联于2013年成立,是专业互联网技术服务公司,拥有项目成都网站建设、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元尧都做网站,已为上家服务,为尧都各地企业和个人服务,联系电话:13518219792

一 字符串加密

如果你使用对称加密,你的秘钥很可能被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 
//句柄
 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如何加密字符串及隐藏系统函数

以上是“iOS如何加密字符串及隐藏系统函数”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


本文名称:iOS如何加密字符串及隐藏系统函数
文章分享:http://myzitong.com/article/jpshgd.html