加固

加固需要什么样的知识?

加固

近期有机会研究了下加固技术,发现涉及的知识面非常广泛,专门记录下。

加固技术通常按代来分。

第一代就是我们通常可见的混淆,把代码转换为a b c d 这样的字符,这样做的目的就是增加阅读难度,看到的代码和实际的代码结构是有区别的,但是这样关键源码还是可以获取到的。

后来,想着能不能对代码进行加密,在运行时在解密,这样就有了第二代技术,就是针对Dex的加密或者变形,让破坏者得到的是坏掉的文件或者加密过的文件,相当于在第一代的时候,我们是把钱撕成几段,但是还是可以被别人拼成完好的钱的,后来我们就把钱锁到了保险柜里面,这样比第一代安全了些。

这个时候的关键就是该把保险柜的钥匙放在哪?加密算法如果放在Java层面还是容易被人反编拿到,放在C层看起来好像是安全了些,但是其他人还是可以试探性的获取相应的密钥,就像你是把钥匙放在门口的垫子下面,还是交给保姆,交给保姆也没办法保证熟人花言巧语把钥匙骗过来,对吧。但是相比把钱直接摆在外边已经安全了很多。

第二代的通用做法就是加壳,简单的理解就是打包的时候放进去的是加密的Dex文件,在运行的时候在动态解密,再用classloader动态加载,达到加密的目的。

涉及到的技术

  1. JVM 原理
  2. Dalvik 原理
  3. Art 优化原理
  4. Api 各个版本的兼容性
  5. 等等

VMP技术

持续更新。。。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2023 Jacky

所有的相遇,都是久别重逢

支付宝
微信