由于上文提到我们的加密算法是一种动态移位Xor算法,但是由于其特性导致加解密采用不同的密钥,使得解密密钥存储与保护成为一个难题.
在我们的规划中试图通过代码块的解密密钥放置在临近区域的加密区域中,来阻止代码的还原.
一旦破解者在原内存中阻止了解密后的内容被转换成加密状态,这将导致下一个块的解密错误.
出于以上需求,我们对加密算法进行了改良:
加密流程:
- 根据上一块的加密状态进行固定种子的Xor加密得到解D.
- 用此解对待加密块进行Xor加密
- 根据解D还原动态Xor加密块至原Xor加密状态.
解密流程:
除了我们需要先将上一个块的状态转换为Xor加密状态外与加密过程并没有什么不同.
动态Xor的作用是从上一块中提取一个指纹.值得注意的是,由于Xor的某些特性,导致这个指纹并不是那么靠谱.
至此我们对加密的邻近代码区块之间进行了关联以保证它们不总是把自己的解密状态展示在内存中.
我自己竟然迅速想到了破解之道.值得庆幸的是,即使将原理明明白白告诉破解者,破解者也会费上好大一番周折.或许我们目的-一款保护壳已经达到了.