NZND壳-加密算法改良
2015-08-13 08:12
190 查看
由于上文提到我们的加密算法是一种动态移位Xor算法,但是由于其特性导致加解密采用不同的密钥,使得解密密钥存储与保护成为一个难题.
在我们的规划中试图通过代码块的解密密钥放置在临近区域的加密区域中,来阻止代码的还原.
一旦破解者在原内存中阻止了解密后的内容被转换成加密状态,这将导致下一个块的解密错误.
出于以上需求,我们对加密算法进行了改良:
加密流程:
根据上一块的加密状态进行固定种子的Xor加密得到解D.
用此解对待加密块进行Xor加密
根据解D还原动态Xor加密块至原Xor加密状态.
解密流程:
除了我们需要先将上一个块的状态转换为Xor加密状态外与加密过程并没有什么不同.
动态Xor的作用是从上一块中提取一个指纹.值得注意的是,由于Xor的某些特性,导致这个指纹并不是那么靠谱.
至此我们对加密的邻近代码区块之间进行了关联以保证它们不总是把自己的解密状态展示在内存中.
我自己竟然迅速想到了破解之道.值得庆幸的是,即使将原理明明白白告诉破解者,破解者也会费上好大一番周折.或许我们目的-一款保护壳已经达到了.
在我们的规划中试图通过代码块的解密密钥放置在临近区域的加密区域中,来阻止代码的还原.
一旦破解者在原内存中阻止了解密后的内容被转换成加密状态,这将导致下一个块的解密错误.
出于以上需求,我们对加密算法进行了改良:
加密流程:
根据上一块的加密状态进行固定种子的Xor加密得到解D.
用此解对待加密块进行Xor加密
根据解D还原动态Xor加密块至原Xor加密状态.
解密流程:
除了我们需要先将上一个块的状态转换为Xor加密状态外与加密过程并没有什么不同.
动态Xor的作用是从上一块中提取一个指纹.值得注意的是,由于Xor的某些特性,导致这个指纹并不是那么靠谱.
至此我们对加密的邻近代码区块之间进行了关联以保证它们不总是把自己的解密状态展示在内存中.
我自己竟然迅速想到了破解之道.值得庆幸的是,即使将原理明明白白告诉破解者,破解者也会费上好大一番周折.或许我们目的-一款保护壳已经达到了.
相关文章推荐
- pageContext.setAttribute的使用场合
- 生活服务落地:互联网+与O2O新媒体的机会
- 简单编译boost
- wxhl iOS bj 49 张浩 学习心得体会连载 第五章
- 使用 COM 风格的编程接口
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(完)
- 【Unity基础知识之四】Unity、Mono为何能跨平台?聊聊CIL(MSIL)
- POJ-1753 Flip Game (BFS+状态压缩)
- HDU1879 继续畅通工程
- 函数调用
- 字符串哈希函数
- app详细介绍界面-01
- 单表60亿记录等大数据场景的MySQL优化和运维之道
- 单表60亿记录等大数据场景的MySQL优化和运维之道
- 单表60亿记录等大数据场景的MySQL优化和运维之道
- [GDOI模拟2015.08.08]排列
- 在浏览器敲入一个网址
- 浅谈密码存储安全
- 询问区间第k大(小)——主席树
- VC++ 关于 ON_UPDATE_COMMAND_UI 相关的作用.