执行shellcode的几种方式

首先写出汇编成功弹出计算器

#pragma comment(linker,"/section:.data,RWE")	//data段可读写

#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")	//不显示窗口

#pragma comment(linker,"/INCREMENTAL:NO")	//指定非增量编译
#include "windows.h"
void main()
{
	__asm{
	  sub esp,0x454
	  xor ebx,ebx
	  push ebx
	  mov eax,0x6578652e
	  push eax
	  mov eax,0x636c6163
	  push eax
	  mov eax,esp
	  push 5
	  push eax
	  mov eax,0x74f0dab0
	  call eax
	  mov esp,0x450
	  
   }
 }

下面这两条语句时和call dword ptr [WinExec]功能相同,可以利用这条语句找出自己机子上WinExec地址,然后将0x74f0dab0替换成自己机子上的地址

 mov eax,0x74f0dab0
 call eax

提取汇编的机器码

unsigned char shellcode[]="\x81\xEC\x54\x04\x00\x00\x33\xDB\x53\xB8\x2E\x65\x78\x65\x50"
"\xB8\x63\x61\x6C\x63\x50\x8B\xC4\x6A\x05\x50"
"\xB8\xB0\xDA\xF0\x74\xFF\xD0"
"\xBC\x50\x04\x00\x00";

接下来就是如何执行shellcode了

0x01

将shellcode硬改成函数名,然后shellcode的内容相当于函数体

void Run1()
{
	((void(*)(void))&shellcode)();
}
0x02

取shellcode的偏移地址,然后到shellcode处执行

//第2种方法
void Run2()
{
	__asm{
		lea eax,shellcode
		jmp eax
	}
}
0x03

和0x02方法相同,写法不一样

//第3种方法

void Run3()
{

	__asm{
		mov eax,offset shellcode
		jmp eax
	}
}
0x04

用emit在当前位置直接插入数据(实际上是指令),硬编码执行

//第四种方法
void Run4()
{

	__asm{
		mov eax,offset shellcode
		_emit 0xff;	
		_emit 0xe0;
	}

}
调试
#pragma comment(linker,"/section:.data,RWE")	//data段可读写

#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")	//不显示窗口

#pragma comment(linker,"/INCREMENTAL:NO")	//指定非增量编译
#include "windows.h"
unsigned char shellcode[]="\x81\xEC\x54\x04\x00\x00\x33\xDB\x53\xB8\x2E\x65\x78\x65\x50"
"\xB8\x63\x61\x6C\x63\x50\x8B\xC4\x6A\x05\x50"
"\xB8\xB0\xDA\xF0\x74\xFF\xD0"
"\xBC\x50\x04\x00\x00";


//第一种方法
void Run1()
{
	((void(*)(void))&shellcode)();
}

//第2种方法
void Run2()
{
	__asm{
		lea eax,shellcode
		jmp eax
	}
}

//第3种方法

void Run3()
{

	__asm{
		mov eax,offset shellcode
		jmp eax
	}
}

//第四种方法
void Run4()
{

	__asm{
		mov eax,offset shellcode
		_emit 0xff;	//用emigt就是在当前位置直接插入数据(实际上是指令),硬编码执行
		_emit 0xe0;
	}

}

void main()
{

/*	
	__asm{
	  sub esp,0x454
	  xor ebx,ebx
	  push ebx
	  mov eax,0x6578652e
	  push eax
	  mov eax,0x636c6163
	  push eax
	  mov eax,esp
	  push 5
	  push eax
	  mov eax,0x74f0dab0
	  call eax
	  mov esp,0x450
	  
   }
   */
	
	Run1();
}

在这里插入图片描述
其他三种方法我都调试了都可以弹出计算器

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python shellcode 加载器是一个程序,它能够从字节串中动态地加载和执行二进制代码。这种技术通常用于绕过安全措施,因为它可以避免将可疑代码写入硬盘驱动器或在文件中进行存储,而是将其保存在内存中直接执行。 ### 回答2: Python shellcode加载器是一种用Python编写的程序,用于加载和执行Shellcode(一段机器码,通常用于执行系统级操作)的工具。Shellcode加载器通常用于渗透测试、恶意软件开发或安全研究等领域。 Python shellcode加载器的实现主要包括以下几个步骤: 1. 解析Shellcode:加载器首先需要解析Shellcode,将其转换为可执行的格式。这包括解析Shellcode的字节序列、指令等。 2. 构建可执行载体:加载器需要构建一个可执行的载体程序,用于将Shellcode加载到内存中执行。这个载体程序可以是Python脚本,也可以是其他编程语言编写的程序。 3. 加载和执行Shellcode:加载器将Shellcode加载到内存中,并在适当的内存位置执行Shellcode。为了提高Shellcode执行效率和稳定性,加载器通常会在内存中申请合适大小的空间,并将Shellcode复制到这个地址。 4. 执行后续操作:一旦Shellcode执行完成,加载器可以根据需要进行后续操作,如输出结果、清理内存等。 Python shellcode加载器的优点在于使用简便、跨平台性好以及Python本身的强大功能。通过使用Python的相关库和模块,可以方便地实现Shellcode加载器,并完成Shellcode的加载和执行。此外,Python shellcode加载器还可以与其他工具或环境配合使用,如反射DLL注入、远程执行等,提供更多的功能和灵活性。 总而言之,Python shellcode加载器是一种用Python编写的工具,用于加载和执行Shellcode的程序。它能够方便地解析、加载和执行Shellcode,并提供了更多的灵活性和功能扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值