增强了IDA Pro签名生成器插件。
复制IDA_SigMaker32.dLL和IDA_SigMaker64.dLL到您的IDA plugins目录。
默认的IDA热键是“ Ctrl-Alt-S”,但可以使用键iDA“ plugins.cfg”设置为另一个。由于“ Ctrl-Alt-S”现在组合与IDA默认值发生冲突,以避免获取警告消息,编辑您的“ Idagui.cfg”,然后将“ stacktrace”条目像: "StackTrace" = 0 // "Ctrl-Alt-S" // open stack trace window ('0'''''''''''''''''''''''键)。
需要IDA Pro版本7.6'ISH。
通过其HOTKEY或IDA编辑/插件菜单调用插件。

有三个签名生成操作:
功能:根据选项配置,用于创建唯一功能入口点,带偏移量的最小函数签名或全身签名(见下文)。
首先选择目标功能内的任何地址。如果所选函数不是唯一的(对于入口点或最小选项),则将尝试使用唯一函数交叉引用扫描的签名。
典型的用例:签名在运行时间在目标内存中找到功能,在可执行更新后在IDA中找到功能,或帮助通过签名来定位已知库,等等。
示例签名输出: 
将签名结果推到Windows剪贴板上,以使CTRL+V粘贴到源代码等。

输出格式: IDA :IDA和其他一些工具支持的默认十六进制二进制搜索格式,使用间隔的十六进制字节和“ ??”通配符。示例: C1 6C E8 ?? ?? ?? ?? 8B 50 08代码样式:逃生编码的十六进制字符串和一个单独的掩码字符串,其中“ x”为keeper字节,而“?”是通配符字节。示例: "xC1x6CxE8xCCxCCxCCxCCx8Bx50x08", "xxx????xxx" inline byte :一种简约的Bytes bytes bytes bytes bytes bytes bytes格式。示例: {0xC1,0x6C,0xE8,0xAE,0xAE,0xAE,0xAE,0x8B,0x50,0x08};使用“蒙版字节”编辑框来更改默认的内联字节“蒙版”字节。默认的蒙版字节是0xAE ,这是使用最少的代码字节之一(请参见下面的“理想掩码字节”)。
“功能”签名生成的标准。入口点:如果可能的话,将尝试生成最小的字节大小函数入口点签名。最小的字节大小:将尝试生成最小的通配符计数,字节大小(五个是更大的指令边界边界边界对齐的签名,则在选定功能主体内部对齐签名。完整功能主体:将尝试生成独特的完整功能主体签名。
对于这三个选项中的任何一个,如果该函数不是唯一的,则将尝试定位最小的独特交叉引用签名。如果您希望为非唯一功能制作完整或部分功能签名,请改用“从地址范围”选项。
消息级别:将内部签名生成消息输出到IDA日志窗口中设置为“冗长”。
最大函数扫描参考:限制当无法找到直接“函数”动作签名时搜索多少函数交叉引用。通常,对于无限搜索,这应该是“ 0”,但是对于存在太多参考以使其导致放缓的问题案例,可以将其设置为合理的限制,例如16或100,以提高扫描速度。
对于相对罕见的功能情况,其块分布在多个地址范围上,该工具将尝试仅使用第一个块。如果希望在其中一个脱节的块之一中进行签名,请尝试使用“地址”方法。如果所有其他方法都失败了,请尝试“从地址范围” SIG(可能需要一些手动搜索独特性)。
最大函数入口点签名字节:使用“函数”选项时,配置了“入口点”标准,可选地限制最大入口点签名字节大小。默认值为“ 0”,对于无限制(可以达到整个选定函数字节大小)。如果超过此限制,则将寻找交叉引用签名。
设置为“ 16”或“ 32”之类的实际限制,对于通常较小的XREF签名与可能非常大的入口点签名。
Sigmakerex(“ EX”)总体上通过使用更好的指导分析生成较小,更紧密的功能签名。示例:Sigmaker(“ SM”)通配符指令sub esp, 90h (为"81 EC ?? ?? ?? ?? ),不必要地抛出了最后四个字节。虽然Ex将其视为直接值并保持整个81 EC 90 00 00 00 Byte序列。
EX更好地专注于规范功能身体签名用例。对于SM,只有一个可控的选项。它将尝试在您在函数中选择的地址中的任何地方进行独特的签名。如果在那里找不到一个,它将仅寻找独特的交叉引用SIG。对于EX,由于已确定的典型用例是定位功能入口点,因此在配置“入口点”标准选项时将生成最小的入口点签名。因为选择“最小字节大小”选项时,它将在整个函数主体中寻找最小和最小的通配符计数(至少五个字节)的独特签名。
SM在“选项”对话框中对字节与通配符等的更多输出标准控制。 ex假设您想要最好的(最小通道和最小的字节尺寸)。
EX省略了SM比更简单,更杂乱的UI的“转换”和单个“搜索”功能。
为了进行搜索,由于EX始终发出IDA格式输出,除了选定的输出格式签名之外,请使用IDA Sig Sig String使用IDA二进制搜索“ HEX”选项。
由于将IDB克隆到RAM并使用AVX2优化的模式扫描仪与依靠依靠慢速IDA查找功能进行扫描的技术,EX通常甚至更广泛的搜索速度也更快。
在我自己的动态寻找模式的项目中,我更喜欢“内联字节”(由于缺乏更好的名称)格式。这是最简单,最紧凑的,并且不需要从ASCII六角字符串进行运行时转换。我已经为许多项目使用了这种格式,但尚未遇到任何签名碰撞或冗余匹配问题。
为了最大程度地减少潜在的冗余问题,谨慎使用通配符/蒙版字节的最不使用的代码值之一。为了找到理想的候选人,我从每个三个大32位和64位代码段中收集了代码字节频率,然后将结果列为列表并对结果进行排序。使用“ IDA_GET_BYTE_FREQUENCY.PY” IDA脚本收集字节频率字典,并将其保存到JSON DB中。 “ BYTE_FREQUENCY_TABULES.PY”脚本按升序顺序排列并按顺序排列这些保存的JSON DB。显然,32位的字节频率与64位的字节频率并不相同,并且独立列表。请参阅“ 32bit.txt”和“ 64bit.txt”。在两者的视觉相关性中,0xa2实际上是最不常见的分母,然后是0xae。 0xae被选为0xA2作为默认蒙版字节,因为它在主观上更易于在视觉上挑选。
在Windows 10上使用Visual Studio 2019建造,唯一的依赖性是IDA Pro C/C ++ SDK。在项目文件中的设置,它寻找一个环境变量_IDADIR ,它希望从中找到一个“ IDASDK/INCELLY”和“ IDASDK/LIB”文件夹,其中IDA SDK所在。不使用IDADIR ,因为IDA本身会寻找它,如果您尝试使用多个安装的IDA版本,可能会引起冲突。
Python 3.7'ish或更好地运行“ Byte_frequency_tabulate.py”脚本。
多亏了原始Sigmaker工具的创建者,从GameCeption.net天到当前的C/C ++和Python Iteration作者:P4TR!CK,Bobbysing,Xero | Hawk,Ajkhoury和Zoomgod等。感谢Wojciech Mula的SIMD编程资源。
在MIT下发布©2022由Kevin Weatherman发布