iOS逆向安防从入门到秃头--混淆与加固

839 阅读2分钟

小谷秃头合集

  • 今天小谷简单阐述混淆与加固,具体怎么用还是看兄弟们怎么做(小谷公司的项目其实已经写成脚本了,关键的也是这几个方法)

1. 函数名混淆

  • 我们平常分析代码的时候,用class-dump会把header文件生成出来。而且这些类和函数名,好多都是见名知意的。

  • 这个时候对分析你应用的boy(逆向工程师)太舒服了

1.1.png

这个是我们demo里面的函数名

  • 我们因此就想到了一个办法: 混淆函数名

我们简单的方法就是#define

#define ConfuseTest xgsufehdfdakldfgs
#define test sdsdsdsdsjhhfbsgh

2.png

这样就可以达到混淆函数名的目的了

注:一些分析你应用的逆向工程师都不是软柿子,都有2把刷子的! 如果看到有混淆的函数名,他们就会很兴奋。然后断点,看函数调用栈!!或者看汇编静态分析!!

建议: 小谷这里有些建议:如果混淆函数名的话。小谷建议尽量混淆那些不重要的!这样逆向工程师分析的时候--就是浪费他的时间。他们可能会吐血!(先跟逆向工程师说声对不起~)

2. 字符串加密

  • 兄弟们大多数都用过对称加密吧。我们可以用这个把自己重要的字符串加密!小谷用的CCCrypt

这个其实没有啥好说的。加密解密

3. Inline 内联

小谷可能也是给个思路。兄弟们也可以给小谷些建议

  • 写一个兄弟们经常用到的: 异或加密

3.1.png

  • 然后我们看下汇编

4.png

  • 我们用下Inline内联 static inline NSData * encodeData(NSData *sourceData) __attribute__ ((always_inline));

  • 然后在看下汇编

5.png

  • Inline 内联是防止我们调用函数bl后,逆向工程师可以打断点看函数调用栈和参数

  • 使用Inline内联后。会把代码直接拷贝到调用的地方。这样!逆向大佬们就不是那么容易发现了

兄得们可以看下Inlinehook。不过这篇博客就不讲如何在__TEXT__ 段改东东了~

4. 混淆工具

小谷这里只推荐一波吧。

  • 原先混淆比较有名的是obfuscator-llvm,不过只支持到Xcode8,现在基本也用不了了

  • 现在用的多的一般是网易网盾ZFJObsLib

  • 不够现在大公司的混淆估计都是大佬们自己搞的

  • 我们可以研究下ZFJObsLib是怎么做的,自己可以搞得简单点练练手~

ZFJObsLib详细网址

5. 总结

  • 小谷现在也没有太多的时间研究混淆和加固了。最近工作实在是太忙了~

  • 混淆和加固,小谷感觉只有用在项目中才有参考性!!

  • 希望有朝一日兄弟们可以写出自己满意的混淆工具

  • 希望这篇博客对兄弟们有些帮助吧。😆