windows下shellcode提取模板的实现

Windows下的Shellcode一般用于在极小的空间内完成一些基本而重要的工作。

除此之外也有别的好处,比如说代码加密以及代码隐藏。

编写shellcode比起正常的编写代码来说算是件较为费事的工作,基本上来说需要协调较多东西。模板的意义在于做到将正常代码复制到模板中就可以生成可以直接Call的shellcode。

因为用汇编撰写shellcode比较麻烦。如果用C语言来撰写,则比较好。特别,对于类似病毒这种,远线程注入这种,如果能够用C语言来写,会方便很多。

后来一段时间我都用C语言来写,避开全局变量的调用,一遍又一遍的写K32寻址去加载需要的函数。后来觉得如果以这样的方式去转化一两个函数的代码能应付得过来,但是如果是转化几千行的整个项目的代码,这样的做的话需要花费时间太多。

所以将提取shellcode的方法写成模板,并尽可能加上C++特征。

以下是需要提取的代码的入口:

//加载起始函数,跳转到入口函数
VOID _declspec(naked) mmLoaderSCStart()
{
   __asm   jmp Strat;
}

//WIN_H里面定义dll函数


//将需要转为shellcode的所有代码放在这个类中
class MyShelocde
{
   //API寻址声明
#include"WIN_H.h"
public:
   WIN_H win;

public:
    
#include"Tool.h"

   //代码项目中其他文件放在类中
#include"AddMld.h"

    
public:
   //模拟全局变量---这里是对项目全局变量的定义
   char s_runexe[260];
   char s_szopen[260];
   char RandCIDStr[MAX_PATH];

public:
   //关于全局变量初始化以及一些开始的操作
   MyShelocde()
   {
        
       memset(RandCIDStr, 0, 260);

       memset(s_runexe, 0, 260);
       memset(s_szopen, 0, 260);

       char runexe[] = { 'c', 'm', 'd', '.', 'e', 'x', 'e', '' };
       char szopen[] = { 'o', 'p', 'e', 'n', '' };
       memcpy(s_runexe, runexe, strlen(runexe));
       memcpy(s_szopen, szopen, strlen(szopen));
        
   };
   ~MyShelocde()
   {
   };

    
public:

   //提取项目的main文件,StartSCode相当于项目的main函数
   void __stdcall StartSCode(char * URL)
   {
               //自己的代码就放在这里,可以看到模板下使用API与正常一样,通过宏实现了去K32寻址
       //打开一下CMD
       ShellExecute(NULL, s_szopen, s_runexe, 0, NULL, SW_SHOW);

       MessageBoxA(NULL, s_runexe, NULL, NULL);
   }

};//sehllcode入口函数
void __stdcall Strat(char * URL)
{
   //由于需要模拟全局变量,所以使用类包裹下
   MyShelocde runclass;
   runclass.StartSCode(URL);
}

void __declspec(naked) mmLoaderSCEnd()
{
   __asm int 3;
}

其他看附件,代码结构还算清晰,暂时用模板提取了一个2000多行代码的小项目,总的来说还是挺爽的,项目本身shellcode保存为任意形式,启用他的exe去掉DEF保护后调用直接call。

windows下shellcode提取模板的实现

模板极大方便了提取shellcode的工作,并且能够支持全局变量。这样实现了转化甚至于一整个项目的代码,作用的话,依旧是代码加密以及隐藏,以及非常灵活的调用。

编写这个模板的缘故在于,需要做一个应用,客户端本身仅仅是与服务器交互的通讯模块,功能模块全部由shellcode构成,由服务器发送至客户端执行,并且如此的话客户端也需要与服务器连线才能发挥作用否则客户端本身无任何特别的代码,如此操作中间没有多余文件产生,仅仅是服务器与客户端的数据交流。

这样的设想需要编写的shellcode的量就比较大,所以没有合适的方法基本不能完成这样的工作。

附件中 doc是引用的学习文档,由此文档启发从而编写出来的。

更多是想抛砖引入玉,获得更多的建议以便更好地学习。

看雪ID:ISSACASSI

文章出处:看雪社区

本文由 华盟网 作者:congtou 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。

0

相关文章

发表评论

电子邮件地址不会被公开。