18.IDA-创建自己的sig

工具

flirt68.zip

pcf.exe/pcf: 生成一个模式文件.pat
sigmake.exe: 生成一个签名文件.sig

流程

创建PAT

这里写图片描述

生成pat文件,pat.txt文件说明各个模式的格式。

第一部分

列举了它所代表的函数的初始字节序列,最长为32个字节。一些字节因为重定位的入口而有所不同,这些字节将得到“补偿”,每个字节以两点显示。。如果一个函数短于32个字节(例如前面代码中的_ffs函数),用点将模式填充到64个字符。

每个字节需要两个字符。要显示32个字节的内容,需要64个十六进制字符。

这里写图片描述
可以看到,OnFinalRelease函数的初始字节序为

85C974098B018B50046A01FFD2C3..........................

可以使用windbg查看下函数:

0:000> db 3e1010
003e1010 85 c9 74 09 8b 01 8b 50-04 6a 01 ff d2 c3 cc cc

其他部分

CRC16值、函数的字节长度以及函数引用的符号名称列表
这里写图片描述

创建sig

这里写图片描述
只要有两个函数的模式相同,就会发生冲突。如果不能解决冲突,在应用签名的过程中,我们就无法确定函数到底与哪一个签名相匹配。
只要存在冲存,sigmake生成的就不是.sig文件,而是一个排斥文件(.exc),.exc文件是文本文件,它详细说明了sigmake在处理模式文件时遇到的冲突
排斥文件是文本文件,它详细说明了sigmake在处理模式文件时遇到的冲突
每次运行sigmake失败都会产生以下注释,如再次失败,注释会附加在原来.ecx的最后
;--------- (delete these lines to allow sigmake to read this file)
; add '+' at the start of a line to select a module
; add '-' if you are not sure about the selection
; do nothing if you want to exclude all modules

随便找一个冲突点(可以看到它们的初始字节序列完全相同
+?GetDrawState@DUICheckBox@DM@@QAEHXZ 14 3ACE 33C03981A000000074298B4920F6C1107407B803000000EB12F6C1027407B802
?GetDrawState@DUIRadioButton@DM@@QAEHXZ 14 3ACE 33C03981A000000074298B4920F6C1107407B803000000EB12F6C1027407B802

1. 删除上面4行以分号开头的注释
2.sigmake让你仅指定一个函数作为相关签名的匹配函数。任何时候,如果在数据库中发现一个对应的签名,并且你想应用一个函数的名称,那么,你可以在该函数名称前附加一个加号;如果你只想在数据库中添加某个函数的注释,则在该函数名称前附加一个减号;如果在数据库中发现对应的签名时,你不想应用任何名称,那么,你不需要添加任何符号。(+号只能有一个,-号和+号二者只能存一)
比如上面DUICheckBox使用了+号(注意比较初始字节序号):
这里写图片描述

加载sig

成功生成签名文件后,你需要将它复制到你的/sig目录中,以便IDA使用这个文件。随后,你可以通过File▶Load File▶FLIRT Signature File访问这个新签名。
这里写图片描述

(1)为最大限度地减少冲突,请删除排斥文件开头的4个注释行。
(2)最多只能给冲突函数组中的一个函数附加+/-。
(3)如果一个冲突函数组仅包含一个函数,不要在该函数前附加+/-,让它保持原状即可。
(4)sigmake连续运行失败会将数据(包括注释行)附加到现有的任何.exc文件后。在再次运行sigmake之前,你必须删除这些额外的数据,并更正原始数据(如果这些数据是正确的,sigmake将不会再次运行失败)。

特别注意第四点,如果再次失败,.exc文件最后面会自动附加上面的注释行和失败地方,注意删除

IDB_2_PAT生成pat

可以在另一个IDA数据库生成pat,用于这个IDA数据库
如果只有dll,则反汇编该dll,然后用IDB_2_PAT插件生成.PAT文件然后sigmake生成.sig
http://www.openrce.org/downloads/details/26/IDB_2_PAT

IDA是一款非常强大的反汇编工具,它不仅可以将二进制文件反汇编成汇编代码,还可以对汇编代码进行分析和调试。在IDA中,我们可以进行文本搜索、二进制搜索和替换16进制字节序列等操作。 1. 文本搜索 在IDA中,我们可以使用快捷键Ctrl+F或者点击菜单“Edit”->“Find”来进行文本搜索。在搜索框中输入要查找的文本,点击“Find”按钮即可。如果要查找下一个匹配项,可以使用快捷键F3或者点击菜单“Edit”->“Find Next”。 2. 二进制搜索 在IDA中,我们也可以进行二进制搜索。首先,我们需要打开“Hex View-A”窗口,该窗口可以显示二进制文件的16进制表示。在该窗口中,我们可以使用快捷键Ctrl+F或者点击菜单“Search”->“Find Bytes”来进行二进制搜索。在搜索框中输入要查找的16进制字节序列,点击“OK”按钮即可。如果要查找下一个匹配项,可以使用快捷键F3或者点击菜单“Search”->“Find Next”. 3. 替换16进制字节序列 在IDA中,我们也可以替换16进制字节序列。首先,我们需要打开“Hex View-A”窗口。在该窗口中,我们可以使用快捷键Ctrl+R或者点击菜单“Search”->“Replace Bytes”来进行替换操作。在弹出的对话框中,输入要查找的16进制字节序列和要替换的16进制字节序列,然后点击“OK”按钮即可。如果要替换所有匹配项,可以点击“Replace All”按钮。 以上就是IDA中文本搜索、二进制搜索和替换16进制字节序列的操作方法。在实际使用中,这些操作非常实用,可以帮助我们更快地定位和解决问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值