[原创]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', '\0' };
char szopen[] = { 'o', 'p', 'e', 'n', '\0' };
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;
}
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
