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

LyScript實現(xiàn)繞過反調(diào)試保護的示例詳解

 更新時間:2022年08月12日 14:09:56   作者:lyshark  
LyScript插件中內(nèi)置的方法可實現(xiàn)各類反調(diào)試以及屏蔽特定API函數(shù)的功能,這類功能在應(yīng)對病毒等惡意程序時非常有效。本文為大家提供了LyScript實現(xiàn)繞過反調(diào)試保護的示例代碼,感興趣的可以了解一下

LyScript插件中內(nèi)置的方法可實現(xiàn)各類反調(diào)試以及屏蔽特定API函數(shù)的功能,這類功能在應(yīng)對病毒等惡意程序時非常有效,例如當(dāng)程序調(diào)用特定API函數(shù)時我們可以將其攔截,從而實現(xiàn)保護系統(tǒng)在調(diào)試時不被破壞的目的。

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

繞過反調(diào)試機制: 最常用的反調(diào)試機制就是用IsDebuggerPresent該標(biāo)志檢查PEB+2位置處的內(nèi)容,如果為1則表示正在被調(diào)試,我們運行腳本直接將其設(shè)置為0即可繞過反調(diào)試機制。

也就是進程環(huán)境塊中+2的位置,此處是一個字節(jié)標(biāo)志,反調(diào)試的機制是,程序調(diào)用IsDebuggerPresent檢查此處的標(biāo)志,如果為1則說明程序正在被調(diào)試,為0則說明沒有被調(diào)試,只需要在運行之前將其設(shè)置為0即可繞過反調(diào)試。

from LyScript32 import MyDebug

if __name__ == "__main__":
    # 初始化
    dbg = MyDebug()
    dbg.connect()

    # 通過PEB找到調(diào)試標(biāo)志位
    peb = dbg.get_peb_address(dbg.get_process_id())
    print("調(diào)試標(biāo)志地址: 0x{:x}".format(peb+2))

    flag = dbg.read_memory_byte(peb+2)
    print("調(diào)試標(biāo)志位: {}".format(flag))

    # 將調(diào)試標(biāo)志設(shè)置為0即可過掉反調(diào)試
    nop_debug = dbg.write_memory_byte(peb+2,0)
    print("反調(diào)試?yán)@過狀態(tài): {}".format(nop_debug))
    
    dbg.close()

將程序載入調(diào)試器,并運行如上腳本,然后運行程序,你會發(fā)現(xiàn)反調(diào)試被繞過了。

其次我們還可以動態(tài)的在函數(shù)開頭位置寫入sub eax,eax,ret指令,這樣當(dāng)程序要調(diào)用特定函數(shù)時,會直接返回退出,從而達到屏蔽函數(shù)執(zhí)行等目的。

from LyScript32 import MyDebug

# 得到所需要的機器碼
def set_assemble_opcde(dbg,address):
    # 得到第一條長度
    opcode_size = dbg.assemble_code_size("sub eax,eax")

    # 寫出匯編指令
    dbg.assemble_at(address, "sub eax,eax")
    dbg.assemble_at(address + opcode_size , "ret")

if __name__ == "__main__":
    # 初始化
    dbg = MyDebug()
    dbg.connect()

    # 得到函數(shù)所在內(nèi)存地址
    process32first = dbg.get_module_from_function("kernel32","Process32FirstW")
    process32next = dbg.get_module_from_function("kernel32","Process32NextW")
    messagebox = dbg.get_module_from_function("user32.dll","MessageBoxA")
    messageboxw = dbg.get_module_from_function("user32.dll", "MessageBoxW")

    print(hex(messagebox)," ",hex(messageboxw))

    # 替換函數(shù)位置為sub eax,eax ret
    set_assemble_opcde(dbg, messagebox)
    set_assemble_opcde(dbg,messageboxw)

    dbg.close()

如上,我們在彈窗位置寫出返回指令,然后運行程序,你會發(fā)現(xiàn),彈窗不會出現(xiàn)了,這也就把這個函數(shù)給屏蔽了。

同理,繞過進程枚舉,依然可以使用此方式實現(xiàn)。

繞過進程枚舉: 病毒會枚舉所有運行的進程以確認(rèn)是否有調(diào)試器在運行,我們可以在特定的函數(shù)開頭處寫入SUB EAX,EAX RET指令讓其無法調(diào)用枚舉函數(shù)從而失效。

from LyScript32 import MyDebug

# 得到所需要的機器碼
def set_assemble_opcde(dbg,address):
    # 得到第一條長度
    opcode_size = dbg.assemble_code_size("sub eax,eax")

    # 寫出匯編指令
    dbg.assemble_at(address, "sub eax,eax")
    dbg.assemble_at(address + opcode_size , "ret")

if __name__ == "__main__":
    # 初始化
    dbg = MyDebug()
    dbg.connect()

    # 得到函數(shù)所在內(nèi)存地址
    process32first = dbg.get_module_from_function("kernel32","Process32FirstW")
    process32next = dbg.get_module_from_function("kernel32","Process32NextW")
    print("process32first = 0x{:x} | process32next = 0x{:x}".format(process32first,process32next))

    # 替換函數(shù)位置為sub eax,eax ret
    set_assemble_opcde(dbg, process32first)
    set_assemble_opcde(dbg, process32next)

    dbg.close()

到此這篇關(guān)于LyScript實現(xiàn)繞過反調(diào)試保護的示例詳解的文章就介紹到這了,更多相關(guān)LyScript繞過反調(diào)試保護內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之

相關(guān)文章

  • python pytest進階之fixture詳解

    python pytest進階之fixture詳解

    這篇文章主要介紹了python pytest進階之fixture詳解,學(xué)pytest就不得不說fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一樣,如果不學(xué)fixture那么使用pytest和使用unittest是沒什么區(qū)別的,需要的朋友可以參考下
    2019-06-06
  • pycharm配置anaconda環(huán)境時找不到python.exe解決辦法

    pycharm配置anaconda環(huán)境時找不到python.exe解決辦法

    今天來說一下python中一個管理包很好用的工具anaconda,可以輕松實現(xiàn)python中各種包的管理,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時找不到python.exe的解決辦法,需要的朋友可以參考下
    2023-10-10
  • Python多線程原理與用法實例剖析

    Python多線程原理與用法實例剖析

    這篇文章主要介紹了Python多線程原理與用法,結(jié)合具體的爬蟲實例剖析了多線程的相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2019-01-01
  • Python+Selenium鍵盤鼠標(biāo)模擬事件操作詳解

    Python+Selenium鍵盤鼠標(biāo)模擬事件操作詳解

    這篇文章主要帶大家一起學(xué)習(xí)一下Selenium的元素的基本操作與鼠標(biāo)鍵盤模擬事件的操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • python異步的ASGI與Fast Api實現(xiàn)

    python異步的ASGI與Fast Api實現(xiàn)

    本文主要介紹了python異步的ASGI與Fast Api實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • python db類用法說明

    python db類用法說明

    這篇文章主要介紹了python db類用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python實現(xiàn)圖形用戶界面和游戲開發(fā)的方法和技巧

    Python實現(xiàn)圖形用戶界面和游戲開發(fā)的方法和技巧

    GUI圖形用戶界面編程,我們可以通過python提供的豐富的組件,快速的實現(xiàn)使用圖形的界面和用戶交互, GUI編程類似于“搭積?”,將?個個組件(Widget)放到窗?中,這篇文章主要給大家介紹了基于Python的GUI圖形用戶界面編程的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Python實現(xiàn)socket庫網(wǎng)絡(luò)通信套接字

    Python實現(xiàn)socket庫網(wǎng)絡(luò)通信套接字

    socket又叫套接字,實現(xiàn)網(wǎng)絡(luò)通信的兩端就是套接字。分為服務(wù)器對應(yīng)的套接字和客戶端對應(yīng)的套接字,本文給大家介紹Python實現(xiàn)socket庫網(wǎng)絡(luò)通信套接字的相關(guān)知識,包括套接字的基本概念,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • Windows下Anaconda和PyCharm的安裝與使用詳解

    Windows下Anaconda和PyCharm的安裝與使用詳解

    這篇文章主要介紹了Windows下Anaconda和PyCharm的安裝與使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python實現(xiàn)鼠標(biāo)自動在屏幕上隨機移動功能

    Python實現(xiàn)鼠標(biāo)自動在屏幕上隨機移動功能

    這篇文章主要介紹了Python實現(xiàn)鼠標(biāo)自動在屏幕上隨機移動功能,具有很好的參考價值,希望對大家有所幫助。還等什么?一起跟隨小編過來看看吧
    2020-03-03

最新評論

孙吴县| 板桥市| 甘洛县| 兴化市| 泗洪县| 禹州市| 阜城县| 安新县| 龙岩市| 大英县| 盈江县| 浠水县| 石渠县| 师宗县| 寿阳县| 阿拉尔市| 太和县| 五寨县| 镇原县| 北安市| 南涧| 康马县| 兴安县| 佛坪县| 涪陵区| 乐都县| 长乐市| 建昌县| 田阳县| 股票| 天津市| 登封市| 大城县| 桐城市| 文水县| 辽宁省| 原平市| 湖北省| 峨眉山市| 濮阳市| 永定县|