内核读写只读内存方法总结[Delphi描述]

32位/64位WINDOWS驱动之突破进程保护CR0方式写入只读内存 0x400000#define PAGE_READONLY 0x02 只读#define PAGE_READWRITE 0x04 可读可写#define PAGE_WRITECOPY 0x08 写时复制#define PAGE_EXECUTE 0x10 可执行#define PAGE_EXECUTE_READ 0x20 可读可执行#define PAGE_EXECUTE_READWRITE 0x40 可读可写可执行。 阅读详情
作 者: Anskya

以下代码均已Delphi描述...至于为什么...
首先我是一个Delphi Coder...虽然我大部分时间使用的是ASM编译器和C编译器
但是我喜欢Delphi...好了不废话了...

已知的三种方法:如果各位有更好的意见欢迎大家提出

[1]使内存可读写

1.stl+cr0:
这个方法大家想必经常使用...


(参考I-32.3A文档)
由于cr0是一个32位寄存器...假设大家的CPU是32位的.没有64位测试环境
按照图这个结构我们可以了解到的信息
第16位:WP——Write Protect,当设置为1时只提供读页权限
第0位:PE——Paging,当设置为1时提供分页
第1位:MP——Protection Enable,当设置为1时进入保护模式

按照这个说明写出代码:
//1 关闭写保护
asm
  push eax
  mov eax, CR0
  and eax, 0FFFEFFFFh
  mov CR0, eax
  pop eax
end;

//2 打开写保护
asm
  push eax
  mov eax, CR0
  or eax, NOT 0FFFEFFFFh
  mov CR0, eax
  pop eax
end;
也许大家看得有点模糊.其实这个代码就是修改第16位
NOT 0FFFEFFFFh = 00010000h
因为要设置第16位为1...所以结果也就是代码那种效果...
鄂~我也不知道说什么了.也就是位操作你也可以直接使用
//1 关闭写保护
asm
  push  eax
  mov   eax, cr0
  and   eax, not 000010000h
  mov   cr0, eax
  pop   eax
end;

//2 打开写保护
asm
  push  eax
  mov   eax, cr0
  or    eax, 000010000h
  mov   cr0, eax
  pop   eax
end;

一般使用的时候我们都会加上cli和sti,由于这两个指令只能控制当前CPU对于
多核系统是无法起到有效的互斥的...所以一般都是配合"自转锁"使用
关于自转锁的话题我们下面会详细的说的


2.通过内存描述表(MDL)中描述一块内存区域,MDL包含此内存区域的起始地址,
拥有者进程,字节数量以及标志.(据说是Bill提供的方法.难道和VirtualProtect一样?)

代码:
type
  PMDL = ^_MDL;
  _MDL = packed record
    Next: PMDL;
    Size: USHORT;
    MdlFlags: USHORT;
    Process: Pointer;
    MappedSystemVa: PVOID;
    StartVa: PVOID;
    ByteCount: ULONG;
    ByteOffset: ULONG;
  end;
  MDL = _MDL;

const
  MDL_MAPPED_TO_SYSTEM_VA     = $0001;
Delphi驱动开发研究第七篇--与用户进程通讯(共享内存篇) 上篇教程我们学习了通过Section在用户进程和内核驱动程序之间共享信息的方法,但是这种方法有一个缺点,就是驱动程序被硬性限制在具体进程的地址上下文中,即驱动程序所使用的虚拟地址位于此进程的地址空间中。我们在本例中使用的方法将没有这个缺点。对于驱动程序来说,这种方法更为自然些。 阅读详情

相关推荐

Delphi实现的三种内存修改器代码实例

Delphi,作为Pascal语言的一个分支,自1995年推出以来,一直是开发人员喜爱的编程语言之一。它以其强大的编译器、丰富的组件库和高效的运行时性能而闻名。Delphi不仅仅是一个快速应用开发(RAD)工具,更是一个成熟、稳定的开发环境,尤其在Windows平台上有着无可比拟的优势。本章将带你了解Delphi的基本特点和它的独特之处,同时也将探讨其在现代开发环境中的地位和作用。内存修改器(Memory Editor)是一种用于在运行时查看和修改计算机程序内存中数据的工具。

weixin_35756373的博客 1074

Delphi实现清空回收站的系统级编程

本章详细解析了Delphi中ShellAPI单元的核心函数及其使用的结构体,并通过代码示例展示了如何执行删除操作、多文件操作以及清空回收站的初步思路。同时,对标志位FOF系列进行了分类说明,帮助开发者更好地控制文件操作行为。下一章将基于本章知识,深入讲解如何在Delphi中真正实现清空回收站的功能,并探讨其在不同系统环境下的适配与优化策略。建立统一的错误提示和日志记录机制,便于调试与用户反馈。记录时间戳、错误信息。

weixin_42356162的博客 1092

[分享]两种强力读写内存的方法(可过某游戏代理商的保护).pdf

[分享]两种强力读写内存的方法(可过某游戏代理商的保护).pdf

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1199

究竟什么是虚拟同步机???虚拟同步机巨简单理解

同步发电机定子铁芯的内圆均匀分布着定子槽,槽内按一定规律嵌放着对称的三相绕组U1-U2、V1-V2、W1-W2,如图1所示。工作原理转子铁芯上装有制成一定形状的成对磁极,磁极上绕有励磁绕组。励磁绕组上通直流电时,会在电机的气隙中形成极性相间的分布磁场,称为励磁磁场。当原动机拖动转子以恒定速度旋转时,励磁磁场随转轴一起旋转并顺次切割定子各相绕组。定子电枢绕组中将会感应出大小和方向周期性变化的三相对称正弦感应电动势。各相电动势大小相等,相位各差120°。

weixin_53126442的博客 2609

第一章、isaacsim 及 isaaclab 安装教程

本专栏所有内容将根据上述资源地址展开,请结合食用~

m0_47719040的博客 4783

Anomalib实战:从零开始构建自定义数据集的异常检测模型

本文详细介绍了如何使用Anomalib 2.1.0从零开始构建自定义数据集的异常检测模型。通过实战演示,指导读者准备符合规范的数据集结构,快速上手训练Patchcore等先进算法,并完成模型推理与调优,为工业质检、医疗影像等场景提供高效的视觉异常检测解决方案。

weixin_29165465的博客 109

从GAN生成失败案例出发:为什么你的AI画不准位置?CoordConv保姆级解决方案

本文深入探讨了GAN生成图像时位置偏移问题的根源,并提供了CoordConv的保姆级解决方案。通过分析传统CNN在空间坐标建模上的缺陷,详细介绍了CoordConv的原理、实现步骤及在StyleGAN2等模型中的实战应用,显著提升了医学图像生成等任务的定位精度。

pp12345的博客 206

2025.1.16——五、LoveSQL1 sqlmap文件类|万能密码

题目来源:BUUCTF[极客大挑战2019]LoveSQL1。

2402_87387800的博客 1071

重磅!Repo Wiki!

RepoWiki是Qoder平台的智能文档生成功能,通过静态代码分析自动提取项目架构、模块依赖和核心逻辑,并持续追踪代码变更保持文档同步。其工作流程分为四个阶段:1)代码扫描与AST解析;2)结构分析与依赖映射;3)文档智能生成;4)增量更新机制。支持多种编程语言,能识别设计模式并推断技术决策,适用于新项目搭建和遗留系统维护。优势在于降低理解成本和提高开发效率,但存在文件数量限制和依赖Git的局限性。典型应用场景包括自动生成架构图、API手册和团队知识沉淀。

ayusong870的博客 4037

从数字后端角度谈谈occ电路(二)

从图中,我们可以清晰的看出,当scan_en为1时,test mode为1时,经过一系列逻辑单元后,得到clk_sel输出信号为1,同样可推算fast_clk_en = 0,slow_clk_en为1,此时clk_out输出为slow clk,符合我们预期。在该模式下,是使用slow clock进行scan shift,接着我们开始进行推导;从图中,我们根据逻辑运算可以看出,clk_sel输出信号为0,fast clk en为1,此时通过mux选择,clk out即为fast clk;

芯冰乐 361

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 简单认识下注册表的HIVE文件格式
下一篇: SSDT Hook For Delphi
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值