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

Windows 开机BOOT绘图 背景介绍        这次说的开机BOOT绘图,是在哪个阶段呢?时间起点:Windows内核正在初始化,内建驱动初始化完毕。时间终点:会话管理器加载win32.sys,启动winlogon进入系统。 给两个图: 前者是Windows自身的开机LOGO图,后者是运行时机是在autochk.exe运行的时候,江民在这里类似的做了自己的应用BootScan。把应用写在这里 阅读详情
 

通过对内存访问异常的处理可以使ShellCode能够安全地执行搜索功能,最终找到我们的“Egg”。

本文中附带的程序实际上只是一个用于说明的代码,由于没有判断异常产生的原因因此在实际应用中有一定的问题。聪明的读者也许会发现如果在OllyDbg中调试该程序会失败,仔细分析后我们发现,导致该程序调试失败的原因是执行单步跟踪时系统也会产生一个异常EXCEPT_SINGLE_STEP(参看此时结构EXCEPTION_ RECORD中保存的异常代码为0x80000004)。由于我们的异常处理程序进行区别处理,因此程序执行失败。

另外,由于Windows XP中对异常处理的安全性进行了增强,如果异常处理函数在堆栈中,系统即认为是不安全的,因此我们的异常处理例程不会得到执行。

二、使用IsBadReadPtr函数安全搜索内存空间:

IsBadReadPtr是模块Kernel32.dll中导出的一个函数,其功能是用于判读进程是否拥有对指定内存地址段的读权限。如果具有对某段地址空间的读权限则返回0,否则返回非0。该函数原型如下:

BOOL IsBadReadPtr(

CONST VOID *lp, // address of memory block

UINT ucb         // size of block

);

使用这种方法进行搜索时,首先调用API函数IsBadReadPtr判断进程是否具有对指定地址范围的读权限,如果可读则执行标志位判断操作,否则继续寻找下一个地址空间。

细心的读者也许已经注意到程序中有两次重复的scasd,jnz   search_loop指令,这样做的目的主要是由于指令中出现过0x50905090。因此我们将搜索标志设置为8字节,即两次重复的0x50905090,以保证程序能真正找到ShellCode而不是匹配代码段中的标志字节后停下来。实际上,在使用SHE进行查找时也处理了类似的问题,在上一种方法中是使用以下指令来完成两次匹配的过程。

mov    ecx, 2h

repe scasd

另外,使用IsBadReadPtr进行搜索时会感觉到搜索速度比较慢。笔者对此进行了跟踪,发现当访问没有读权限的空间时,调试器会提示“访问违例在Kernerl32中,根据请求已忽略”。调试器会因此出现短暂的停顿,造成了搜索速度要慢一些。查阅了一定的资料后,造成这个问题的原因是由于对内存地址访问的竞争引起的。

三、使用NtDisplayString安全搜索内存空间:

NtDisplayString是Windows NT、Windows 2000/Xp系统下提供的一个Native API函数,因此这种方法也不适用于Windows 9x系统。系统内核用该函数将字符串输出到屏幕(Text-mode),系统蓝屏时输出到屏幕的字符就是通过该函数完成的。该函数原型如下:

NTSYSAPI NTSTATUS NTAPI NtDisplayString(

IN PUNICODE_STRING String

)

我们之所以能使用该函数用于执行安全内存空间搜索的主要原因是:该函数从唯一的一个参数中读取数据并且没有写操作。如果函数参数指向的地址不可读,那么函数将返回内存访问异常(0xc000000005)的错误代码。

另外需要说明的是,int 2E是用于请求实现于 ntoskrnl.exe 的内部Native API 函数的软件中断。执行NtDisplayString调用的代码片段如下:

push edx

push 43h

pop     eax

int    2eh

随同INT 2Eh传入的是EAX 和 EDX 的两个寄存器参数。Edx保存的是待校验的地址指针的值,EAX 中保存的是函数入口表的索引ID。系统处理 INT 2eh 时,根据EAX的值确定每个调用将被分配到那个函数。程序根据调用后的返回值是否为0xC0000005来判断该地址是否可读,搜索程序的其他流程与上一种方法基本相同,在这里就不详细说了。

四、总结

从上面描述的三种搜索内存的方法看,使用NtDisplayString来搜索内存空间是速度最快,占用字节数最少,鲁棒性最好的方法。尽管该方法不能在Win 9x下使用,但是毕竟目前使用Win 9x的用户已经很少了。笔者在实际编写ShellCode时最后也选用了这种方法。

安全搜索内存的问题已经到此算是成功解决了,通过对这个问题的研究,总结起来感觉还是学到了不少东西。同时也体会到一些黑客前辈们对技术的不懈追求,在这里谨向他们表示敬意。

小提示:编译本文附带的演示文件时请使用Masm32。
进程 Vs 线程 本文讲解了 1.什么是进程和线程 2. 进程和线程的区别 阅读详情

相关推荐

深入探索内存搜索工具及其应用

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

weixin_35757531的博客 881

深入Native应用程序(和瑞星一样开机显示)

深入Native应用程序2006-10-26 17:29深入Native应用程序版权所有 1998 Mark Russinovich 翻译:MJ0011最后更新:1998年2月8日导言如果你对WindowsNt结构有一定的了解,你可能会知道,Win32应用程序所使用的API,并非是"真正"的NT API。POSIX,OS/2和Win32,这些

masterjames的专栏 4034

进程内存检测工具

能够监测进程内存的变化,对于分析内存泄漏有一定的帮助,分析成本地文件并绘制波形图。

安全搜索进程内存空间

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

ssihc0的专栏 1430

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

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

Windows C语言编程:Beep API实现蜂鸣器原理与实战

如果你在 Windows 上写过 C 语言程序,想给程序加个简单的提示音,第一个想到的可能是 printf("\a") 。这个转义字符确实能在某些终端里发出“嘀”的一声,但它太原始、太不可控了,而且很多时候根本没声音。那么,有没有一种更“Windows”、更可控、更专业的方法来让你的程序“说话”呢? 答案是肯定的,而且它比你想象的要强大和复杂。Windows 提供了一个名为 Beep 的 API 函数,专门用于生成蜂鸣声。你可能觉得这功能太简单,甚至有点过时——不就是让电脑“哔”一声吗?但恰恰是这个看似简单

weixin_34109408的博客 395

寻找复活节彩蛋egg huting 学习

寻蛋技术是 Staged shellcode 技术的一种 寻蛋 是利用一小段代码 来在内存中寻找真正的(代码尺寸较大的)shellcode(the egg)的技术。 也就是是 利用好一小段代码被执行,然后找到真正的shellcode并且执行 3个前置条件: 1)必须能够跳转(jmp call push/ret)并且执行一些shellcode。这时有效的缓冲区内存可以相对小一些...

weixin_30566063的博客 487

LabVIEW多设备采集实战:1个程序同时控制3个RS485 Modbus仪表

本文详细介绍了如何使用LabVIEW实现多设备RS485 Modbus同步采集,涵盖硬件架构设计、多线程通信框架搭建、数据帧解析技巧及性能优化策略。通过实际项目案例,展示如何解决端口冲突、数据解析错误等工业自动化常见问题,提升采集系统实时性与可靠性。

qsc901234的博客 302

native application程序结构的理解

native application程序结构是这样的:入口函数NtProcessStartiup(),程序结束必须调用NtTerminateProcess.下面是参考代码:当你从WindowsNT环境非正常退出重新启动系统时,你会注意到系统会自动运行一个磁盘检查程序AutoCheck,这个程序既不同于Windows 9X /Me环境下的ScanDisk.exe 16位DOS程序,也不同于Win

lionzl的专栏 790

Nifi SNI 问题解决方案

Nifi 在配置 SSL 时,如果没有正确设置主机名(SNI),就会导致。为了解决这个问题,我们需要重新配置 Nifi 的 SSL 证书,并确保所有相关配置项(如服务器地址、证书路径和密码等)正确无误。以下是一个详细的解决步骤,以帮助你正确配置 Nifi 并解决 SNI 错误。文件中的配置项(如服务器地址、端口和证书路径),以及正确设置用户凭证。通过这些配置,你可以确保 Nifi 在支持 HTTPS 的同时,正确处理 SSL/TLS 的 SNI 问题。文件,配置服务器地址、端口以及证书路径和密码。

m0_58786911的博客 2296

HackRF实战:用Portapack扩展板玩转GPS信号模拟(附固件刷写教程)

本文详细介绍了如何使用HackRF与Portapack扩展板进行GPS信号模拟,包括固件刷写、信号生成与发射配置等实战操作。通过专业工具和优化技巧,读者可以掌握软件无线电的高级应用,解决手机定位难题,同时强调安全合规使用的重要性。

weixin_28717431的博客 363

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

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

2160

U24时钟信号上升下降沿出现非单调性--简单分析

交换机U24时钟信号上升下降沿出现非单调性--简单分析

qq_45185504的博客 1132

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

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

1600

数据结构之博弈树搜索(深度优先搜索)

数据结构之博弈树搜索(深度优先搜索)

LucianaiB的博客 1524

2026年【江苏“信息与未来”编程思维】真题及题解(T6:桌面游戏)

2026年【江苏“信息与未来”编程思维】真题及题解(T6:桌面游戏)

王老师青少年编程 534

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

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

坦然 2045

【论文复现】Applied Intelligence 2025:Auto-PU正例无标签学习的自动化实现与GPT-5.4辅助编程实战

正例-无标签学习(Positive-Unlabelled Learning, PU Learning)是机器学习领域处理"只有正例标签,负例完全未知"场景的重要技术。本文基于2025年发表于Applied Intelligence的最新研究成果,详细阐述如何从零复现Auto-PU框架(包含GA-Auto-PU、BO-Auto-PU、EBO-Auto-PU三种优化器)。

nmdbbzcl的博客 1389

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

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

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

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

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

weixin_33692284的博客 385

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

Windows核心编程 进程

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值