代码行为理论的应用

来源:互联网 发布:c语言二分法解方程 编辑:程序博客网 时间:2024/05/20 02:28

代码行为理论的应用

      在对代码行为理论应用的探讨前,先对前面的论述的代码行为进行补充。
      代码行为的状态。代码行为作为一种行为,它有可能正处于实施,也有可能这种行为当前并没有进行,此外,代码行为还有可能满足某个条件,因而它对应三种状态:
               活跃--代码行为正处于进行中;
               沉默--代码行为当前并未进行;
               条件--代码行为满足一种条件。
在上面三种状态中,条件状态稍特殊于前两种状态。条件,可以是任意设定的、对代码行为进行判定的一种条件。如果条件是代码行为失效判定的条件,则这种条件便叫失效条件,满足失效条件的代码行为便是失效行为。

 

 

 

       代码行为理论探讨的是代码行为,这是所有代码的一种共性,因而应用广泛。现只以其在加密通信系统中的应用为例介绍。另外,代码行为是行为这个大系统下的一个子系统,而行为之下的子系统多种多样,因为能运动的事物太多了,如实物(人、沙子等)、虚物(事件)、半虚物(组织、机构、社团),各子系统在很多方面是相对应的,因而可以将代码行为系统内的概念映射至其它子系统。代码行为理论从本质上来讲它是一种分析、设计手段(方法、工具)。


一、 怎样应用代码行为理论
      当前,对各类技术的探讨主要集中在代码中的某一个功能模块(点),因而保护或反保护措施都显得相当薄弱。我们将通过我们的代码行理论介绍或总结或归纳一种新的分析、探讨方式(线或面)。应用步骤如下:
     1、 状态-特征收集(行为碎片--整个代码行为中的一个小行为--收集)。通过对某一代码行为发送一些特殊数据测试其反应或修改条件来改变代码行为的行进路线,从而收集代码行为所具有的状态、特征。当然,越详细越好。(具体的特殊数据与修改的条件所具有的特性正在研究中,见后面。)
     2、 代码行为还原。对从第一步收集的结果按代码行为的通用特征与种类进行行为还原。很明显,第一步的正向输出越多,对还原的行为与原代码行为间的相似程度便越近。(正向输出:对一代码行为的状态-特征收集,得到的结果能真实反映该代码行为,而不是一种迷惑或误导。)
     3、 代码行为分析。对还原后的代码行为与还代码行为的相似程度进行评估(相似程度评定依据、方法正在研究中,见后面),如果相似,则从代码行为层次对原代码行为进行分析、判断(分析原则正在研究中,见后面),从而得出对作用该行为的代码行为。

 

二、 应用实例(虚拟)--简单加密通信系统的破解
1、状态-特征收集
       假设,在多个系统间存在加密通信。首先,通过对系统间数据通信进行长期监控、测试与社会工程学的运用,发现它们具有如下特点:
          任何一系统都与其它系统连通。
          任何一个系统的发送出去的数据只被该系统授权下的系统所识别与解释。
          在与某一被授权的系统进行通信时,发送的数据无法被另一被授权、但不是通信方的系统识别与解释。
         (授权性质具有单向性。即,若只A授权给B,则B能解释A的数据,A不能解释B的数据,通信系统要复杂得多,只是理论应的例子,便不要此特性。)
          授权性质具有双向性,即,若A授权给B,则表明B也授权给A。
          任意两个处于授权下的系统在通信前会交换自己唯一标识ID(随授权变动而变动)。
          授权方式为人工设定,且根据需要改变授权结果。
          数据加密发生在网络层。
          加密通信时,使用内部协议(运行在网络层、传输层)。
     其次,通过入侵其中的一个系统,去掉系统对硬盘数据的保护,对存在于硬盘上的数据进行全盘拷贝,得到原系统的一个副本。在实验环境中运行副本,然后对副本所在机器进行一些必要调整,使副本能完全正常运行。再对系统(副本)进行代码行为分析,又发现一些特点:
          F:加密数据的构造模块,加密过程不可逆。
          G:授权集,非空,元素存在分类的特性,同一类下的一个元素g代表一个授权标识。
          原始数据(TCP或UDP首部)与加密数据混合存放。
          F输入有三项:G,自己ID,数据。
          H:由G,对方ID生成的函数,不可逆。
          H输入有四项G,自己ID,对方ID,数据,用于对F加密后的数据处理,并能得到原始数据。(H不是F的逆过程,但能得出F作用前的原始数据。若代码行为是一直线上,其上依次向右存在四点A、B、C、D,则F为AB,H为CD。BA为F的逆。)

2、代码行为还原
       根据前面代码行为分析与测试收集来的行为碎片,对其筛选,再依据代码行为的特点、状态、种类及作用关系,对通信系统的代码行为进行还原:
      通信系统间通过授权的方式标识各方的信任关系。信任关系相对固定,且在需要时通过人工改变。处于同一信任关系下的系统能互相通信,但在任意一次通信过程中,能参与通信的系统只有两个。各系统使用传输层上的内部协议进行通信,整个传输层上的数据除首部外被加密,加密后的数据与传输层首部数据混合存放于IP包内。通信接收方在对接收到的数据进行身份验证后用生成的H模块进行还原操作,再交付上层。

3、代码行为分析
      通过对还原后的代码行为与实际代码行为进行相似性评估,得到其相似程度接近90%,在相似等级中处于中高等,表明两者非常相似。所以,对通信系统的代码行为的作用可以基于还原后的代码行为(相似性决定作用的成功程度)。
      通过代码行为分析,我们没必要对F与H进行研究,并企图以此找出通信数据。我们知道H是关键,可以构造出H的生成模块及H本身--HH,再找出H的输入各项,输入至HH,以得到还来数据。因为先身份验证,再用H还原,所以可以推断关于身份的数据不是加密数据中的一部分,因此,较易得到它们(通过内部协议)。
     破解系统代码行为:监控网络,发现通信双方身份信息(基于其内部协议),再将截获数据与身份信息输入HH,得到通信数据内容。
若一个系统中加密模块为F,不可逆,加密数据很短,可直接暴力破解:构造与F相同的模块FF,然后找到F的各项输入(非待加密数据),作为FF输入;数据部分则进行枚举(可分段枚举,如数台电脑同时有FF,则可每台电脑只枚举总的枚举范围内的一个小段)。
     从这个应用例子(只是代码行为研究中的一种,而且虽然是虚构的)可以看出,以代码行为角度去分析,分析基于的是整个代码行为(就好像基于整条直线),而不是某个单独的功能模块(就好像直线上的一个点),因而突破口会有更多,效果就更大。
后话:

     也许大家很奇怪,具体的一些方法、原则都没出来怎么能论述如何应用。这就是基于代码行为这一层次去研究的好处,就好像通过“自顶向下,逐步求精”得出功能模块结构,在编写代码时,对于其中某一模块我们可以先不实现,留一空函数在那,只要只知道这函数对应的功能就行,可以在后面再实现该功能。
     我们需要研究的东西有很多,很期待更多有志之士的加入。