最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

LyScript實現(xiàn)指令查詢功能的示例代碼

 更新時間:2022年09月01日 09:09:02   作者:lyshark  
對LyScript自動化插件進行二次封裝,可以實現(xiàn)從內(nèi)存中讀入目標進程解碼后的機器碼。所以本文為大家介紹了如何實現(xiàn)LyScript指令查詢功能,需要的可以參考一下

通過對LyScript自動化插件進行二次封裝,實現(xiàn)從內(nèi)存中讀入目標進程解碼后的機器碼,并通過Python代碼在這些機器碼中尋找特定的十六進制字符數(shù)組,或直接檢索是否存在連續(xù)的反匯編指令片段等功能。

LyScript項目地址:https://github.com/lyshark/LyScript

搜索內(nèi)存中的機器碼

內(nèi)存機器碼需要配合LyScript32插件,從內(nèi)存中尋找指令片段。

from LyScript32 import MyDebug

# 將可執(zhí)行文件中的單數(shù)轉(zhuǎn)換為 0x00 格式
def ReadHexCode(code):
    hex_code = []

    for index in code:
        if index >= 0 and index <= 15:
            #print("0" + str(hex(index).replace("0x","")))
            hex_code.append("0" + str(hex(index).replace("0x","")))
        else:
            hex_code.append(hex(index).replace("0x",""))
            #print(hex(index).replace("0x",""))

    return hex_code

# 獲取到內(nèi)存中的機器碼
def GetCode():
    try:
        ref_code = []
        dbg = MyDebug()
        connect_flag = dbg.connect()
        if connect_flag != 1:
            return None

        start_address = dbg.get_local_base()
        end_address = start_address + dbg.get_local_size()

        # 循環(huán)得到機器碼
        for index in range(start_address,end_address):
            read_bytes = dbg.read_memory_byte(index)
            ref_code.append(read_bytes)

        dbg.close()
        return ref_code
    except Exception:
        return False

# 在字節(jié)數(shù)組中匹配是否與特征碼一致
def SearchHexCode(Code,SearchCode,ReadByte):
    SearchCount = len(SearchCode)
    #print("特征碼總長度: {}".format(SearchCount))
    for item in range(0,ReadByte):
        count = 0
        # 對十六進制數(shù)切片,每次向后遍歷SearchCount
        OpCode = Code[ 0+item :SearchCount+item ]
        #print("切割數(shù)組: {} --> 對比: {}".format(OpCode,SearchCode))
        try:
            for x in range(0,SearchCount):
                if OpCode[x] == SearchCode[x]:
                    count = count + 1
                    #print("尋找特征碼計數(shù): {} {} {}".format(count,OpCode[x],SearchCode[x]))
                    if count == SearchCount:
                        # 如果找到了,就返回True,否則返回False
                        return True
                        exit(0)
        except Exception:
            pass
    return False

if __name__ == "__main__":
    # 讀取到內(nèi)存機器碼
    ref_code = GetCode()
    if ref_code != False:
        # 轉(zhuǎn)為十六進制
        hex_code = ReadHexCode(ref_code)
        code_size = len(hex_code)

        # 指定要搜索的特征碼序列
        search = ['c0', '74', '0d', '66', '3b', 'c6', '77', '08']

        # 搜索特征: hex_code = exe的字節(jié)碼,search=搜索特征碼,code_size = 搜索大小
        ret = SearchHexCode(hex_code, search, code_size)
        if ret == True:
            print("特征碼 {} 存在".format(search))
        else:
            print("特征碼 {} 不存在".format(search))
    else:
        print("讀入失敗")

輸出效果:

搜索內(nèi)存反匯編代碼

通過LyScript插件讀入內(nèi)存機器碼,并在該機器碼中尋找指令片段,找到后返回內(nèi)存首地址。

from LyScript32 import MyDebug

# 檢索指定序列中是否存在一段特定的指令集
def SearchOpCode(OpCodeList,SearchCode,ReadByte):
    SearchCount = len(SearchCode)
    for item in range(0,ReadByte):
        count = 0
        OpCode_Dic = OpCodeList[ 0 + item : SearchCount + item ]
        # print("切割字典: {}".format(OpCode_Dic))
        try:
            for x in range(0,SearchCount):
                if OpCode_Dic[x].get("opcode") == SearchCode[x]:
                    #print(OpCode_Dic[x].get("addr"),OpCode_Dic[x].get("opcode"))
                    count = count + 1
                    if count == SearchCount:
                        #print(OpCode_Dic[0].get("addr"))
                        return OpCode_Dic[0].get("addr")
                        exit(0)
        except Exception:
            pass

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接狀態(tài): {}".format(connect_flag))

    # 得到EIP位置
    eip = dbg.get_register("eip")

    # 反匯編前1000行
    disasm_dict = dbg.get_disasm_code(eip,1000)

    # 搜索一個指令序列,用于快速查找構(gòu)建漏洞利用代碼
    SearchCode = [
        ["push 0xC0000409", "call 0x003F1B38", "pop ecx"],
        ["push ecx", "push ebx"]
    ]

    # 檢索內(nèi)存指令集
    for item in range(0,len(SearchCode)):
        Search = SearchCode[item]
        # disasm_dict = 返回匯編指令 Search = 尋找指令集 1000 = 向下檢索長度
        ret = SearchOpCode(disasm_dict,Search,1000)
        if ret != None:
            print("指令集: {} --> 首次出現(xiàn)地址: {}".format(SearchCode[item],hex(ret)))

    dbg.close()

輸出效果:

以上就是LyScript實現(xiàn)指令查詢功能的示例代碼的詳細內(nèi)容,更多關(guān)于LyScript指令查詢的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python之指數(shù)與E記法的區(qū)別詳解

    Python之指數(shù)與E記法的區(qū)別詳解

    今天小編就為大家分享一篇Python之指數(shù)與E記法的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python字典推導(dǎo)式將cookie字符串轉(zhuǎn)化為字典解析

    Python字典推導(dǎo)式將cookie字符串轉(zhuǎn)化為字典解析

    這篇文章主要介紹了Python字典推導(dǎo)式將cookie字符串轉(zhuǎn)化為字典解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python 多維高斯分布數(shù)據(jù)生成方式

    python 多維高斯分布數(shù)據(jù)生成方式

    今天小編就為大家分享一篇python 多維高斯分布數(shù)據(jù)生成方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python的random和time模塊詳解

    python的random和time模塊詳解

    這篇文章主要介紹了python的random和time模塊,具有一定借鑒價值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • Python中求對數(shù)方法總結(jié)

    Python中求對數(shù)方法總結(jié)

    這篇文章主要介紹了Python中求對數(shù)方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Flask帶參URL傳值的實現(xiàn)方法

    Flask帶參URL傳值的實現(xiàn)方法

    這篇文章主要介紹了Flask帶參URL傳值的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python數(shù)據(jù)分析之Numpy庫的使用詳解

    Python數(shù)據(jù)分析之Numpy庫的使用詳解

    NumPy(Numerical Python)是Python的一種開源的數(shù)值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來表示矩陣(matrix)),支持大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫
    2021-11-11
  • 用Python簡單實現(xiàn)個貪吃蛇小游戲(保姆級教程)

    用Python簡單實現(xiàn)個貪吃蛇小游戲(保姆級教程)

    本文基于Windows環(huán)境開發(fā),適合Python新手,文中有非常詳細的代碼示例,對正在學習python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • python打包為linux可執(zhí)行文件的詳細圖文教程

    python打包為linux可執(zhí)行文件的詳細圖文教程

    這篇文章主要給大家介紹了關(guān)于python打包為linux可執(zhí)行文件的詳細圖文教程,本文介紹的方法可以輕松地將Python代碼變成獨立的可執(zhí)行文件,需要的朋友可以參考下
    2024-02-02
  • Python作用域用法實例詳解

    Python作用域用法實例詳解

    這篇文章主要介紹了Python作用域用法,結(jié)合實例形式詳細分析了Python作用域概念,用法與相關(guān)函數(shù)的使用技巧,需要的朋友可以參考下
    2016-03-03

最新評論

隆子县| 新化县| 丹阳市| 禹州市| 汪清县| 长子县| 临西县| 富川| 乌审旗| 赤城县| 西城区| 云霄县| 东港市| 庄河市| 明溪县| 吴旗县| 新宾| 句容市| 兖州市| 高唐县| 济宁市| 信丰县| 永年县| 济宁市| 巴塘县| 永川市| 柯坪县| 温泉县| 广河县| 游戏| 廊坊市| 甘泉县| 阿巴嘎旗| 英山县| 荔波县| 五华县| 盈江县| 江达县| 黄梅县| 奈曼旗| 贵溪市|