taintPropagation
taintPropagation(List<Long> Source, List<Long> sink, Integer flag, List<Long> should, List<Long> shouldNot)
- 参数
- List<Long> source: source 点 ID 集合
- List<Long> sink: sink 点 ID 集合
- Integer flag: 默认为空为从source和sink中较少的一方传递
- flag=1 时为有方向从 source 到 sink
- flag=2 时为有方向从 sink 到 source
- flag=3 时污点分析为无向
- List<Long> should: 期望经过的点ID集合
- List<Long> shouldNot: 排除点ID的集合
- 功能
- 找出 source 到 sink 之间的传输路径
- 返回
- 通路上点的集合
- 样例
查找集合[845623]到集合[845593, 845664]之间的单向污点路径,并且途中需要经过集合[845658]
CALL VQL.taintPropagation([845623], [845593, 845664], 1, [845658])
doubleTaintPropagation
doubleTaintPropagation(Long sourceId, Long sinkId, Integer flag, List<Long> should, List<Long> shouldNot)
- 参数
- Long sourceId: source 点 ID
- Long sinkId: sink 点 ID
- Integer flag: 默认为空为从 source 和 sink 中较少的一方传递
- flag=1 时为有方向
- flag=2 时为无方向
- List<Long> should: 期望经过的点 ID 集合
- List<Long> shouldNot: 排除点 ID 的集合
- 功能
- 双向找出 source 到 sink 之间的传输路径
- 返回
- 通路上点的集合
- 样例
同时从点845623和845664向中间查找有向污点路径。
CALL VQL.doubleTaintPropagation(845623,845664,1)
simpleTaintPropagation
simpleTaintPropagation(List<Long> source, List<Long> sink, Integer flag)
- 参数
- List<Long> source: source 点 ID 集合
- List<Long> sink: sink 点 ID 集合
- Integer flag: 默认为空为从source和sink中较少的一方传递
- flag=1时为有方向
- flag=2时为无方向
- flag=3时找出全部路径
- 功能
- 使用最短路径找出 source 到 sink 之间通路
- 返回
- 通路上点的集合
- 样例
使用最短路径找出集合[845623]到集合[845664]的有向污点传输路径
CALL VQL.simpleTaintPropagation([845623],[845664],1)
getAllBasicblocks
getAllBasicblocks()
- 参数
- 无
- 功能
- 获取当前项目所有基本块
- 返回
- 基本块节点
- 样例
找出当前分析项目中所有的基本块节点
CALL VQL.getAllBasicblocks
getAllFunctions
getAllFunctions()
- 参数
- 无
- 功能
- 获取当前项目所有函数
- 返回
- 函数节点
- 样例
找出当前分析项目中所有函数节点
CALL VQL.getAllFunctions
getAllFiles
getAllFiles()
- 参数
- 无
- 功能
- 获取当前项目所有文件
- 返回
- 文件节点
- 样例
找出当前分析项目中所有文件节点
CALL VQL.getAllFiles
getASTOfCodeline
getASTOfCodeline(String function, Long nodeId, Long line)
- 参数
- String function: 函数名
- Long nodeId: 节点 ID,按照 code_line 的 id 进行查询
- Long line: 行号
- 功能
- 获取指定code_line的AST路径
- 当 nodeId 为空时按照 function、line 进行查询
- 返回
- 样例
找出函数中第 11 行 code_line 对应的 ast 路径
CALL VQL.getASTOfCodeline("_mgfini_BFDD", 11)
找出code_line的id为31687对应的ast路径
CALL VQL.getASTOfCodeline(31687)
getBasicblockOfFunction
getBasicblockOfFunction(Long functionId, String start_address)
- 参数
- Long FunctionId:
- String start_address: 函数入口点地址
- 功能
- 获取指定函数的基本块
- 返回
- 基本块节点
- 样例
找出入口地址为0805be6b函数的所有基本块
CALL VQL.getBasicblockOfFunction("0805be6b")
找出id号为22947函数的所有基本块
CALL VQL.getBasicblockOfFunction(22947)
getArgument
getArgument(String callee, Long index)
- 参数
- callee: 调用函数
- index: 参数位置
- -1 代表输出
- 0 代表第一个参数、1 代表第二个参数、以此类推
- 功能
- 通过变量被调用的函数和参数顺序定位变量
- 返回
- 变量节点
- 样例
找出位于函数malloc第一个参数位置上的所有变量
CALL VQL.getArgument("malloc",0)
getChildren
getChildren(Long nodeId, Long stepStart, Long stepStop)
- 参数
- Long nodeId: 指定节点的id
- Long stepStart: 最小跳数
- Long stepStop: 最大跳数
- 功能
- 获取指定节点指定层数的子节点路径
- 返回
- 到达子节点路径
- 样例
找出距离节点958080一跳距离的子节点
CALL VQL.getChildren(958080, 1, 1)
getFunctionByAddress
getFunctionByAddress(String entry_point)
- 参数
- String entry_point: 指定函数的入口地址
- 功能
- 通过入口地址查找函数节点
- 返回
- 函数节点
- 样例
找出入口地址为 0x080f316c 的函数
CALL VQL.getFunctionByAddress("080f316c")
getFunctionsByName
getFunctionsByName(String function)
- 参数
- String function: 指定函数的名称
- 功能
- 通过函数名称查找函数节点,支持模糊匹配
- 返回
- 函数节点
- 样例
找出函数名为 zclient 的函数
CALL VQL.getFunctionsByName("zclient")
getFunctionsOfFile
getFunctionsOfFile(String name)
- 参数
- String name: 指定文件的名称
- 功能
- 获取指定文件的所有函数,支持模糊匹配
- 返回
- 函数节点
- 样例
找出文件名为 bgpd 下面的所有函数
CALL VQL.getFunctionsOfFile("bgpd")
getInfluencedCodeline
getInfluencedCodeline(Long nodeId, Long stepStart, Long stepStop)
- 参数
- Long nodeId: 指定节点的 id
- Long stepStart: 最小跳数
- Long stepStop: 最大跳数
- 功能
- 通过变量获取其所在的语句节点
- 返回
- code_line 节点
- 样例
找出距离变量节点 50523 步长为 1 的 code_line
CALL VQL.getInfluencedCodeline(150523, 1, 1)
getInputsOfCodeline
getInputsOfCodeline(Long nodeId)
- 参数
- Long nodeId: 指定代码行 code_line 的 id
- 功能
- 获取节点所归属AST的输⼊变量
- 返回
- 变量节点
- 样例
找出 code_line 987013 通过 asts 输入的相应变量
CALL VQL.getInputsOfCodeline(987013)
getCodelineByName
getCodelineByName(String name)
- 参数
- String name: 指定代码行 code_line 的内容
- 功能
- 通过语句内容来获取 code_line 节点
- 返回
- code_line 节点
- 样例
- 找出内容为 11: *DAT_080f1264 = iVar1 所对应的 code_line
CALL VQL.getCodelineByName("11: \*DAT_080f1264 = iVar1;")
- 找出内容为 11: *DAT_080f1264 = iVar1 所对应的 code_line
getCodelineOfBasicblock
getCodelineOfBasicblock(String start_address, String stop_address)
- 参数
- String start_address: 起始地址
- String stop_address: 终止地址
- 功能
- 通过基本块地址来获取 code_line 节点
- 返回
- code_line 节点
- 样例
找出起始地址为: 0x0804e0f3,终止地址为: 0x0804e10d 的基本块对应的 code_line
CALL VQL.getCodelineOfBasicblock("0804e0f3", "0804e10d")
getCodelineOfFunction
getCodelineOfFunction(String function, String entry_point)
- 参数
- String function: 函数名
- String entry_point: 函数入口点
- 功能
- 通过函数名或者入口地址获取 code_line 节点
- 返回
- code_line 节点
- 样例
找出函数名为 _sub_I_01001_0.0 对应的所有 code_line
CALL VQL.getCodelineOfFunction("_sub_I_01001_0.0", null)
找出入口地址为 0x0804e645 的函数对应的所有 code_line
CALL VQL.getCodelineOfFunction(null, "0804e645")
getOutputsOfCodeline
getOutputsOfCodeline(Long nodeId)
- 参数
- Long nodeId: 指定语句节点的id值
- 功能
- 获取指定语句节点所归属 AST 的输出变量
- 返回
- 变量节点
- 样例
找出 code_line 31683 通过 asts 输出的相应变量
CALL VQL.getOutputsOfCodeline(31683)
getParents
getParents(Long nodeId, Long stepStart, Long stepStop)
- 参数
- Long nodeId: 指定节点的id
- Long stepStart: 最小跳数
- Long stepStop: 最大跳数
- 功能
- 获取指定节点指定层数的父节点路径
- 返回
- 到达父节点路径
- 样例
找出距离节点31683步长为1的所有父节点
CALL VQL.getParents(31683, 1, 1)
getFileByName
getFileByName(String name)
- 参数
- String name: 指定文件文件名
- 功能
- 通过文件名获取文件节点
- 返回
- 文件节点
- 样例
找出文件名为bgpd的所有文件节点
CALL VQL.getFileByName("bgpd")
getClassByNameSpace
getClassByNameSpace(String namespace)
- 参数
- String namespace: 指定的命名空间名称
- 功能
- 通过命名空间获取类节点
- 返回
- 类节点
- 样例
找出命名空间名称为std::verify的所有类节点
CALL VQL.getClassByNameSpace("std::verify")
getClassByType
getClassByType(String type)
- 参数
- String type: 制定的类类型
- 功能
- 获取指定类型的类节点
- 返回
- 类节点
- 样例
找出类类型为 User-defined 的所有类节点
CALL VQL.getClassByType("User-defined")
getClassByName
getClassByName(String name)
- 参数
- String name: 指定的类名称
- 功能
- 获取指定名称的类节点
- 返回
- 类节点
- 样例
找出类名称为encryption的类节点
CALL VQL.getClassByName("encryption")
getClassOfFile
getClassOfFile(String name)
- 参数
- String name: 指定的类名称
- 功能
- 获取指定文件中的类节点
- 返回
- 类节点
- 样例
找出文件名为bgpd中的所有类节点
CALL VQL.getClassOfFile("bgpd")
getFunctionOfClass
getFunctionOfClass(String name )
- 参数
- String name: 指定的类名称
- 功能
- 获取指定类中的成员函数
- 返回
- 函数节点
- 样例
找出类encryption中的所有函数节点
CALL VQL.getFunctionOfClass("encr")
getFileldOfClass
getFileldOfClass(String name)
- 参数
- String name: 指定的类名称
- 功能
- 获取指定类中的成员变量
- 返回
- 变量节点
- 样例
找出类encryption中所有的类成员变量
CALL VQL.getFileldOfClass("encryption")
getOperatorByName
getOperatorByName(String name)
- 参数
- String name: 操作符的名称
- 功能
- 通过名称获取操作符
- 返回
- 操作符节点
- 样例
找出所有的+操作符变量
CALL VQL.getOperatorByName("+")