安全搜索进程内存空间(一)

进程 Vs 线程 本文讲解了 1.什么是进程和线程 2. 进程和线程的区别 阅读详情

 CMDHZ

 

本文发表在黑防2008的2期上,按照他们要求的间隔时间已经过了,所以贴上来。本文设计了用于演示的程序,一下子没有找到怎么发附件,所以需要的读者就向邮箱lisl03@gmail.com发 application mail吧。



ShellCode的编写好像是一个永远说不完的话题。在11期《黑客防线》上我写了《再谈绕过卡巴斯基主动防御的ShellCode编写》的文章。小弟最近在编写一个漏洞的利用程序时,遇到了在进程空间中安全搜索ShellCode的问题。小弟在网上搜索了一番也没有什么有用的东西。在为这个问题困扰了许久之后,小弟请教了一位大虾后才知道原来国外的一些大牛们早就作过这方面的深入研究了。在参阅了一些相关的资料后,小弟终于解决了如何安全搜索内存空间的问题。好东西不敢独享,把他写出来献给如我一样正在艰难学习中的菜鸟,大虾看了就飘过吧!

很多情况下在编写ShellCode的时候我们都会面临着如何安全地搜索进程空间,找到我们的可爱的没有被破坏得ShellCode的问题。例如,有些溢出程序对编码有着特殊得要求,比如会将0x2F(‘/’)转化为0x5C(‘/’)等等的情况,甚至还有不能出现0xFF的情况。这个时候可能不管你怎么变形都无法符合要求;有些文件格式型的溢出由于文件结构自身的特点,在溢出点附近不可能放入大得ShellCode。溢出产生的时候,我们都必须用一个简短的Search Code查找到原始的ShellCode后,再执行这个功能ShellCode来实现我们的溢出利用。这种通过设置一定得标志字节,由小ShellCode找在内存中查找大ShellCode的方法有一个有趣得叫法:Egg-Hunt.。

在栈溢出利用时,EIP开始在堆栈里执行后,由于堆栈在内存中的地址往往比较低:如0x0012XXXX,而原始ShellCode却在0x07BAXXXX远的高地址。直接搜索内存的时候会由于:违规访问未分配内存、用户断点、 浮点异常等等问题而造成系统的崩溃。于是在我们好不容易获得CPU控制权之际,却得到了如下的报错提示框,刚刚得到的CPU控制权就这样丢失了。


图一、内存搜索错误


图二、异常详细信息

因此必须实现对进程空间的安全搜索,最终找到实现功能的ShellCode,并在那里安全着陆。对于这样Egg-Hunt的ShellCode的编写有如下三个基本要求:

搜索程序的鲁棒性:这样的要求主要体现在搜索程序必须要有处理“非法地址”访问的能力,才能够安全地搜索进程地址空间,否则对无效地址的访问将导致被溢出进程的崩溃。

搜索程序的简洁性:汇编代码的体积是编写搜索程序时需要考虑的一个非常重要的方面,因为绕过溢出环境对Search Code大小的限制是我们使用这种功两段式ShellCode的原因。

搜索程序的高效性:溢出的时候我们当然希望能够尽快跳转到ShellCode去执行我们希望的操作。否则将留下一个不能得到及时更新的屏幕将会是溢出特征的一个最好提示。

在以上三个对Egg-hunt的要求中,程序的鲁棒性是最重要的,因为在执行对进程地址空间搜索的时候,非法地访问毕竟是我们最常遇到的问题。我们当然不希望由于搜索内存失败而造成程序的崩溃,使我们丧失了执行ShellCode的机会。

那么下面我们将主要探讨一些在Windows平台下,常用的安全搜索内存空间的方法。

一、利用SHE机制安全搜索内存空间:

Windows系统中的SEH机制是大家在进行溢出攻击时常常利用的一种机制。在这里我们在执行进程空间搜索之前首先注册一个异常处理函数,用它来捕获并完成对“非法地址访问”及各种“运行时异常”的处理,以提高搜索程序的鲁棒性,使我们能够顺利地找到进程空间中的ShellCode。

为了对这样的方法的原理有更好的理解,我们再将Windows 系统中异常处理方面的内容再复习一下。

1、Windows的结构化异常处理(SEH)

Windows在创建线程时,操作系统会为每个线程分配TEB结构,并且将FS段选择器指向当前线程的TEB数据结构(结构的定义可以参见参考资料)。

   Typedef   struct _NT_TIB {  

   Struct _EXCEPTION_REGISTERATION_RECORD * ExceptionList;

   PVOID StackBase;

   PVOID StackLimit;

PVOID SubSystemTib;

   Union {

          PVOID FiberData;

          ULONG Version;

      };

      PVOID ArbitaryUserPointer;

   Struct    _NT_TIB * Self;

} NT_TIB;

偏移为0的_EXCEPTION_REGISTERATION_RECORD主要用于处理SHE,因此我们使用FS:[0]也就能够访问SEH。其结构定义如下:

EXCEPTION_REGISTERATION Struct

Prev      dd    ? 前一个EXCEPTION_REGISTERATIONj结构

Hander dd    ? 异常处理例程入口

_EXCEPTION_REGISTERATION end    };

其中prev指向前一个_EXCEPTION_REGISTERATION的指针,因此线程的异常处理例程形成了一个链状结构。当系统处理异常时就查找异常处理链表,调用相应的异常处理函数执行对程序异常的处理。

深入探索内存搜索工具及其应用 内存搜索工具是IT行业专业人士在分析和调试软件时不可或缺的伴侣。这一章节旨在概括内存搜索工具的基本功能,为读者提供一个全面的概览,从而为进一步的深入学习打下基础。内存搜索工具主要用于搜索和监控应用程序或系统的内存空间,它可以协助开发者或者安全研究人员识别、定位以及分析内存中特定数据的存储位置。这类工具通常包括内存数据的实时搜索、过滤、修改等功能,它们可以被用来查找游戏中的作弊代码、调试应用程序错误、进行逆向工程分析,或者进行恶意软件的内存分析。 阅读详情

相关推荐

在一个进程的内存里查找特定值字符串等

在一个进程的内存里查找特定值字符串等 procedure ShowArrayTValueAddress(); //显示当前任务查出的地址列表 procedure ShowMemEditAddressList(); //显示当前的修改列表 procedure OnWMHOOKPROC(var Msg: TMessage);message WM_HOOKPROC; //Hook Message 处理挂钩消息 procedure AddAMission(ProcessesID : Handle;MissionName:string); //增加任务

C++模仿CE工具快速内存搜索——(Sunday算法)

2、跨进程读取内存:ReadProcessMemory。1、查看内存块信息:VirtualQueryEx。可以看出Cheat Engine内存搜索的核心逻辑是。3、通过“字符串模式匹配算法”进行比较定位。

追逐光芒,追随内心 3077

C++ 进程内存搜索,特征码极速定位,方便找Call找地址!

C++ 进程内存搜索,特征码极速定位,方便找Call 找地址!!

【Windows】Shellcode免杀,过360、火绒、Defender 静态及主防

Shellcode,顾名思义是一段拿来执行的代码片段,我们可以使用Shellcode来完成我们需要的任务 弹窗的代码,可以被认为是一段Shellcode,获取某个模块的基址的代码,也可以被认为是一段Shellcode,同理,拿来干坏事的代码,也是Shellcode 如今的杀毒软件都拥有查杀病毒木马的能力,除了静态的查杀,还有动态的主动防御,若恶意代码片段(拿来干坏事的Shellcode)被杀软发现,则可以认为当前运行的程序是病毒木马或是被感染的文件,理应“杀掉” 有些时候,我们不想让自己写的代码被杀毒软件当

mergerly的专栏 4264

2.13寸电子墨水屏HINK-E0213+esp8266

很久以前买的一块电子墨水屏,运气很好,这个型号HINK-E0213资料很全,而且微雪官网也有相关电路资料等。

梦境虽美,却不长. 3004

注册“Oracle Provider for OLE DB”和创建链接服务器

注册“Oracle Provider for OLE DB”和创建链接服务器 在sql server 数据库上创建链接服务器,连接oracle数据库,访问接口需要设置为:“Oracle Provider for OLE DB”。 如果电脑上没有这个驱动,安装一个完整的Oracle11gR2程序是一个有效的方法,但这个64位版本的安装包有2个多G, 相当庞大,如果仅仅...

weixin_30760895的博客 2384

WIN10中如何关闭Windows Search

  控制面板,系统和安全,管理工具,组件服务,服务(本地): 禁用:

柳鲲鹏 3473

spdk + fio测试nvme 设备的性能

fio的测试对象可以是块设备、文件等,在spdk的使用过程中会unbind默认的nvme driver,所以在系统中是看不到nvme块设备的,在spdk中可以通过fio_plugin的方式,将spdk的用户态driver部分的io功能打包成一个ioengine提供给fio使用,可以综合spdk的高性能和fio提供的复杂场景。更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加。这个jobfile是spdk中提供的例子。领取,关注我持续更新哦!2.7 jobfile的例子。

lingshengxiyou的博客 1089

Service Application之配置Search Service Application

Service Application之配置Search Service Application Search Service Application负责在SharePoint 中提供类似于百度或者谷歌的搜索服务,本章介绍如何创建手动和使用脚本创建搜索服务应用程序。 后续还会继续介绍如何根据如何根据用户数预估搜索服务程序的规模和配置。 以及如何建立单独的搜索场。 使用Web界面创建Search Service Application 用户必须是SharePoint Farm Administrator

weixin_45842433的博客 1049

Silvaco Atlas从头开始(四)——定义材料参数和模型

这部分是关于定义材料参数和模型。

qsz1425AWD2121的博客 4650

RK3568开发板Debian系统屏幕旋转终极指南:从临时调整到永久设置

本文提供了RK3568开发板在Debian系统下实现屏幕旋转的完整解决方案。从使用xrandr命令进行临时调整,到修改X11配置文件实现永久设置,详细讲解了操作步骤与核心原理。指南还涵盖了多屏异显配置、触摸屏坐标校准等进阶技巧,帮助开发者彻底解决显示方向问题。

weixin_29181861的博客 389

安卓逆向|菜鸟的objection学习笔记:内存读写

上篇文章讲解了如何操作FRIDA进行内存的读写,今天试试用objection来进行内存的读写。github地址:https://github.com/sensepost/objectio...

Python3 爬虫实战 1:应对特殊字体,爬取猫眼电影实时排行榜 3834

把 NAST 变成你的遥控器:用 ABAP 程序精确触发与处理 Output Type

摘要 SAP中的Message Control机制通过NAST表记录输出状态,支持自动触发打印、邮件等操作。关键步骤包括: 构造NAST记录:定义输出类型、介质、处理状态等参数 调用处理函数:使用RV_MESSAGE_UPDATE_SINGLE更新表,通过WFMC_MESSAGES_PROCESS执行输出 典型应用场景: 单据补发(如PO邮件重发) 外部系统集成触发输出 故障恢复处理积压消息 注意事项: 需提交事务确保更新生效 区分S/4HANA新旧输出体系 正确处理派发时间(VSZTP)和状态(VSTAT

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 255

安全搜索进程内存空间(三)

 通过对内存访问异常的处理可以使ShellCode能够安全地执行搜索功能,最终找到我们的“Egg”。本文中附带的程序实际上只是一个用于说明的代码,由于没有判断异常产生的原因因此在实际应用中有一定的问题。聪明的读者也许会发现如果在OllyDbg中调试该程序会失败,仔细分析后我们发现,导致该程序调试失败的原因是执行单步跟踪时系统也会产生一个异常EXCEPT_SINGLE_STEP(参看此时

1497

手把手教你学simulink(12.10)--设计和仿真一个用于控制飞机纵向运动(高度和速度)的多变量控制系统

飞机的纵向运动控制是航空工程中的一个重要问题,涉及飞机的高度和速度的精确控制。多变量控制系统可以同时控制多个飞行参数,确保飞机在最佳条件下运行。Simulink提供了一个强大的平台,用于建模、仿真和分析动态系统,非常适合设计和测试多变量控制系统。通过本项目的实施,我们成功设计和仿真了一个用于控制飞机纵向运动(高度和速度)的多变量控制系统。该项目展示了从系统建模、控制器设计、仿真验证到结果分析的完整流程,为多变量控制系统的设计提供了有价值的参考。

MHD0815的博客 598

12、知识图谱数据处理与推理全解析

本文深入解析了知识图谱中的数据处理与推理技术,涵盖SHACL的多种约束类型(如值约束、范围约束、字符串约束、逻辑约束等)及其在数据质量控制中的应用,并介绍了常用的SHACL工具与实际案例。文章对比了SPARQL与SHACL的特点,探讨了RDF(S)的局限性,引出表达能力更强的OWL和OWL2语言及其在语义网和生物医学等领域的应用。此外,还阐述了规则在知识表示中的作用,包括产生式规则和Datalog规则,并总结了知识图谱中推理的重要性与典型流程,为构建高质量、可推理的知识图谱提供了全面的技术指导。

zz67890的博客 135

安全搜索进程内存空间

本文发表在黑防2008的2期上,按照他们要求的间隔时间已经过了,所以贴上来。本文设计了用于演示的程序,一下子没有找到怎么发附件,所以需要的读者就向邮箱lisl03@gmail.com发 application mail吧。 ShellCode的编写好像是一个永远说不完的话题。在11期《黑客防线》上我写了《再谈绕过卡巴斯基主动防御的ShellCode编写》的文章。小弟最近在编写

ssihc0的专栏 1430

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

安全搜索进程内存空间(二)

 2、异常信息当一个异常发生时,操作系统向异常处理的线程堆栈中压入3个结构,这三个结构是:EXCEPTION_RECORD,CONTEXT, EXCEPTION_POINTERS。1、 EXCEPTION_ RECORD结构EXCEPTION_ RECORD结构包含了有关最近发生异常的详细信息,这些信息独立于CPU。其结构如下:EXCEPTION_ RE

1600

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RING0级暴力搜索内存检测系统隐藏进程(或ROOTKIT)(实测可运行) .

最近期末答辩不知道写什么好,就写一个安全软件吧。软件使用驱动和C++编写,大概多数安全软件都是这样吧。 时间关系,就不说那么多了,直接入正题吧。 在此先感谢“伊丽_杀_白”、“堕落天才”、“antirootkit”等提供的优秀文章,我只是在他们基础之上修改了一下。 伊丽_杀_白    暴力搜索内存空间检测隐藏进程:http://bbs.xdnice.com/thread-377796-1

坦然 2045

RING0级暴力搜索内存检测系统隐藏进程(或ROOTKIT)(实测可运行)

最近期末答辩不知道写什么好,就写一个安全软件吧。软件使用驱动和C++编写,大概多数安全软件都是这样吧。 时间关系,就不说那么多了,直接入正题吧。 在此先感谢“伊丽_杀_白”、“堕落天才”、“antirootkit”等提供的优秀文章,我只是在他们基础之上修改了一下。 伊丽_杀_白    暴力搜索内存空间检测隐藏进程:http://bbs.xdnice.com/thread-377796-1

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 2034

rknn_model_zoo 中 YOLOv8-Pose 人体关键点检测的 RKNN 部署实战指南

本指南以 [examples/yolov8_pose](https://link.gitcode.com/i/8ee277bad3be05d8167ad0eafb17a294) 为例,完整讲解将 YOLOv8-Pose 模型(yolov8n-pose)从 PyTorch/ONNX 转换到 RKNN 格式、在 RKNPU 平台上进行推理与后处理、以及通过 Python、Android、Linux 三

gitblog_00343的博客 503

内存搜索技术解析:从原理到实战,定位进程关键数据

内存搜索是计算机安全与逆向工程领域的核心技术之一,它基于进程运行时数据必须加载到内存这一基本原理。通过扫描和分析进程的虚拟内存空间,可以定位程序运行时的关键数据,如加密密钥、用户标识等。这项技术的核心价值在于支持安全审计、数字取证、数据恢复等合法应用场景。在工程实践中,常借助Cheat Engine、Process Hacker等工具进行动态扫描与静态分析,结合对内存布局(如堆、栈、数据段)的理解,制定针对性搜索策略。本文以具体案例为引,深入探讨如何通过系统方法在复杂内存环境中定位目标数据,并涵盖工具链使用

weixin_33692284的博客 385

Blackbone模式搜索技术终极指南:在本地和远程进程中查找任意模式的完整教程

Blackbone是一个强大的Windows内存操作库,提供了完整的**模式搜索技术**,让开发者能够在本地和远程进程中高效地查找任意字节模式。无论是游戏逆向工程、安全分析还是内存监控,Blackbone的模式搜索功能都是不可或缺的工具。 ## 🔍 什么是模式搜索? 模式搜索是内存分析中的核心技术,它允许你在进程内存中查找特定的字节序列。Blackbone的PatternSearch类提供了

gitblog_00591的博客 951

linux进程及进程间同步通信机制

进程 一、进程的存储器安排 这是《UNIX环境高级编程》中介绍的典型存储器安排,但现实也不一定非要如此。对于c/c++来说,数据的存储方式还是认为3种:堆、栈、全局数据区(包括全局数据、静态数据、常量)。 二、僵尸进程和孤儿进程   进程在终止前向父进程发送SIGCLD信号,父进程调用wait等待子进程的退出!   孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子...

大隐隐于野 1万+

Blackbone安全特性解析:Windows内存保护绕过与进程防护技术终极指南

Blackbone作为一款强大的Windows内存操作库,提供了全面的进程内存管理、注入和保护绕过功能。本文将深入解析其核心安全特性,帮助开发者理解Windows内存黑客技术的实现原理与应用场景。 ## 🚀 核心功能概览 Blackbone的核心能力集中在以下几个方面: - **进程内存操作**:通过[src/BlackBone/Process/ProcessMemory.h](https

gitblog_01109的博客 771

PyWxDump内存搜索:精准定位微信密钥

> **使用提示**:本工具仅供合法授权的技术研究使用,请勿用于非法用途 ## 附录:核心API速查 | 函数名 | 功能描述 | 参数说明 | |--------|----------|----------| | `search_memory` | 进程内存正则搜索 | `hProcess`: 进程句柄`pattern`: 搜索模式`max_num`: 最大结果数 | | `...

gitblog_00130的博客 1263
上一篇: 学习1下mj的驱动 整理1下部分代码
下一篇: 安全搜索进程内存空间(二)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值