工具
flirt68.zip
pcf.exe/pcf: 生成一个模式文件.pat
sigmake.exe: 生成一个签名文件.sig
流程
创建PAT
生成pat文件,pat.txt文件说明各个模式的格式。
第一部分
列举了它所代表的函数的初始字节序列,最长为32个字节。一些字节因为重定位的入口而有所不同,这些字节将得到“补偿”,每个字节以两点显示。。如果一个函数短于32个字节(例如前面代码中的_ffs函数),用点将模式填充到64个字符。
可以看到,OnFinalRelease函数的初始字节序为
可以使用windbg查看下函数:
其他部分
CRC16值、函数的字节长度以及函数引用的符号名称列表
创建sig
只要有两个函数的模式相同,就会发生冲突。如果不能解决冲突,在应用签名的过程中,我们就无法确定函数到底与哪一个签名相匹配。
只要存在冲存,sigmake生成的就不是.sig文件,而是一个排斥文件(.exc),.exc文件是文本文件,它详细说明了sigmake在处理模式文件时遇到的冲突
排斥文件是文本文件,它详细说明了sigmake在处理模式文件时遇到的冲突
每次运行sigmake失败都会产生以下注释,如再次失败,注释会附加在原来.ecx的最后
随便找一个冲突点(可以看到它们的初始字节序列完全相同)
1. 删除上面4行以分号开头的注释
2.sigmake让你仅指定一个函数作为相关签名的匹配函数。任何时候,如果在数据库中发现一个对应的签名,并且你想应用一个函数的名称,那么,你可以在该函数名称前附加一个加号;如果你只想在数据库中添加某个函数的注释,则在该函数名称前附加一个减号;如果在数据库中发现对应的签名时,你不想应用任何名称,那么,你不需要添加任何符号。(+号只能有一个,-号和+号二者只能存一)
比如上面DUICheckBox使用了+号(注意比较初始字节序号):
加载sig
成功生成签名文件后,你需要将它复制到你的/sig目录中,以便IDA使用这个文件。随后,你可以通过File▶Load File▶FLIRT Signature File访问这个新签名。
附
特别注意第四点,如果再次失败,.exc文件最后面会自动附加上面的注释行和失败地方,注意删除