隐藏CCCrypt

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,(这里是通过异或算法,进行了加密)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容