木马查杀之AST初识篇
一、AST 定义
抽象语法树(Abstract Syntax Tree,AST)是源代码的一种抽象表示形式。它以树状结构描述源代码的语法构成,树上的每个节点都对应源代码中的一个语法结构或元素,像变量声明、函数调用、表达式等。通过这种结构化的表示,能让程序分析变得更加高效和准确。
词法分析这一步,就像是有个超级厉害的 “断句大师”,把这串字符按照一定的规则,拆分成一个个有意义的小单元,我们叫它们词法单元。
【作用】将代码字符,就变成了一个个清晰的 “小零件”
二、AST 分析过程
(一)词法分析
将输入的源代码字符串按字符流方式扫描,把它分割成一个个词法单元,比如关键字(如if
、while
)、标识符(变量名、函数名)、运算符(+
、*
)等。这一步就像是把一篇文章拆分成一个个的单词。
(二)语法分析
基于词法分析得到的词法单元,依据编程语言的语法规则构建 AST。语法分析器按照语法规则对词法单元进行组合与推导,明确它们之间的语法关系,从而构建出代表整个源代码语法结构的抽象语法树。这就如同把单词按照语法规则组成句子和段落。
说人话,就是语法分析就像是一个 “组装大师”,它手里有一本编程语言的 “语法规则手册”,它会依据这本手册,把那些词法单元按照规则进行组合和推导,通过这样一步步的操作,构建出一棵代表整个源代码语法结构的抽象语法树。
三、污点追踪定义
污点追踪(Taint Tracking)是一种程序分析技术,用于跟踪程序中数据的传播和使用情况,尤其是那些可能存在安全风险或需要特殊处理的数据。被标记为 “污点” 的数据,通常来自外部不可信源,或者对程序安全至关重要。
四、污点追踪实现方式
(一)静态污点追踪
在程序的源代码或字节码级别上进行分析。通过对程序的控制流和数据流进行分析,确定数据的来源和可能的传播路径,标记出可能存在安全风险的数据传播路径。这种方式不需要实际运行程序,提前发现潜在风险。
【一句话】在程序还没真正运行之前,进行分析程序是否存在问题
(二)动态污点追踪
在程序运行时对数据的流动进行实时监测和追踪。通过在程序运行过程中插入一些监测代码或利用特定的调试工具,当数据在程序中进行赋值、传递、计算等操作时,动态地记录数据的传播轨迹和变化情况。这种方式能更真实地反映程序运行时的数据情况。
【一句话】在程序真正 “开工干活”(运行)时,把数据的传播轨迹和变化情况都记录下来
下一步
- 通过 AST 分析木马的代码结构,利用污点追踪监测恶意数据的流向。