开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1509|回复: 9
收起左侧

[分享] 针对第一期发布的贴子->驱动保护如何进行系统兼容

[复制链接]
发表于 2023-10-7 17:45:42 | 显示全部楼层 |阅读模式   辽宁省沈阳市
之前大家问我 系统标志位保护的兼容应该怎么做 今天来做一个简单的讲解首选需要你要兼容的机器 ------->本人是虚拟机
需要WinDbg这个软件 与VMware虚拟机进行双机调试。
具体怎么进行连接调试大家可以去网上找找 资料很多!

WinDbg附加到虚拟机系统后,输入>dt _EPROCESS< 可以查看当前系统的EPROCESS结构 我给大家贴上一个例子
这是我虚拟机Windows 8.1 的EPROCESS结构



kd> dt _EPROCESS
nt!_EPROCESS
   +0x000 Pcb              : _KPROCESS
   +0x2c8 ProcessLock      : _EX_PUSH_LOCK
   +0x2d0 CreateTime       : _LARGE_INTEGER
   +0x2d8 RundownProtect   : _EX_RUNDOWN_REF
   +0x2e0 UniqueProcessId  : Ptr64 Void
   +0x2e8 ActiveProcessLinks : _LIST_ENTRY
   +0x2f8 Flags2           : Uint4B
   +0x2f8 JobNotReallyActive : Pos 0, 1 Bit
   +0x2f8 AccountingFolded : Pos 1, 1 Bit
   +0x2f8 NewProcessReported : Pos 2, 1 Bit
   +0x2f8 ExitProcessReported : Pos 3, 1 Bit
   +0x2f8 ReportCommitChanges : Pos 4, 1 Bit
   +0x2f8 LastReportMemory : Pos 5, 1 Bit
   +0x2f8 ForceWakeCharge  : Pos 6, 1 Bit
   +0x2f8 CrossSessionCreate : Pos 7, 1 Bit
   +0x2f8 NeedsHandleRundown : Pos 8, 1 Bit
   +0x2f8 RefTraceEnabled  : Pos 9, 1 Bit
   +0x2f8 DisableDynamicCode : Pos 10, 1 Bit
   +0x2f8 EmptyJobEvaluated : Pos 11, 1 Bit
   +0x2f8 DefaultPagePriority : Pos 12, 3 Bits
   +0x2f8 PrimaryTokenFrozen : Pos 15, 1 Bit
   +0x2f8 ProcessVerifierTarget : Pos 16, 1 Bit
   +0x2f8 StackRandomizationDisabled : Pos 17, 1 Bit
   +0x2f8 AffinityPermanent : Pos 18, 1 Bit
   +0x2f8 AffinityUpdateEnable : Pos 19, 1 Bit
   +0x2f8 PropagateNode    : Pos 20, 1 Bit
   +0x2f8 ExplicitAffinity : Pos 21, 1 Bit
   +0x2f8 ProcessExecutionState : Pos 22, 2 Bits
   +0x2f8 DisallowStrippedImages : Pos 24, 1 Bit
   +0x2f8 HighEntropyASLREnabled : Pos 25, 1 Bit
   +0x2f8 ExtensionPointDisable : Pos 26, 1 Bit
   +0x2f8 ForceRelocateImages : Pos 27, 1 Bit
   +0x2f8 ProcessStateChangeRequest : Pos 28, 2 Bits
   +0x2f8 ProcessStateChangeInProgress : Pos 30, 1 Bit
   +0x2f8 DisallowWin32kSystemCalls : Pos 31, 1 Bit
   +0x2fc Flags            : Uint4B
   +0x2fc CreateReported   : Pos 0, 1 Bit
   +0x2fc NoDebugInherit   : Pos 1, 1 Bit
   +0x2fc ProcessExiting   : Pos 2, 1 Bit
   +0x2fc ProcessDelete    : Pos 3, 1 Bit
   +0x2fc ControlFlowGuardEnabled : Pos 4, 1 Bit
   +0x2fc VmDeleted        : Pos 5, 1 Bit
   +0x2fc OutswapEnabled   : Pos 6, 1 Bit
   +0x2fc Outswapped       : Pos 7, 1 Bit
   +0x2fc ForkFailed       : Pos 8, 1 Bit
   +0x2fc Wow64VaSpace4Gb  : Pos 9, 1 Bit
   +0x2fc AddressSpaceInitialized : Pos 10, 2 Bits
   +0x2fc SetTimerResolution : Pos 12, 1 Bit
   +0x2fc BreakOnTermination : Pos 13, 1 Bit
   +0x2fc DeprioritizeViews : Pos 14, 1 Bit
   +0x2fc WriteWatch       : Pos 15, 1 Bit
   +0x2fc ProcessInSession : Pos 16, 1 Bit
   +0x2fc OverrideAddressSpace : Pos 17, 1 Bit
   +0x2fc HasAddressSpace  : Pos 18, 1 Bit
   +0x2fc LaunchPrefetched : Pos 19, 1 Bit
   +0x2fc Background       : Pos 20, 1 Bit
   +0x2fc VmTopDown        : Pos 21, 1 Bit
   +0x2fc ImageNotifyDone  : Pos 22, 1 Bit
   +0x2fc PdeUpdateNeeded  : Pos 23, 1 Bit
   +0x2fc VdmAllowed       : Pos 24, 1 Bit
   +0x2fc ProcessRundown   : Pos 25, 1 Bit
   +0x2fc ProcessInserted  : Pos 26, 1 Bit
   +0x2fc DefaultIoPriority : Pos 27, 3 Bits
   +0x2fc ProcessSelfDelete : Pos 30, 1 Bit
   +0x2fc SetTimerResolutionLink : Pos 31, 1 Bit
   +0x300 ProcessQuotaUsage : [2] Uint8B
   +0x310 ProcessQuotaPeak : [2] Uint8B
   +0x320 PeakVirtualSize  : Uint8B
   +0x328 VirtualSize      : Uint8B
   +0x330 SessionProcessLinks : _LIST_ENTRY
   +0x340 ExceptionPortData : Ptr64 Void
   +0x340 ExceptionPortValue : Uint8B
   +0x340 ExceptionPortState : Pos 0, 3 Bits
   +0x348 Token            : _EX_FAST_REF
   +0x350 WorkingSetPage   : Uint8B
   +0x358 AddressCreationLock : _EX_PUSH_LOCK
   +0x360 PageTableCommitmentLock : _EX_PUSH_LOCK
   +0x368 RotateInProgress : Ptr64 _ETHREAD
   +0x370 ForkInProgress   : Ptr64 _ETHREAD
   +0x378 CommitChargeJob  : Ptr64 _EJOB
   +0x380 CloneRoot        : _RTL_AVL_TREE
   +0x388 NumberOfPrivatePages : Uint8B
   +0x390 NumberOfLockedPages : Uint8B
   +0x398 Win32Process     : Ptr64 Void
   +0x3a0 Job              : Ptr64 _EJOB
   +0x3a8 SectionObject    : Ptr64 Void
   +0x3b0 SectionBaseAddress : Ptr64 Void
   +0x3b8 Cookie           : Uint4B
   +0x3c0 WorkingSetWatch  : Ptr64 _PAGEFAULT_HISTORY
   +0x3c8 Win32WindowStation : Ptr64 Void
   +0x3d0 InheritedFromUniqueProcessId : Ptr64 Void
   +0x3d8 LdtInformation   : Ptr64 Void
   +0x3e0 OwnerProcessId   : Uint8B
   +0x3e8 Peb              : Ptr64 _PEB
   +0x3f0 Session          : Ptr64 Void
   +0x3f8 AweInfo          : Ptr64 Void
   +0x400 QuotaBlock       : Ptr64 _EPROCESS_QUOTA_BLOCK
   +0x408 ObjectTable      : Ptr64 _HANDLE_TABLE
   +0x410 DebugPort        : Ptr64 Void
   +0x418 Wow64Process     : Ptr64 Void
   +0x420 DeviceMap        : Ptr64 Void
   +0x428 EtwDataSource    : Ptr64 Void
   +0x430 PageDirectoryPte : Uint8B
   +0x438 ImageFileName    : [15] UChar
   +0x447 PriorityClass    : UChar
   +0x448 SecurityPort     : Ptr64 Void
   +0x450 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
   +0x458 JobLinks         : _LIST_ENTRY
   +0x468 HighestUserAddress : Ptr64 Void
   +0x470 ThreadListHead   : _LIST_ENTRY
   +0x480 ActiveThreads    : Uint4B
   +0x484 ImagePathHash    : Uint4B
   +0x488 DefaultHardErrorProcessing : Uint4B
   +0x48c LastThreadExitStatus : Int4B
   +0x490 PrefetchTrace    : _EX_FAST_REF
   +0x498 LockedPagesList  : Ptr64 Void
   +0x4a0 ReadOperationCount : _LARGE_INTEGER
   +0x4a8 WriteOperationCount : _LARGE_INTEGER
   +0x4b0 OtherOperationCount : _LARGE_INTEGER
   +0x4b8 ReadTransferCount : _LARGE_INTEGER
   +0x4c0 WriteTransferCount : _LARGE_INTEGER
   +0x4c8 OtherTransferCount : _LARGE_INTEGER
   +0x4d0 CommitCharge     : Uint8B
   +0x4d8 Vm               : _MMSUPPORT
   +0x5c0 MmProcessLinks   : _LIST_ENTRY
   +0x5d0 ModifiedPageCount : Uint4B
   +0x5d4 ExitStatus       : Int4B
   +0x5d8 VadRoot          : _RTL_AVL_TREE
   +0x5e0 VadHint          : Ptr64 Void
   +0x5e8 VadCount         : Uint8B
   +0x5f0 VadPhysicalPages : Uint8B
   +0x5f8 VadPhysicalPagesLimit : Uint8B
   +0x600 AlpcContext      : _ALPC_PROCESS_CONTEXT
   +0x620 TimerResolutionLink : _LIST_ENTRY
   +0x630 TimerResolutionStackRecord : Ptr64 _PO_DIAG_STACK_RECORD
   +0x638 RequestedTimerResolution : Uint4B
   +0x63c SmallestTimerResolution : Uint4B
   +0x640 ExitTime         : _LARGE_INTEGER
   +0x648 InvertedFunctionTable : Ptr64 _INVERTED_FUNCTION_TABLE
   +0x650 InvertedFunctionTableLock : _EX_PUSH_LOCK
   +0x658 ActiveThreadsHighWatermark : Uint4B
   +0x65c LargePrivateVadCount : Uint4B
   +0x660 ThreadListLock   : _EX_PUSH_LOCK
   +0x668 WnfContext       : Ptr64 Void
   +0x670 Spare0           : Uint8B
   +0x678 SignatureLevel   : UChar
   +0x679 SectionSignatureLevel : UChar
   +0x67a Protection       : _PS_PROTECTION
   +0x67b SpareByte20      : [1] UChar
   +0x67c Flags3           : Uint4B
   +0x67c Minimal          : Pos 0, 1 Bit
   +0x680 SvmReserved      : Int4B
   +0x688 SvmReserved1     : Ptr64 Void
   +0x690 SvmReserved2     : Uint8B
   +0x698 LastFreezeInterruptTime : Uint8B
   +0x6a0 DiskCounters     : Ptr64 _PROCESS_DISK_COUNTERS
   +0x6a8 PicoContext      : Ptr64 Void
   +0x6b0 KeepAliveCounter : Uint4B
   +0x6b4 NoWakeKeepAliveCounter : Uint4B
   +0x6b8 DeepFreezeStartTime : Uint8B
   +0x6c0 CommitChargeLimit : Uint8B
   +0x6c8 CommitChargePeak : Uint8B
   +0x6d0 HighPriorityFaultsAllowed : Uint4B



我们需要找到Protection这个偏移 在上面的EPROCESS结构中 0x67a 就是当前系统的偏移!
那么很明显了 只要你有足够多的虚拟机 就可以做到兼容!
在驱动程序中 我们可以使用RtlGetVersion这个函数来获取当前系统的版本 这个函数在微软官方的文档里就有 R3层也可以调用 通过判断对应系统的版本 来返回对应的偏移值做出兼容!
给大家贴上一个简单的例子:




上面的写法我自己也有一点点没搞懂 我去csdn上查Windows10的EPROCESS结构中的Protection偏移是0x6fa 但是我自己虚拟机获得的数据却是0x87a 我觉得是系统单独版本的问题 这方面大家需要注意 错误的偏移会导致电脑蓝屏!
国庆最后一天了 希望大家都过了一个愉快的假期!
国庆最后一天了 希望大家都过了一个愉快的假期!
国庆最后一天了 希望大家都过了一个愉快的假期!
我自身技术不够------>大家嘴下留情!
版本示例.png

评分

参与人数 2好评 +2 精币 +3 收起 理由
熙洛 + 1 + 1 新技能已get√
不许人间见白头 + 1 + 2 新技能已get√

查看全部评分

 楼主| 发表于 2023-10-7 17:47:53 | 显示全部楼层   辽宁省沈阳市
版本例子的写法可能有错误未纠正 请大家自己来写 我只是提供一个模板!
回复 支持 反对

使用道具 举报

签到天数: 7 天

发表于 2024-8-2 18:18:43 | 显示全部楼层   福建省泉州市
66666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2024-4-10 23:38:37 | 显示全部楼层   广东省惠州市
支持支持楼主
回复 支持 反对

使用道具 举报

结帖率:83% (90/109)
发表于 2024-1-28 16:09:37 | 显示全部楼层   浙江省丽水市
驱动强制删除有办法过蓝屏吗?
回复 支持 反对

使用道具 举报

发表于 2024-1-24 06:11:56 | 显示全部楼层   广东省中山市
本帖最后由 似风似雨似魔鬼 于 2024-1-24 13:03 编辑

首先还是感谢分享!!!

if (Version.dwBuildNumber >= 22000) return win11;
if (Version.dwBuildNumber >= 19043) return win10;
if (Version.dwBuildNumber >= 9200) return Win8;
if (Version.dwBuildNumber >= 7601)return Win7;
return 0;
判断 >= 不严谨  9200 也是大于 7601    因该是     >=  X   &  < (X+1)
因该把范围限制死一点防止 ,偶尔会判断错误,或者说写上绝对值
个人观点,不喜勿喷!!!
限制范围
if (Version.dwBuildNumber >= 22000 && Version.dwBuildNumber< 22001) return win11;
if (Version.dwBuildNumber >= 19043 && Version.dwBuildNumber < 19044) return win10;
if (Version.dwBuildNumber >= 9200 && Version.dwBuildNumber< 9201) return Win8;
if (Version.dwBuildNumber >= 7601 && Version.dwBuildNumber< 7602)return Win7;
return 0;
绝对值(绝对值对于小版本更新不友好,可能更新的版本偏移值很多,不同的版本,多个偏移值,例如 win10 1906   21H2 22H2 等等 可能偏移值都不一样)
if (Version.dwBuildNumber = 22000) return win11;
if (Version.dwBuildNumber = 19043) return win10;
if (Version.dwBuildNumber = 9200) return Win8;
if (Version.dwBuildNumber = 7601)return Win7;
return 0;



回复 支持 反对

使用道具 举报

发表于 2024-1-24 06:01:57 | 显示全部楼层   广东省中山市
你写的 判断偏移不严谨!
回复 支持 反对

使用道具 举报

结帖率:94% (17/18)

签到天数: 18 天

发表于 2023-10-25 07:40:27 | 显示全部楼层   山东省潍坊市
看来上手是有难度的~
回复 支持 反对

使用道具 举报

结帖率:68% (19/28)

签到天数: 17 天

发表于 2023-10-24 02:56:19 | 显示全部楼层   浙江省宁波市
请问驱动申请内存怎么写
回复 支持 反对

使用道具 举报

结帖率:100% (18/18)
发表于 2023-10-7 21:20:27 | 显示全部楼层   天津市天津市
出个教程,我爱你的哦..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表