- 今天小谷
简单阐述下混淆与加固,具体怎么用还是看兄弟们怎么做(小谷公司的项目其实已经写成脚本了,关键的也是这几个方法)
1. 函数名混淆
-
我们平常分析代码的时候,用
class-dump会把header文件生成出来。而且这些类和函数名,好多都是见名知意的。 -
这个时候对
分析你应用的boy(逆向工程师)太舒服了
这个是我们
demo里面的函数名
- 我们因此就想到了一个办法:
混淆函数名
我们简单的方法就是
#define
#define ConfuseTest xgsufehdfdakldfgs
#define test sdsdsdsdsjhhfbsgh
这样就可以达到
混淆函数名的目的了
注:一些分析你应用的逆向工程师都不是软柿子,都有2把刷子的! 如果看到有混淆的函数名,他们就会很兴奋。然后断点,看函数调用栈!!或者看汇编静态分析!!
建议: 小谷这里有些建议:如果混淆函数名的话。小谷建议尽量混淆那些不重要的!这样逆向工程师分析的时候--就是浪费他的时间。他们可能会吐血!(先跟逆向工程师说声对不起~)
2. 字符串加密
- 兄弟们大多数都用过
对称加密吧。我们可以用这个把自己重要的字符串加密!小谷用的CCCrypt
这个其实没有啥好说的。
加密解密呗
3. Inline 内联
小谷可能也是给个思路。兄弟们也可以给小谷些建议
- 写一个兄弟们经常用到的:
异或加密
- 然后我们看下汇编
-
我们用下
Inline内联static inline NSData * encodeData(NSData *sourceData) __attribute__ ((always_inline)); -
然后在看下汇编
-
Inline 内联是防止我们调用函数bl后,逆向工程师可以打断点看函数调用栈和参数 -
使用
Inline内联后。会把代码直接拷贝到调用的地方。这样!逆向大佬们就不是那么容易发现了!
兄得们可以看下
Inlinehook。不过这篇博客就不讲如何在__TEXT__ 段改东东了~
4. 混淆工具
小谷这里只推荐一波吧。
-
原先混淆比较有名的是obfuscator-llvm,不过只支持到Xcode8,现在基本也用不了了 -
现在用的多的一般是
网易网盾和ZFJObsLib -
不够现在大公司的混淆估计都是大佬们自己搞的
-
我们可以研究下
ZFJObsLib是怎么做的,自己可以搞得简单点练练手~
5. 总结
-
小谷现在也没有太多的时间研究
混淆和加固了。最近工作实在是太忙了~ -
混淆和加固,小谷感觉只有用在项目中才有参考性!! -
希望有朝一日兄弟们可以
写出自己满意的混淆工具。 -
希望这篇博客对兄弟们有些帮助吧。😆