在内存中读取函数的ShellCode并执行

栈溢出漏洞原理与ret2shellcode攻击实践:从内存布局到shellcode执行 栈溢出是计算机安全领域的基础概念,指程序向固定大小的栈内存区域写入超出其容量的数据,导致相邻内存被覆盖。其原理源于程序对用户输入缺乏边界检查,使得攻击者能够改写函数返回地址等关键数据。这项技术的核心价值在于揭示了软件信任边界的重要性,通过控制执行流程可实现权限提升或系统控制。在应用场景上,栈溢出常被用于渗透测试和漏洞研究中,作为理解更复杂攻击手法的入门案例。本文以ret2shellcode为例,演示如何利用栈溢出漏洞执行自定义的恶意代码,涉及内存布局分析、偏移计算和shellcode注入等关键步骤,并探讨了 阅读详情

在内存中读取函数的ShellCode并执行

下面是一个例子,实现的效果是将fun1函数的十六进制读取出来,在内存中将str1的地址改成str2,分配一块内存,将改好的函数的ShellCode写入并执行。

// FunTest.cpp : 定义控制台应用程序的入口点。
//
//
#include "stdafx.h"
#include <windows.h>

#pragma comment(lib,"user32.lib")

char *str1 = "aaaa";  //字符串指针1
char *str2 = "bbbb";  //字符串指针2

void fun1()
{
	MessageBox(0,str1,0,0);
}

void fun2()
{
	MessageBox(0,"2",0,0);
}


int _tmain(int argc, _TCHAR* argv[])
{

	fun1();  //调用fun1函数测试一下

	//获取fun1函数的大小
	int iFun1Size = ((DWORD)fun2) - ((DWORD)fun1);
	printf("fun1 size: %d\n",iFun1Size);

	//获取fun1函数的十六进制内容
	BYTE *pFun1Body = new BYTE [iFun1Size];
	memcpy(pFun1Body,&fun1,iFun1Size);
	for (int i=0;i<=iFun1Size;i++)
	{
		printf("%x",*(pFun1Body+i));
	}
	printf("\n");
	

	//打印字符指针地址
	DWORD dwstrAddress1 = (DWORD)&str1;
	DWORD dwstrAddress2 = (DWORD)&str2;
	printf("Address1 %x\n",dwstrAddress1);
	printf("Address2 %x\n",dwstrAddress2);

	//判断
	for (int i=0;i<(iFun1Size-4);i++)
	{
		DWORD *dwPtr = (DWORD *)((BYTE *)pFun1Body + i);
		
		//找str1的地址
		if (*dwPtr == dwstrAddress1) 
		{
			*dwPtr = (DWORD)dwstrAddress2;  //替换字符串指针地址
			printf("dwstrAddress1 found\n");
		}
		else if (*dwPtr == dwstrAddress2)
		{
			printf("dwstrAddress2 found\n");
		}

	}
	
	//分配内存
	PVOID pData = VirtualAlloc(NULL,iFun1Size,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
	if(!pData)
	{
		DWORD dwError = GetLastError();
		printf("VirtualAllocEx error %d \n",dwError);
		return 0;
	}


	//写内存
	HANDLE h = OpenProcess(PROCESS_ALL_ACCESS,0,GetCurrentProcessId());
	if(!WriteProcessMemory(h,pData,pFun1Body,iFun1Size,0))
	{
		DWORD dwError = GetLastError();
		printf("WriteProcessMemory error %d\n",dwError);
		return 0;
	}
	
	//执行
	_asm
	{
		mov eax,pData;
		call eax
	}

	//释放内存
	VirtualFree(pData,0,MEM_RELEASE);
	delete []pFun1Body;

	getchar();
	return 0;
}


 

如何使用ThreadStackSpoofer隐藏Shellcode的内存分配行为 关于ThreadStackSpoofer ThreadStackSpoofer是一种先进的内存规避技术,它可以帮助广大研究人员或红/蓝队人员更好地隐藏已注入的Shellcode的内存分配行为,以避免被扫描程序或分析工具所检测到。 ThreadStackSpoofer是线程堆栈欺骗技术的一个示例实现,旨在规避恶意软件分析、反病毒产品和EDR在检查的线程调用堆栈中查找Shellcode帧的引用。其思想是隐藏对线程调用堆栈上针对Shellcode的引用,从而伪装包含了恶意代码的内存分配行为。 在该工具的帮助下,可 阅读详情

相关推荐

现代终端防护绕过技术:Shellcode投递与内存执行攻防解析

在网络安全领域,终端防护与恶意代码检测是保障系统安全的核心防线。其基本原理是通过静态特征扫描、动态行为监控和内存分析等多层次机制,识别和阻断恶意活动。这些技术的核心价值在于实时防御未知威胁,保护关键业务数据与系统完整性。在实际应用场景中,攻防对抗往往围绕代码执行权限展开,攻击者需要在不触发警报的前提下完成载荷投递。本文聚焦于**进程镂空**和**Shellcode加密**等关键技术,深入剖析如何通过精细化的内存操作和API调用伪装,绕过现代终端检测与响应系统。这些方法不仅涉及底层的系统调用机制,还涵盖了合法

diyu8056的博客 458

Shellcode提取、加载与解析

msf的shellcode 如何实现的

莫慌的博客 2552

shellcode 执行盒

//msfvenom -p windows/exec CMD=calc.exe -f exe -e x86/shikata_ga_nai -i 6 -f c 生成shellcod 测试数据: bf6e4a2508d9ebd97424f45d33c9b131317d13037d1383c56aa8d0f49aae1b055acf92e06bcfc161dbff8224d774c6dc6cf8cfd3c5b729ddd6e40a7c54f75e5e6538939fa2255ecd7b21cde2087fce894291566d1290772029cb57c2fe67dedce342a857d7392bbe26c180ff8730d8382fabaf304c56a8862f8c3d1d9747e5f9268b70892460f6d52877db6d54fcdaa1dd46f965861d603f62f39d5fcdac3b2be3b93176693fc70cdf3fd70e4f28e685002ff74f65cf155a9378800f1ee533fa5c10b00f1ce7a86519a36e9553bc1a99c0bd0efa872dd2d322d6712c 将shellcode作为参数传入执行盒,./shllcode_Argv.exe bf6e4a2508d9ebd97424f45d33c9b131317d13037d1383c56aa8d0f49aae1b055acf92e06bcfc161dbff8224d774c6dc6cf8cfd3c5b729ddd6e40a7c54f75e5e6538939fa2255ecd7b21cde2087fce894291566d1290772029cb57c2fe67dedce342a857d7392bbe26c180ff8730d8382fabaf304c56a8862f8c3d1d9747e5f9268b70892460f6d52877db6d54fcdaa1dd46f965861d603f62f39d5fcdac3b2be3b93176693fc70cdf3fd70e4f28e685002ff74f65cf155a9378800f1ee533fa5c10b00f1ce7a86519a36e9553bc1a99c0bd0efa872dd2d322d6712c 即可执行该段shellcode。 该exe可传vt查看报毒情况,无特征码

总结加载Shellcode的各种方式(更新中!)

异步过程调用(APC)队列是一个与线程关联的队列,用于存储要在该线程上下文中异步执行的函数。操作系统内核会跟踪每个线程的 APC 队列,并在适当的时机触发队列中挂起的函数。APC 队列通常用于实现线程间的异步通信、定时器回调以及异步 I/O 操作。内核模式 APC:由内核代码发起,通常用于处理内核级别的异步操作,如异步 I/O 完成。用户模式 APC:由用户代码发起,允许用户态应用程序将特定函数插入到线程的 APC 队列中,以便在线程上下文中异步执行。

xf555er的博客 3567

ShellcodeLoader:加载shellcode或PE进行分析的小工具

ShellcodeLoader 构建ShellcodeLoader的目的是在可执行文件的上下文中快速调试在恶意软件分析中提取的Shellcode。 ShelcodeLoader的工作是从磁盘到内存读取一个常规文件,然后跳转到基址或指定的入口点以执行该文件。 它会自动检测是否正在调试,并在执行shellcode之前询问用户是否要设置断点。 在x86和x64系统中工作。 发行版 转到“发行版”选项卡并下载已编译的可执行文件。 用法 该文件是必需的。 其他参数是可选的。 ShellcodeLoader.exe [-e --entrypoint ENTRYPOINT] [-a --address ADDRESS] [-r --run] [-b --break] FILE 加载文件并以指定的偏移量执行代码 ShellcodeLoader.exe -e 1000 shellcodex86.bi

Android 性能之 Game Mode

本文的目的是介绍 AOSP Game Mode 功能。Game Mode 功能的核心是系统服务 GameManagerService,在本文中用 GMS 指代 GameManagerService。在 API 26 之后,应用开发者可以通过将应用的 category 属性设置为 "game",使系统(即 GMS)能够将该应用识别为 "游戏"。GMS 定义了 4 种 game mode,即 1|2|3|4|standard|performance|battery|custom;

专注于系统快稳省领域 3064

威胁分析与响应能力—Shellcode分析与检测技巧

shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。

qq_44005305的博客 1623

告别屏幕适配焦虑:用AndroidAutoSize 1.2.1搞定多尺寸设备(附AndroidX兼容方案)

本文详细介绍了AndroidAutoSize 1.2.1在屏幕适配中的应用,帮助开发者高效解决多尺寸设备适配问题。通过动态计算机制,AutoSize显著提升了UI一致性和开发效率,特别适合处理横竖屏切换、折叠屏等复杂场景。文章还提供了AndroidX兼容方案和性能优化建议,是Android开发者的实用指南。

weixin_42535461的博客 189

执行shellcode的几种方式

首先写出汇编成功弹出计算器 #pragma comment(linker,"/section:.data,RWE") //data段可读写 #pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //不显示窗口 #pragma comment(linker,"/INCREMENTAL:NO") //指...

qq_41683305的博客 5416

Calibre电子书阅读器个性化样式定制指南

本文详细介绍了如何通过Calibre电子书阅读器的用户样式表功能进行深度个性化样式定制。从修改全局字体、行距、背景配色(包括深色/浅色模式)到美化代码块、引用等特殊元素,本指南提供了完整的CSS代码示例与实战技巧,帮助用户打造专属的舒适阅读环境,显著提升电子书阅读体验。

vv45678的博客 920

Ubuntu操作系统等保测评指南

Ubuntu操作系统等保测评指南

qq_40181198的博客 7026

什么是shellcode

例如病毒、蠕虫、木马等。一旦成功执行,Shellcode可以允许攻击者执行任意操作,例如获取系统权限、窃取敏感数据、修改文件、控制网络连接等。Shellcode是一段二进制代码,通常用于利用计算机系统中的漏洞,以便攻击者能够在系统上执行任意代码。Shellcode通常是以二进制形式编写的,因此可以直接在内存中执行。Shellcode通常被嵌入到攻击者设计的恶意软件中。,而不需要先将其编译成可执行文件。

qq_44833342的博客 1370

NuPlayer 之 Renderer

触发postDrainAudioQueue_l()或postDrainVideoQueue()开始渲染。解码器输出数据 → NuPlayer::Decoder::onMessageReceived。音频数据存入mAudioQueue,视频数据存入mVideoQueue。• 每次写入后通过mNotifyConsumed通知解码器。• 通过AudioSink::write()写入音频设备。• 根据VSync信号和音频时钟调整渲染时机。• 通过Surface直接提交给显示系统。

aningxiaoxixi的博客 305

基于Go加载shellcode

这里通过TideSec的go免杀项目来从0开始学习首先导个包,需要用到如下几个包。io/ioutil 文件操作os 系统操作syscall syscall包含一个指向底层操作系统原语的接口unsafe Go指针的操作非常有限,仅支持赋值和取值,不支持指针运算,可以通过unsafe包来达到效果这里定义一下变量,然后需要通过syscall来加载两个dll,和ntdll.dll。然后这里有一个检查报错的函数,如果有报错就退出并打印报错信息。

Le1a's Blog 2912

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 627

通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

  前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。 1、应用需求   在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。   为了实现基于W5500的Modbus TCP服务器,我们必先须基于W550

木南创智 5499

[BUUCTF]PWN——[极客大挑战 2019]Not Bad (orw_shellcode)

[极客大挑战 2019]Not Bad 附件 步骤

mcmuyanga的博客 2975

彻底解决Win11锁屏界面黑屏或者图片不变化

windows锁屏后黑屏

renkai721的专栏 1万+

shellcode

ciscn_2019_n_5 思路:read读取输入到bss段上的name中去,可以让程序读取shellcode,再利用后面的gets栈溢出getshell main: exp: from pwn import * from LibcSearcher import * context.arch = 'amd64' p = remote('node3.buuoj.cn',26505) shellcode = asm(shellcraft.sh()) p.sendline(shellcode) payload

Trick的博客 246

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

BUUCTF get_started_3dsctf_2016

记录在csdn里面看到的暴力解法 from pwn import * context(os="linux", arch="i386", log_level="debug") q = process("./get_started_3dsctf_2016") elf = ELF("./get_started_3dsctf_2016") mprotect_addr = elf.symbols["mprotect"] read_addr = elf.symbols["read"] # 内存权限改变的起始地址,也

qq_51821131的博客 326

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

lctf2016_pwn200

lctf2016_pwn200 查看保护 这里有一个漏洞,read的时候可以泄露栈上的地址,因为没有\x00来截断。 这里会将buf的东西给复制到dest这里。然后ptr全局变量为dest。 这个函数就是一个add和delete的堆功能。 攻击思路:可以将shellcode写入第一次输入的地方,再借助这里输出ebp地址,然后算出shellcode_addr。到了strcpy这里的话可以使用\x00来截断复制功能然后填满buf,接着劫持free_got为shellcode_addr(free_got)

z1r0的博客 2902

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pwnable_asm

pwnable_asm 查看保护 orw来读flag就可以了,程序在0x41414000这里创建了0x1000大小的空间,我们可以将flag拿到这里然后 输出即可。 orw其实就是open read write open(file=‘flag’, oflag=0, mode=0); read(3, 0x41414000, 0x100) write(fd=1, buf=0x41414000, n=0x100) 意思就是打开flag,读取flag到0x41414000,从0x41414000中读取数据到屏幕

z1r0的博客 428

从实验到实战:BUPT软件安全之格式化字符串漏洞深度利用

本文深入剖析了格式化字符串漏洞的利用原理与实战技巧。通过BUPT软件安全实验,从栈内存侦察、信息泄露到利用%n操作符劫持程序控制流,并结合缓冲区溢出执行Shellcode,完整演示了从信息窃取到代码执行的攻击链。文章强调,开发者应避免将用户输入直接作为格式化字符串参数,并开启编译器和操作系统的安全防护机制。

weixin_29323273的博客 238

ret2shellcode

shellcode的含义: 在栈溢出的攻击技术中通常是要控制函数的返回地址到自己想要的地方执行自己想要执行的代码。ret2shellcode代表返回到shellcode中即控制函数的返回地址到预先设定好的shellcode区域中去执行shellcode代码,这是非常危险的。 这里学习一下shellcode的利用方式,用ret2shellcode作为例题 先用checksec查看一下保护,可以看到,没有开启任何保护机制,且是一个32位的程序 使用IDA分析程序,只发现了主函数,并没有发现后门函数 get

qq_45691294的博客 5553

0基础写shellcode加载器

从0开始了解shellcode 和加载器

qq_60870726的博客 3058
上一篇: MFC主线程使用WaitForSingleObject阻塞的问题
下一篇: VC菜单分割符
sysprogram
博客等级 码龄17年 298粉丝 442原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值