反污点分析软件保护方法转让专利

申请号 : CN201610135566.4

文献号 : CN105808981B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 汤战勇周祥李政桥张恒房鼎益陈晓江龚晓庆刘方圆吕留东王华

申请人 : 西北大学

摘要 :

本发明公开了一种反污点分析软件保护方法,属于计算机软件安全领域,所述方法包括确定待保护程序中被污点标记的数据,即污点数据,确定针对污点数据进行反污点变换的最佳位置,对最佳位置上的污点数据进行反污点变换,将最佳位置上的污点数据变换成没有被污点标记的数据。通过阻断污点数据传播,将被标记的数据通过反污点变换加工成没有被标记的数据,使得污点无法传播下去,从而增强逆向分析难度,以达到保护作用。

权利要求 :

1.反污点分析软件保护方法,其特征在于,包括:选取待保护程序;

确定所述待保护程序中被污点标记的数据,即污点数据;

确定针对所述污点数据进行反污点变换的最佳位置;

对所述最佳位置上的污点数据进行反污点变换,得到反污点变换后的程序;

所述的对所述最佳位置上的污点数据进行反污点变换,得到反污点变换后的程序的具体实现方式包括:被污点标记的寄存器不断执行-1操作,没有被污点标记的寄存器不断执行+1操作,当被污点标记的寄存器减少到0,没有被污点标记的寄存器增加到被污点标记的数据的值;将没有被污点标记的寄存器赋值给被污点标记的寄存器,则被污点标记的寄存器中的数据转换成没有被污点标记的数据。

2.如权利要求1所述的反污点分析软件保护方法,其特征在于,所述的被污点标记的数据为所述待保护程序的输入数据。

3.如权利要求1所述的反污点分析软件保护方法,其特征在于,所述的针对所述污点数据进行反污点变换的最佳位置为数据流的主干。

说明书 :

反污点分析软件保护方法

技术领域

[0001] 本发明属于计算机软件安全领域,涉及Windows系统中反污点分析软件保护方法。

背景技术

[0002] 现在的软件逆向领域有一种动态分析方法-污点分析方法。作为污点分析技术,可以被应用于软件测试和软件保护中,但现在污点分析也被作为一种动态分析的方法应用于软件逆向中。它可通过标记程序中的敏感数据,在动态运行过程中监控数据流动和变化,以达到获取程序数据流,进一步获取程序核心算法和核心数据的作用。
[0003] 如下为一个简单的密码验证的伪代码程序:
[0004] Read(X);
[0005] Key=X+9;
[0006] If(key==10)
[0007] Return right;
[0008] Else
[0009] Return false;
[0010] 如上程序X为输入的密码,若密码为1则验证通过,若不为1则验证失败。污点分析可以通过标记输入X(被标记的数据称为污点数据),在其执行期间由于X到Key有赋值过程,则Key也被标记(此过程称为污点传播),然后返回验证值,X和Key均被标记。然后通过分析被标记的数据就可以找到至关重要的Key。此案例较为简单,但足以说明污点分析在逆向分析中的作用。其通过标记输入数据,通过污点传播最终找到更为重要的敏感数据,为程序逆向提供关键信息。对于以上污点分析,目前尚没有有效的解决方法,这样会使得软件得不到有效地保护,进而损害人们的财产安全。

发明内容

[0011] 针对上述现有技术中存在的问题,本发明的目的在于,提供一种反污点分析软件保护方法。
[0012] 为了实现上述目的,本发明采用如下技术方案:
[0013] 反污点分析软件保护方法,包括:
[0014] 选取待保护程序;
[0015] 确定所述待保护程序中被污点标记的数据,即污点数据;
[0016] 确定针对所述污点数据进行反污点变换的最佳位置;
[0017] 对所述最佳位置上的污点数据进行反污点变换,得到反污点变换后的程序。
[0018] 具体地,所述的被污点标记的数据为所述待保护程序的输入数据。
[0019] 具体地,所述的针对所述污点数据进行反污点变换的最佳位置为数据流的主干。
[0020] 具体地,所述的对所述最佳位置上的污点数据进行反污点变换,得到反污点变换后的程序的具体实现方式包括:
[0021] 将污点数据转移到没有被污点标记的寄存器中,被污点标记的寄存器不断执行-1操作,没有被污点标记的寄存器不断执行+1操作,当被污点标记的寄存器减少到0,没有被污点标记的寄存器增加到被污点标记的数据的值;将没有被污点标记的寄存器赋值给被污点标记的寄存器,则被污点标记的寄存器中的数据转换成没有被污点标记的数据。
[0022] 与现有技术相比,本发明具有以下技术效果:
[0023] 本发明提出的反污点分析保护方法,通过阻断污点数据传播,将被标记的数据通过反污点变换加工成没有被标记的数据,使得污点无法传播下去,从而增强逆向分析难度,以达到保护作用。

附图说明

[0024] 图1为本发明的反污点分析软件保护方法的实施过程;
[0025] 图2为反污点分析前后被污点标记的数据比较图,其中(a)图为反污点分析前被污点标记的数据,(b)图为反污点分析后被污点标记的数据。
[0026] 具体实施方法
[0027] 为更加清楚的阐述本发明的方法及其优点,下面将结合附图和实施例对本发明的方案做进一步地描述。实施例
[0028] 本发明的反污点分析软件保护方法,参见图1,包括以下步骤:
[0029] 步骤一,选取待保护程序;
[0030] 步骤二,确定待保护程序中被污点标记的数据,即污点数据;
[0031] 步骤三,确定针对污点数据进行反污点变换的最佳位置;
[0032] 步骤四,对最佳位置上的污点数据进行反污点变换,得到反污点变换后的程序。
[0033] 本发明的核心思想是:将污点数据即被直接标记的数据通过反污点变换变换成没有被标记的数据,阻断污点传播的过程,使得污点无法传播下去或增加污点传播需要的技术成本,从而使得反污点分析难度增大,增强反污点分析保护强度,使得软件更难被逆向分析。
[0034] 为了便于对本发明的技术方案进行理解,此处提供了一个代码示例,由于一般情况较难拿到原代码,所以本实施例的方法是在其汇编代码上进行的,同时附有代码的解释说明。
[0035] 如下文是背景技术中的伪代码的汇编代码:
[0036]
[0037]
[0038] 现选用反污点分析方法对其进行保护:
[0039] 步骤一,上述程序为选取的待保护程序。
[0040] 步骤二,一般情况下,将程序输入数据进行标记,本实施例中被污点标记的数据为寄存器ax中的数据,其为污点数据,寄存器ax也被称为被污点标记的寄存器,参见图2中,方框中的数据为被污点标记的数据。
[0041] 步骤三,由于待保护程序在对数据流的加工过程中,数据流有可能会产生分支,如果对数据流的分支上的污点数据进行反污点变换会导致需要变换的数据过多,从而导致保护成本变高或者反污点变换不够全面导致反污点力度减小,所以针对数据流主干上的污点数据进行反污点变换,即针对污点数据进行反污点变换的最佳位置为数据流的主干;所述的数据流指的是,数据由生命周期开始,随着待保护程序中的函数调用变换,到其生命周期的结束,所述函数调用中数据的流向。
[0042] 步骤四,对数据流的主干上的污点数据进行反污点变换,此步骤为本发明的反污点分析软件保护方法的核心步骤,目的是将被污点标记的数据变成没有被污点标记的数据;本实施例采用循环转移的方法,将寄存器ax中的数据转移到没有被污点标记的寄存器bx中,具体的:寄存器ax不断执行-1操作,寄存器bx不断执行+1操作,当寄存器ax减少到0,寄存器bx随之增加到输入值,输入值为被污点标记的数据的值,由于寄存器ax到寄存器bx之间并没有直接或间接的赋值操作,则寄存器bx不会被标记;再将寄存器bx赋值给寄存器ax,此时寄存器ax中的数据的污点消除成为一个没有被污点标记的数据,由此可以阻断污点传播。
[0043] 保护后的程序代码如下:
[0044]
[0045]
[0046] 参见图2,保护前后污点数据的数量明显下降,更关键的是add ax,9没有被标记,即Key=X+9没有被标记,从而增加了逆向分析者找到核心数据的难度,提高了逆向分析的难度。