欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]windows下shellcode提取模板的实现

[原创]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。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功