[发明专利]一种利用马尔可夫链实现代码混淆的方法有效
申请号: | 201510347412.7 | 申请日: | 2015-06-23 |
公开(公告)号: | CN105005718B | 公开(公告)日: | 2018-02-13 |
发明(设计)人: | 张小松;宋珺;牛伟纳;卓中流;陈瑞东;王东;陈厅;许云清;黄金;戴中印 | 申请(专利权)人: | 电子科技大学 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 电子科技大学专利中心51203 | 代理人: | 李明光 |
地址: | 611731 四川省成*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提供一种利用马尔可夫链实现代码混淆的方法,属于计算机安全领域。本发明在程序源代码的编译阶段,对代码中的常量字符串进行加密,使之在反汇编中不可识别,同时,在函数调用过程中通过前插马尔可夫链代码生成无关执行指令,即通过若干状态转以后再调用被保护的函数,实现在运行内存中的函数混淆,进而实现对软件或特殊代码片段的保护。本发明可以有效地混淆常量字符串和函数地址,大大增加了逆向工程分析程序的难度。 | ||
搜索关键词: | 一种 利用 马尔可夫链 实现 代码 混淆 方法 | ||
【主权项】:
一种利用马尔可夫链实现代码混淆的方法,具体包括以下步骤:步骤1.混淆常量字符串;对于程序源代码中欲进行混淆操作的常量字符串A,进行如下步骤的操作:步骤1‑1:从预设的多种加密方式中随机选取一种作为对常量字符串A的加密方式;其中,预设的加密方式需满足对称加密;此步骤应发生在程序编译过程中,不影响程序的运行效率;步骤1‑2:使用基于时间的伪随机数算法生成随机数K,随机数K作为在步骤1‑1中选取的加密方式中使用的密钥,参与对常量字符串A的加密;此步骤应发生在程序编译过程中,不影响程序的运行效率;步骤1‑3:创建字符串缓冲区Buffer,将常量字符串A存放到缓冲区Buffer中;步骤1‑4:根据步骤1‑1选取的加密方式和步骤1‑2生成的随机数K,对步骤1‑3中创建的字符串缓冲区Buffer中的常量字符串A进行加密,并将加密后的结果存放到缓冲区Buffer中;此步骤应发生在程序编译过程中;完成上述步骤后,对常量字符串A的混淆操作结束;当遭遇逆向破解时,内存中将不会显示出原本应为明文的常量字符串A,而是加密后的乱码,保护了原始信息;步骤1‑5:当在程序运行时,需要将混淆后的字符串还原为原始字符串,即将字符串缓冲区Buffer中加密后的内容还原为原始字符串,还原过程中采用与步骤1‑1所述加密方式对应的解密方式,并使用步骤1‑2中的随机数K进行还原;此步骤应发生在程序运行过程中;步骤2.利用马尔可夫链进行调用混淆;对于程序源代码中欲进行混淆操作的函数F,进行如下步骤的操作:步骤2‑1:若函数F的参数中包含了常量字符串,则对所述常量字符串按步骤1所述方法进行混淆;步骤2‑2:预先设定多个马尔可夫链,每个马尔可夫链包含多个不同的状态,每个状态指向不同的执行指令,单个马尔可夫链的多个状态之间的转移概率已预先设定;此步骤应发生在程序编译过程中;步骤2‑3:随机选取一个预设的马尔可夫链代码,当程序源代码中的函数F被调用时,在函数F之前插入所选取的实例化的马尔可夫链的代码;此步骤应发生在程序编译过程中;完成上述步骤后,即完成对函数F的混淆操作;在实际调用函数F时,在运行内存中会在执行函数F之前先运行一段由所选择的马尔可夫链代码指定的执行指令;由于马尔可夫链的每一次运行,其状态路径生成的执行指令均不相同,故,若遭遇逆向破解,则马尔可夫链生成的置于函数F之前的一段无关代码可起到混淆函数F的作用。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201510347412.7/,转载请声明来源钻瓜专利网。