欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解LyScript 內(nèi)存掃描與查殼實(shí)現(xiàn)

 更新時(shí)間:2022年09月09日 11:58:47   作者:lyshark  
這篇文章主要為大家介紹了詳解LyScript 內(nèi)存掃描與查殼實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

LyScript 中提供了多種內(nèi)存特征掃描函數(shù),每一種掃描函數(shù)用法各不相同,在使用掃描函數(shù)時(shí)應(yīng)首先搞清楚他們之間的差異,如下將分別詳細(xì)介紹每一種內(nèi)存掃描函數(shù)是如何靈活運(yùn)用的,最后將實(shí)現(xiàn)一個(gè)簡(jiǎn)易版內(nèi)存查殼腳本,可快速定位目標(biāo)程序加了什么殼。

先來(lái)了解第一個(gè)函數(shù)scan_memory_all()的特點(diǎn),該函數(shù)用來(lái)掃描當(dāng)前進(jìn)程內(nèi)EIP所指向位置處整個(gè)內(nèi)存段中符合條件的特征,如果找到了則返回一個(gè)列表,如果沒(méi)有找到則返回False,該函數(shù)與scan_memory_one()函數(shù)原理是一致的,唯一的不同是all以列表形式返回所有匹配到的行,one則只返回匹配到的第一條記錄,這兩個(gè)函數(shù)都支持??模糊匹配。

如果載入一個(gè)程序,默認(rèn)停留在系統(tǒng)領(lǐng)空,則調(diào)用該函數(shù)你所能得到的特征記錄只能是系統(tǒng)領(lǐng)空特定dll內(nèi)的特征集。

掃描ntdll.dll模塊

例如掃描ntdll.dll模塊內(nèi)的所有特征字段是55 8b ec 83 e4的記錄,代碼是這樣的。

from LyScript32 import MyDebug
if __name__ == "__main__":
    dbg = MyDebug()
    conn = dbg.connect()
    ref_one = dbg.scan_memory_one("55 8b ec 83 e4")
    print("掃描一行: {}".format(hex(ref_one)))
    ref_all = dbg.scan_memory_all("55 8b ec 83 e4")
    for index in range(0, len(ref_all)):
        print("記錄: {} 地址: {}".format(index,hex(ref_all[index])))
    dbg.close()

運(yùn)行效果如下:

有時(shí)我們需要指定掃描某個(gè)模塊,例如掃描進(jìn)程內(nèi)的msvcr120.dll模塊,里面的特征值。

此時(shí)需要想得到該模塊的入口地址,然后將EIP切換過(guò)去,此時(shí)在調(diào)用scan_memory_all()來(lái)完成搜索,當(dāng)然最好先備份原始EIP位置,這樣掃描完以后可以直接切回去。

from LyScript32 import MyDebug
if __name__ == "__main__":
    dbg = MyDebug()
    conn = dbg.connect()
    # 得到所有模塊
    local_module_base = dbg.get_all_module()
    for index in local_module_base:
        # 找到需要的模塊
        if index.get("name") == "msvcr120.dll":
            entry = index.get("entry")
            print("掃描入口: {}".format(hex(entry)))
            # 切過(guò)去
            dbg.set_register("eip",entry)
            # 開(kāi)始搜索特征
            scan_ref = dbg.scan_memory_all("5d c2 0c 00 55 8b ec")
            for x in scan_ref:
                print("掃描到: {}".format(hex(x)))
    dbg.close()

輸出結(jié)果如下:

當(dāng)然為了使掃描效率更高一些,新版插件中新增了scan_memory_any()函數(shù),該函數(shù)無(wú)需切換到模塊入口處即可實(shí)現(xiàn)掃描特定模塊內(nèi)的特征,不過(guò)該函數(shù)只能返回找到的第一條記錄,且需要傳入掃描起始位置以及掃描長(zhǎng)度,不過(guò)得到這些參數(shù)并不難。

from LyScript32 import MyDebug
if __name__ == "__main__":
    dbg = MyDebug()
    conn = dbg.connect()
    # 得到進(jìn)程模塊
    local_module = dbg.get_all_module()[0]
    # 得到模塊參數(shù)
    module_base = local_module.get("base")
    module_size = local_module.get("size")
    print("基地址: {} 長(zhǎng)度: {} 結(jié)束地址: {}".format(hex(module_base),hex(module_size),hex(module_base+module_size)))
    # 掃描內(nèi)存
    ref = dbg.scan_memory_any(module_base,module_size,"51 5c a8 f8 4c 34 33")
    if ref != False:
        print("找到內(nèi)存: {}".format(hex(ref)))
    dbg.close()

掃描結(jié)果如下:

查殼功能

如上內(nèi)存掃描方法如果可以搞明白,那么查殼這個(gè)功能就變得很簡(jiǎn)單了,市面上的查殼軟件PEID等基本都是采用特征碼定位的方式,所以我們想要實(shí)現(xiàn)查殼以及檢測(cè)編譯器特征可以采用特征碼掃描法,如下代碼即可實(shí)現(xiàn)查殼功能。

from LyScript32 import MyDebug
# 查殼功能
def scan(dbg, string):
    # 得到進(jìn)程模塊
    local_module = dbg.get_all_module()[0]
    # 得到模塊參數(shù)
    module_base = local_module.get("base")
    module_size = local_module.get("size")
    # print("基地址: {} 長(zhǎng)度: {} 結(jié)束地址: {}".format(hex(module_base),hex(module_size),hex(module_base+module_size)))
    # 掃描內(nèi)存
    ref = dbg.scan_memory_any(module_base,module_size,string)
    if ref != False:
        return True
    return False
if __name__ == "__main__":
    dbg = MyDebug()
    conn = dbg.connect()
    # 存儲(chǔ)特征碼
    signs = [
        {"key": "Microsoft Visual C++ 2013", "value": "e8 ?? ?? ?? ?? e9 ?? ?? ?? ?? 55 8b ec"},
        {"key": "UPX 3.96w", "value": "60 be ?? ?? ?? ?? 8d be 00 90 ff ff 57"}
    ]
    for index in signs:
        check = scan(dbg, index.get("value"))
        if check == True:
            print("編譯特征: {}".format(index.get("key")))
    dbg.close()

分別檢測(cè)后輸出結(jié)果如下:

upx加殼軟件輸出為

vs2013編譯器特征輸出

以上就是詳解LyScript 內(nèi)存掃描與查殼實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于LyScript 內(nèi)存掃描查殼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Scrapy-Redis結(jié)合POST請(qǐng)求獲取數(shù)據(jù)的方法示例

    Scrapy-Redis結(jié)合POST請(qǐng)求獲取數(shù)據(jù)的方法示例

    這篇文章主要給大家介紹了關(guān)于Scrapy-Redis結(jié)合POST請(qǐng)求獲取數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Scrapy-Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法詳解

    Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法,結(jié)合實(shí)例形式分析了Python TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • 使用Python的Flask框架構(gòu)建大型Web應(yīng)用程序的結(jié)構(gòu)示例

    使用Python的Flask框架構(gòu)建大型Web應(yīng)用程序的結(jié)構(gòu)示例

    雖說(shuō)Flask是一個(gè)以輕量級(jí)著稱(chēng)的框架,但也為大型Web應(yīng)用提供了諸如單元測(cè)試與數(shù)據(jù)庫(kù)遷移等許多便利的功能,這里我們來(lái)看一下使用Python的Flask框架構(gòu)建大型Web應(yīng)用程序的結(jié)構(gòu)示例:
    2016-06-06
  • 使用python繪制3維正態(tài)分布圖的方法

    使用python繪制3維正態(tài)分布圖的方法

    今天小編就為大家分享一篇使用python繪制3維正態(tài)分布圖的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • OpenCV圖像輪廓的繪制方法

    OpenCV圖像輪廓的繪制方法

    這篇文章主要為大家詳細(xì)介紹了OpenCV圖像輪廓的繪制方法,以及測(cè)試幾何圖形、花朵圖形輪廓,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • pycharm配置QtDesigner的超詳細(xì)方法

    pycharm配置QtDesigner的超詳細(xì)方法

    這篇文章主要介紹了pycharm配置QtDesigner的超詳細(xì)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Python實(shí)戰(zhàn)之基于OpenCV的美顏掛件制作

    Python實(shí)戰(zhàn)之基于OpenCV的美顏掛件制作

    在本文中,我們將學(xué)習(xí)如何創(chuàng)建有趣的基于Snapchat的增強(qiáng)現(xiàn)實(shí),主要包括兩個(gè)實(shí)戰(zhàn)項(xiàng)目:在檢測(cè)到的人臉上的鼻子和嘴巴之間添加胡子掛件,在檢測(cè)到的人臉上添加眼鏡掛件。感興趣的童鞋可以看看哦
    2021-11-11
  • python飛機(jī)大戰(zhàn)pygame游戲之?dāng)硻C(jī)出場(chǎng)實(shí)現(xiàn)方法詳解

    python飛機(jī)大戰(zhàn)pygame游戲之?dāng)硻C(jī)出場(chǎng)實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了python飛機(jī)大戰(zhàn)pygame游戲之?dāng)硻C(jī)出場(chǎng)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Python使用pygame模塊實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲中敵機(jī)出場(chǎng)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析

    Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析

    這篇文章主要介紹了Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 如何在Windows中安裝多個(gè)python解釋器

    如何在Windows中安裝多個(gè)python解釋器

    這篇文章主要介紹了如何在Windows中安裝多個(gè)python解釋器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論