Page 317 - 《软件学报》2024年第6期
P. 317
徐建 等: LibPass: 基于包结构和签名的第三方库检测方法 2893
1, Sig (A) = Sig (B)
c c
(2)
sim c_to_c (A,B) =
w 1 sim b_to_b (A,B)+w 2 sim a_to_a (A,B)+w 3 sim m_to_m (A,B), otherwise
1, Sig (A) = Sig (B)
b b
sim b_to_b (A,B) = ) (3)
(
lcs Sig (A), Sig (B) /Sig (A), otherwise
b b b
1, Sig (A) = Sig (B)
a a
sim a_to_a (A,B) = ( ) (4)
lcs Sig (A),Sig (B) /Sig (A), otherwise
a a a
1, Sig (A) = Sig (B)
m m
sim m_to_m (A,B) = ) (5)
(
lcs Sig (A),Sig (B) /Sig (A), otherwise
m m m
每个 TPL 都包含很多类, 每个类对 TPL 功能实现的贡献是不尽相同的, 于是使用权重方式来体现类重要性程
度的差异. 类权重计算方法如公式 (6), 与 LibPecker 中采用的类权重度量方法是类似的, 其中函数 NumofMethods()
NumofDepClasses(C,i) 中参数 i 取值为 1 或 2, 分别表示类 C 所在根包中依赖于类 C
计算类拥有的方法数, 而函数
的类个数和类 C 依赖的其他类个数. 与 LibPecker 中类权重度量方法相比, 差异之处在于类 C 的依赖类数量度量
arp 中
方式, LibPass 不仅考虑了类 C 依赖的其它类个数, 而且考虑了依赖于类 C 的类个数, 并且将依赖关系范围限定于
所在的根包.
∑ 2
weight(C) = NumofMethods(C)+ NumofDepClasses(C,i) (6)
i=1
公式 (6) 表明类的方法数越多, 重要性越高; 另一方面, 类依赖的或被依赖的类越多, 则重要性越高. 进一步的,
假设类 C 所在的子包有 m 个类, 按照公式 (7) 计算得到归一化的类权重.
weight(C i )
(7)
weight(C = C i ) = ∑ m
weight(C i )
i=1
与类重要性类似, 根包中的子包也存在重要性程度差异, 同样采用权重机制来体现这一差异. 重点考虑子包中
类的个数和类权重来设计子包的权重计算方法, 如公式 (8) 所示, 其中函数 NumofClasses() 用于度量子包中类的个
数, C i ∈ SP, 1 ⩽ i ⩽ m .
∑
m
weight(SP) = NumofClasses(SP)+ weight(C i ) (8)
i=1
公式 (8) 表明子包拥有的类个数越多, 重要性越高; 子包中类的权重和越大, 则子包重要性越高. 类似地, 对子
包的权重进行归一化处理. 假设子包 SP 隶属的根包有 n 个子包, 则归一化后的权重可根据公式 (9) 计算.
( )
( ) weight SP j
(9)
weight SP = SP j = ∑
n ( )
weight SP j
j=1
下面阐述基于多级签名的细粒度检测方法识别 APP 中引入的特定版本的 TPL. 正如第 1.2 节分析的那样,
TPL 在引入到 APP 中时可能发生较大改变, 例如删除 TPL 中的部分方法、类等使得 APP 中保留的部分与该
TPL 原型差异甚大. 因此, 为了对抗上述混淆行为, 提出的基于多级签名的细粒度检测方法以 APP 中的根包为参
照对象以缓解方法、类, 甚至是包缺失带来的影响; 通过成对比较方式以最大相似性原则从本地 TPL 仓库中查找
引入的 TPL, 以避免误匹配和 TPL 版本错误.
给定待比较的包对 < arp,lrp > , 假设 n 1 个子包, lrp 中 n 2 个子包, 以根包 arp 为参照, 根包相似性可以根
据公式 (10) 计算, 其中 sim asp_to_lrp (asp ,lrp) 表示根包 lrp 中与子包 asp 最为相似的子包相似性值, 可以根据公式 (11)
i
i
计算.
∑
n 1 ( )
sim asp_to_lrp (asp ,lrp)×weight asp i
i
sim arp_to_lrp (arp,lrp) = i=1 (10)
n 1
{ }
n 2
sim asp_to_lrp (asp ,lrp) = max sim asp_to_lsp (asp ,lsp )| (11)
i i j j=1
同样以子包 asp 为参照, 将包中类相似性度量值以加权方式获得子包相似性. 假设子包 asp 中有 m 个类
i i