增強了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發布