- 今天小谷
简单阐述
下混淆与加固
,具体怎么用还是看兄弟们怎么做(小谷公司的项目其实已经写成脚本了,关键的也是这几个方法)
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. 总结
-
小谷现在也没有太多的时间研究
混淆和加固
了。最近工作实在是太忙了~ -
混淆和加固
,小谷感觉只有用在项目中才有参考性
!! -
希望有朝一日兄弟们可以
写出自己满意的混淆工具
。 -
希望这篇博客对兄弟们有些帮助吧。😆