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

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

2、异常信息

当一个异常发生时,操作系统向异常处理的线程堆栈中压入3个结构,这三个结构是:EXCEPTION_RECORD,CONTEXT, EXCEPTION_POINTERS。

1、 EXCEPTION_ RECORD结构

EXCEPTION_ RECORD结构包含了有关最近发生异常的详细信息,这些信息独立于CPU。其结构如下:

EXCEPTION_ RECORD STRUCT {

   +0 DWORD        ExceptionCode       ;异常代码

   +4 DWORD        ExceptionFlags         ;异常标志

   +8 struct       EXCEPTION_RECORD ;指向另一个EXCEPTION_ RECORD的指针

   +C PVOID        ExceptionAddress       ;异常发生的地址

   +10 DWORD        NumberParatemeters    ;与异常联系的参数数量(0-15)

   +14 ULONG_PTR   ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

} EXCEPTION_ RECORD

其中,ExceptionCode字段定义了产生异常的原因。图二中表示程序引发了一个EXCEPTION_ACCESS_VIOLATION异常,异常代码为0xC0000005,查阅该异常代码后我们知道程序读写了一个没有可读写属性的地址。

3、CONTEXT结构

CONTEXT结构包含了特定处理器的寄存器数据,系统使用CONTEXT结构来执行各种内部操作。该结构可参考WinNt.h的定义,在X86平台下该结构定义为CONTEXT86,后面将直接用CONTEXT代指CONTEXT86。因为由于该结构比较长,出于篇幅考虑只列出来结构的部分成员:

Typedef struct _ CONTEXT86{

……

//通用寄存器

   +9C DWORD   Edi;

   +A0 DWORD   Esi;

   +A4   DWORD   Ebx;

   +A8   DWORD   Edx;

+AC   DWORD   Ecx;

   +B0   DWORD   Eax;

//控制寄存器

   +B4   DWORD   Ebp;

   +B8   DWORD   Eip;

   +BC DWORD   SegCs;             

   +C0   DWORD   EFlags;           

   +C4   DWORD   Esp;

   +C8   DWORD   SegSs;

   ……

} CONTEXT86;

CONTEXT结构非常重要,通过修改CONTEXT结构中的成员,可以使程序能够在异常时执行相应的处理工作,使程序能够继续执行。在Windows Xp系统中,系统调用NTDLL.DLL模块中的KiUserExceptionDIspatcher函数来执行异常处理。该函数最终将程序中注册的异常处理函数的地址装入ECX,然后调用执行。此时堆栈的分布情况如下:

Esp+0x0 -> *EXCEPTION_RECORD
Esp+0x4 -> *_EXCEPTION_REGISTRATION( 简称ERR)
Esp+0x8 -> *CONTEXT record
Esp+0xC -> *Param

如果注册的异常处理函数将CONTEXT结构中保存的EIP值修改到一个“安全的地方”,那么执行完异常处理函数后,程序将返回到“安全代码”中去执行。

下面的例子程序将在执行搜索内存的操作之前向异常处理链表中注册一个异常处理函数,用于在发生地址访问错误的时候修正程序的执行路径,修改EIP的值为发生访问违例(执行内存比较)的下一条指令地址。这样程序将能够安全、顺利地执行完搜索内存的操作。

为了弄清楚异常发生时系统的状态我们进行如下跟踪分析:

① 在Ollydbg中打开程序Seh.exe,由于搜索的起始地址为0x200000将会导致一个访问异常。我们OllyDbg的命令窗口中输入bp 0x7C9237BD,在Windows Xp系统将要调用异常处理函数时断下来观察堆栈的状态(Windows 2000 中是 0x77F8E43E)。此时程序的状态如图三所示:


图三、KiUserExceptionDIspatcher函数调用异常处理时的堆栈状态

此时Esp的值为0x12FBF0,该地址指向EXCEPTION_RECORD结构,结构偏移为0x0处保存了异常代码0xC0000005,偏移为0xC处保存了异常发生的地址0x401017,该指令是我们执行模式匹配的指令scasd。Esp+4(0x12FFBC)保存了指向下一个异常处理结构的指针。Esp+8(0x12FCF0)保存了指向CONTEXT结构的指针,该结构偏移为0xB8处保存了异常发生时EIP寄存器的值0x401017,偏移为0x9C处保存了Edi寄存器的值0x200000。CONTEXT保存的各寄存器的状态可参见图四。


图四、异常发生时CONTEXT结构的状态

②按下F7后执行预定义的异常处理函数。该函数将修正CONTEXT中保存的EIP的值为指令add    ebx, 01000h在内存中的地址(0x0040101C)。当程序恢复执行时,将从该指令继续执行内存空间的搜索操作。修改后的CONTEXT状态可参见图五。


图五、修正后CONTEXT结构的状态

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

相关推荐

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

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

安全搜索进程内存空间

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

ssihc0的专栏 1430

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

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

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

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

1497

电镀技术:微型制造的原子级加法工艺与核心优势

电镀是一种利用电解原理在基材表面沉积金属层的表面处理技术,其本质是通过电场控制溶液中金属离子的迁移与还原,实现原子级的可控沉积。这一过程的核心在于对电流密度、温度、添加剂等参数的精密调控,从而实现对镀层结晶结构、性能的“编程”。从技术价值看,电镀作为一种“加法制造”工艺,在微观尺度上具有无与伦比的保形性和材料灵活性,能够实现复杂三维结构的均匀覆盖与功能复合。在应用场景上,它尤其契合现代微型化制造的需求,例如在集成电路的铜互连填充、高密度PCB板微孔金属化、MEMS传感器电极制备以及柔性电子器件制造中发挥着不

weixin_42524842的博客 528

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

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

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

追逐光芒,追随内心 3077

Windows系统监控实战:Grafana+Prometheus+node_exporter保姆级配置指南(含常见问题解决)

本文提供了一份详尽的Windows系统监控实战指南,详细讲解了如何从零部署Grafana、Prometheus和node_exporter(实际为windows_exporter)监控栈。内容涵盖核心组件认知、分步配置解析、高级生产环境考量,并重点针对配置过程中常见的“No Data”问题提供了系统性的排查手册,旨在帮助用户快速搭建稳定可靠的系统资源监控平台。

weixin_29197835的博客 1008

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

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

2160

Open3d Qt的环境配置

目前统一使用qt6配置,open3d中可视化功能目前使用vtk代替,语言为c++。

阁楼 919

让 ABAP 再次优雅:全面认知 ABAP Development Tools for SAP HANA(ADT)与可运行示例

本文介绍了ABAP开发工具ADT(ABAP Development Tools for SAP HANA)的核心概念与价值。ADT是基于Eclipse的现代化ABAP集成开发环境,支持ABAP Platform、S/4HANA等后端开发,提供代码编辑、CDS数据建模、质量检查等全流程功能,相比传统SAP GUI具有显著优势。文章详细阐述了ADT与SAP HANA的关系、关键能力模块(如代码重构、CDS建模、质量管控等),并通过一个制造企业案例说明其实际应用场景。最后提供了ADT安装指南和一个完整的ABAP

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

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

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

坦然 2045

Android 车联网——CarAudioService介绍(六)

CarAudioService 是 Android Automotive OS 中的一个重要组件,用于管理车辆中的音频功能。它是 Android Auto 的一部分,负责处理车辆音频的播放、控制和路由。CarAudioService 使用标准的 Android 组件架构,基于 Binder 通信机制,提供了一组 API,用于管理车辆音频。它包括以下主要功能:音频路由管理:CarAudioService 可以让开发者控制音频的路由,即将音频发送到不同的输出设备,例如车辆的扬声器、耳机等。

小旭的专栏 3202

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

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

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

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2353

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

weixin_33692284的博客 385

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

gitblog_00591的博客 951

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

Windows核心编程 进程

Windows核心编程 进程的创建与退出

qq_61553520的博客 1407

启动技术:进程介绍,创建进程API

本人学习《Windows黑客编程技术详解》所做的学习笔记 简介:在一个进程中创建一个新的进程,是一个十分简单的技术,我们可以利用WIN32 API WinExec,ShellExecute,CreateProcess三个函数来创建进程。 1,何为进程? ① 程序,进程,线程分别是什么? 程序:程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。 进程:进程是动态的,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。...

GeniusLS的博客 1128

鸿蒙 开发中 进程 和 线程

摘要:本文全面解析鸿蒙(HarmonyOS)开发中的进程与线程实现,对比进程(资源隔离单位)和线程(执行调度单位)的核心差异。重点介绍鸿蒙提供的TaskPool(轻量级线程池)和Worker(长时线程)两种多线程方案,包括代码示例和使用场景。同时涵盖线程同步、通信、性能优化等高级技巧,并通过多线程下载管理器案例展示实际应用。文章还总结了常见问题解决方案,帮助开发者构建高性能鸿蒙应用。

梦想不只是梦与想的博客 683

【Java多线程】对进程与线程的理解

进程是包含线程的,每个进程至少有一个线程存在,即主线程。进程和进程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间(所以资源开销少,但会影响其他线程)。没有线程这个概念之前,进程是系统分配资源的最小单位,也是系统调度执行的最小单位。有线程这个概念之后,进程是系统分配资源的最小单位,线程是系统调度执行的最小单位。一个进程挂了一般不会影响到其他进程,但是一个线程挂了, 可能把同进程内的其他线程一起带走(整个进程崩溃)。

Hacynn的博客 2142
上一篇: 安全搜索进程内存空间(一)
下一篇: 安全搜索进程内存空间(三)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值