国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

IDA 特征碼生成和搜索腳本

這篇具有很好參考價值的文章主要介紹了IDA 特征碼生成和搜索腳本。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

最近比較忙,就少寫兩句,直接附上源代碼,其中的細(xì)節(jié)點(diǎn)就不再贅述,如有疑問,請留言。


一共就是實(shí)現(xiàn)了兩個函數(shù),一個用于搜索特征碼 (SearchPattern),一個用于生成特征碼 (GenerateFunctionSignature)。

函數(shù)的參數(shù)和返回值:

1.SearchPattern?接收一個必要參數(shù)?hexStr(即要搜索的特征碼),一個可選參數(shù) num(最多返回多少個匹配的結(jié)果),返回一個存放所有符合條件的地址的 list

2.GenerateFunctionSignature 接收一個必要參數(shù) addr(即要生成特征碼的地址的起始位置),返回唯一的特征碼字符串,例如輸入地址:0x12345678,返回字符串 48 8B F2 4C 8B F1 E8 ?? ?? ?? ??

?

···?以下是?SearchPattern?的實(shí)現(xiàn):

 1 import ida_bytes
 2 import ida_ida
 3 
 4 def SearchPattern(hexStr, num = 0):
 5     '''
 6     hexStr: 輸入的特征碼字符串,例:41 80 BE ?? ?? ?? ?? 0F 84 ?? ?? 
 7     num:    搜索到多少個結(jié)果時返回,為 0 時搜索全部匹配的地址
 8     '''
 9     
10     # 生成掩碼
11     bMask = hexStr.replace('00', '01')
12     bMask = bMask.replace('??', '00')
13     bMask = bytes.fromhex(bMask)
14     # print(bMask)
15     
16     # 生成模式碼
17     bPattern = hexStr.replace('??', '00')
18     bPattern = bytes.fromhex(bPattern)
19     # print(bPattern)
20 
21 
22     results = []
23     ea = ida_ida.inf_get_min_ea()
24     
25     while True:
26         ea = ida_bytes.bin_search(
27             ea + 1, 
28             ida_ida.inf_get_max_ea(), 
29             bPattern, 
30             bMask, 
31             1, 
32             ida_bytes.BIN_SEARCH_FORWARD| ida_bytes.BIN_SEARCH_NOBREAK| ida_bytes.BIN_SEARCH_NOSHOW)
33         if ea == ida_idaapi.BADADDR:
34             break
35         else:
36             # 這里可以稍作修改,讓返回值變?yōu)楫?dāng)前函數(shù)的首地址
37             results.append(hex(ea))
38             if num != 0 and len(results) >= num:
39                 break
40     # print("find {} result".format(len(results)))
41     
42     return results
43 
44 
45 ## 測試
46 print(SearchPattern("48 8B C4 48 89 50 ??", 3))

?

?

···?以下是 GenerateFunctionSignature 的實(shí)現(xiàn):

 1 import ida_bytes, ida_ua
 2 
 3 def GenerateFunctionSignature(funcBase):
 4     # 初始化要用到的變量
 5     instruction = ida_ua.insn_t()
 6     offset = 0
 7     signature = ""
 8     
 9     # 最多分析 100 條指令
10     for count in range(1, 101):
11         ida_ua.decode_insn(instruction, funcBase + offset)
12         offset += instruction.size
13         patternTemp = [0 for i in range(0, instruction.size)]
14         
15         
16         # 遍歷當(dāng)前指令的全部操作數(shù),并將部分操作數(shù)的機(jī)器碼置為 ??
17         for op in instruction.ops:
18             if op.type == o_void:
19                 continue
20             #  模糊位 ?? 的匹配條件:
21             # and op.type != ida_ua.o_phrase and op.type != ida_ua.o_displ
22             elif (op.type != ida_ua.o_reg):
23                 for index in range(op.offb, instruction.size):
24                     patternTemp[index] = "??"
25 
26 
27         # 讀入除模糊位之外的機(jī)器碼
28         for index in range(0, instruction.size):
29             if patternTemp[index] == "??":
30                 pass
31             else:
32                 byteStr = format(ida_bytes.get_byte(instruction.ea + index), '02X')
33                 patternTemp[index] = byteStr
34             signature = signature + ' ' + patternTemp[index]
35 
36         
37         # 每分析 3 條指令,判斷一次當(dāng)前的 signature 是否唯一
38         if count%3 == 0:
39             if len(SearchPattern(signature, 2)) == 1:
40                 print('unique signature')
41                 return signature
42             else:
43                 # print('not unique signature')
44                 continue
45             
46     return None
47     
48 
49 ## 測試
50 print("pattern = ", GenerateFunctionSignature(0x320E21F))

?文章來源地址http://www.zghlxwxcb.cn/news/detail-411628.html

到了這里,關(guān)于IDA 特征碼生成和搜索腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用IDA查看匯編代碼,結(jié)合安卓系統(tǒng)生成的Tombstone文件,分析安卓app程序崩潰問題

    目錄 1、IDA工具介紹 2、產(chǎn)品及問題場景描述 3、查看Tombstone文件

    2024年02月13日
    瀏覽(22)
  • DAY23:二叉樹(十三)二叉樹的最近公共祖先+二叉搜索樹的最近公共祖先

    DAY23:二叉樹(十三)二叉樹的最近公共祖先+二叉搜索樹的最近公共祖先

    一定要仔細(xì)看 提示 ,二叉樹 數(shù)值不重復(fù) ,意味著后序遍歷不會存在兩邊找到了同個元素的情況 本題需要進(jìn)一步理解后序遍歷, 可以認(rèn)為后序遍歷在\\\"深入\\\"到每個子樹的最深層之后,才開始\\\"回溯\\\"并訪問節(jié)點(diǎn) 。 在某種意義上,這可以被視為從下往上的遍歷方式 , 但需要注

    2024年02月09日
    瀏覽(20)
  • LeetCode235. 二叉搜索樹的最近公共祖先

    LeetCode235. 二叉搜索樹的最近公共祖先

    235. 二叉搜索樹的最近公共祖先 一、題目 給定一個二叉搜索樹, 找到該樹中兩個指定節(jié)點(diǎn)的最近公共祖先。 百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結(jié)點(diǎn) p、q,最近公共祖先表示為一個結(jié)點(diǎn) x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大( 一個節(jié)點(diǎn)也可以是

    2024年02月12日
    瀏覽(17)
  • LeetCode_二叉搜索樹_中等_236.二叉搜索樹的最近公共祖先

    LeetCode_二叉搜索樹_中等_236.二叉搜索樹的最近公共祖先

    給定一個二叉搜索樹, 找到該樹中兩個指定節(jié)點(diǎn)的最近公共祖先。 百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結(jié)點(diǎn) p、q,最近公共祖先表示為一個結(jié)點(diǎn) x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節(jié)點(diǎn)也可以是它自己的祖先)?!?例如,給定如下二叉搜

    2023年04月10日
    瀏覽(18)
  • Java——二叉樹的最近公共祖先及二叉搜索樹介紹

    Java——二叉樹的最近公共祖先及二叉搜索樹介紹

    目錄 二叉樹的最近公共祖先 題目? 思路一:如果給定的是一顆二叉搜索樹, 思路二:假設(shè)是孩子雙親表示法 ?二叉搜索樹 定義Node類 查找 刪除 插入 給定一個二叉樹, 找到該樹中兩個指定節(jié)點(diǎn)的最近公共祖先。 百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個節(jié)點(diǎn)

    2023年04月08日
    瀏覽(19)
  • 簡單聊兩句前端模塊化

    在前端開發(fā)中,模塊化是一種將代碼拆分為獨(dú)立模塊的開發(fā)方法。它通過將功能相似或相關(guān)的代碼組織成可復(fù)用、可維護(hù)的模塊,以提高開發(fā)效率和代碼質(zhì)量。 模塊化的主要目的是解決傳統(tǒng)的JS開發(fā)存在的問題,例如全局命名沖突、代碼復(fù)用困難、依賴管理混亂等。通過模塊

    2024年02月05日
    瀏覽(23)
  • 基于SIFT圖像特征識別的匹配方法比較與實(shí)現(xiàn)

    基于SIFT圖像特征識別的匹配方法比較與實(shí)現(xiàn)

    目前常用的匹配器有 BFMatcher and FlannBasedMatcher 1.1 BFMatcher BFMatcher 全稱是 Brute-Force Matcher (直譯即為暴力匹配器) 大致原理: 對于 img1 中的每個描述符, BFMatcher 將其與 img2 中的所有描述符進(jìn)行比較;它計(jì)算兩個描述符之間的距離度量(例如,歐幾里得距離或漢明距離,默認(rèn)使

    2024年02月09日
    瀏覽(32)
  • Java LeetCode篇-二叉搜索樹經(jīng)典解法(實(shí)現(xiàn):二叉搜索樹的最近公共祖先、根據(jù)前序遍歷建樹等)

    Java LeetCode篇-二叉搜索樹經(jīng)典解法(實(shí)現(xiàn):二叉搜索樹的最近公共祖先、根據(jù)前序遍歷建樹等)

    ??博客主頁:?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評論? ?? 文章目錄 ? ? ? ? 1.0 判斷合法 ????????1.1 使用遍歷方式實(shí)現(xiàn)驗(yàn)證二叉搜索樹 ????????1.2 使用遞歸方式實(shí)現(xiàn)驗(yàn)證二叉搜索樹 ? ? ? ? 2.0 求范圍和 ? ? ? ? 2.1 使用非遞歸實(shí)現(xiàn)二叉搜索樹的范圍和

    2024年02月03日
    瀏覽(26)
  • 算法刷題Day 22 二叉搜索樹的最近公共祖先+二叉搜索樹中的插入操作+刪除二叉搜索樹中的節(jié)點(diǎn)

    根據(jù)二叉搜索樹的性質(zhì),相比普通二叉樹可以極大程度的簡化代碼,作為公共祖先其值一定在兩個給定節(jié)點(diǎn)值之間,從樹根往下遍歷,第一次出現(xiàn)兩個給定節(jié)點(diǎn)值之間的值,那個節(jié)點(diǎn)即為最近公共祖先(為什么是最近不是最遠(yuǎn)?根節(jié)點(diǎn)一般為最遠(yuǎn),第一次出現(xiàn)的值處于兩個給

    2024年02月17日
    瀏覽(20)
  • 最近超火的AI生成坤坤圖片教程

    最近超火的AI生成坤坤圖片教程

    前段時間不是來了一期SD AI繪畫教程嗎,相信不少小伙伴已經(jīng)能熟練掌握技巧了。 什么?一點(diǎn)沒看,那也沒事???? 本期教程和那個相差不大,可以在線食用免費(fèi)的SD應(yīng)用。不過為了省一下口袋里的幾個硬幣還是建議看看我之前的SD教程,畢竟裝好了可以無限食用。 原SD教

    2024年02月12日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包