0%

go包装免杀过火绒

 关于如何用golang绕过火绒

火绒查杀逻辑

 昨天用go包装之前的源码发现能完美过defender, 结果回去拿火绒试了下直接被gank. 今天测了一上午大概摸清楚了火绒查杀的逻辑.
 我之前一直以为火绒也是像defender和360那样, 对文件的行为做一些追踪, 但是后续测试发现即使修改了解密密钥火绒也能把🐎揪出来. 我当时直接裂开: 火绒这么屌的吗, 原力杀毒?
 接下来我试了一下删了所有的payload, 只输出hello world:

1
2
 这钵啊, 这钵是宁可错杀也不放过. 咱们火绒真的太厉害辣.
 只要go代码中调用了内部的C代码, 一律当作msf处理. 这尼玛是人干的事情?

绕过思路

 没办法, 只好用之前的免杀思路来做. 之前的思路是可执行文件A内部包含了文件B, 当执行A的时候会在当前目录下释放出B文件, 然后通过命令行传参把解密密钥传递给B, 紧接着自动执行B就能反弹上线. 现在已知不能直接使用Go来内联编译C, 那么就只能用原生的Go语言来实现释放文件和执行文件. 所幸实现难度不大, 只要把原文件当作byte数组读入读出就可以.
 不过也得注意一下, 火绒似乎还过滤了go语言释放可执行文件, 还需要对硬编码在A文件里的B文件进行一次加密.不过最后还是绕过去了.
 现在🐎的结构大概是: Go作为外壳, 利用原生go躲避火绒检测,同时规避defender检测. 内部使用C来实现, 利用分离免杀来做到落地无伤过几乎所有的杀软引擎. 当go外壳被执行的时候会自动释放C编译出的内核到硬盘. 由于落地免杀, 所以不会被告警. 然后go再用原生的命令来从系统命令行传递解密密钥, 调用落地的核程序, 从而反弹shell上线.