我已经在该站点上的其他几个问题中看到了这一点。但是,IDA Pro中的FLIRT签名是什么?我什么时候可以创建自己的供使用?

#1 楼

FLIRT代表快速库标识和识别技术。

Peter解释了基础知识,但是以下是有关其实现方式的白皮书:

https://www.hex-rays .com / products / ida / tech / flirt / in_depth.shtml


为了解决这些问题,我们创建了一个我们希望识别的所有库的所有函数的数据库
。 IDA现在在反汇编的程序的每个
字节处检查该字节是否可以标记标准库函数的开始。

识别算法所需的信息保存在
签名文件中。每个功能由一个模式表示。模式
是函数的前32个字节,其中标记了所有变体字节。


它有些旧(来自IDA 3.6),但基本原理仍然适用。

要创建自己的签名,需要FLAIR工具,这些工具可以单独下载。
(FLAIR意味着可以快速获取用于识别和识别的库)

IDA Pro书中包含关于FLIRT和使用FLAIR工具的一章。

评论


阿不知道那份白皮书。绝对比我的小评论更好地解释了它。

–彼得·安德森(Peter Andersson)
13 Mar 23 '13 at 13:48

#2 楼

调情签名是用于匹配已知函数头的模式。作为示例,请考虑以下内容:

push    ebp
mov     ebp, esp
sub     esp, 4Ch
mov     [ebp+var_4], eax
push    ebx
push    edi
...


编译器可以自由地将任何寄存器更改为另一个寄存器,或随意移动任何内容,因此这完全取决于编译器认为是什么。最佳。在其他地方进行编译时,编译器可能选择使用其他寄存器,例如:要么天真地根据指令序列创建签名,就可以:

push    ebp
mov     ebp, esp
sub     esp, 4Ch
mov     [ebp+var_4], eax
push    ecx
push    esi
...


假设堆栈帧使用ebp和esp,实际上这比听起来要危险得多。函数通常将ebp用作通用寄存器:

push    X
mov     X
sub     X
mov     X
push    X
push    X
...


IDA调情签名是尝试根据大量初始字符创建此类签名的尝试。函数的字节数。他们试图解决的问题是确定常用的代码。通过使用各种编译器编译各种常用库来生成这些签名。编译器生成库后,IDA便拥有从该库中提取签名的工具,并将其与源定义相匹配。一段时间后,您可以为通用库建立很多签名,这将为您节省大量时间。

为解决有关识别程序相似性和相关性的问题提供了更复杂的解决方案。差异请参见BinDiff。它使用了更高级的启发式方法。

我在上面作为示例使用的签名是毫无用处的,因为它太通用了,会产生很多错误的肯定匹配。

#3 楼

在Hex-Rays网站上:

A signature file contains patterns of standard runtime functions. 
With their help, IDA is able to recognize the standard functions and names them accordingly.


为了全面披露,我并没有真正创建任何供我自己使用的内容。我想创建自己的实例可能会有所帮助的一个实例是,如果您有很多属于同一家族的恶意软件。通常,他们编写和使用自己的库函数,对于FLIRT签名可以在这里提供帮助。

作为额外的好处,这是FLIRT签名的公共回购。

评论


我不认为该回购包含任何东西:)

–彼得·安德森(Peter Andersson)
13年3月23日在9:02

好吧,人们可以希望它会通过一些广告获得请求请求,对吗? ^ _ ^

–omghai2u
13年3月23日在9:05

鉴于Google Code已停产,几乎没有了。

– 0xC0000022L♦
9月13日20:21