网上的文章都知道在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer 目录下有控制隐藏驱动器隐藏控制面板的键值,通过修改这些键值来控制是否可以改变windows的配置或者权限,或者掩藏或者显示什么。(必须要重新启动)那么谁来控制这个开关呢?

通过自己的调试追踪到如下的栈

# ChildEBP RetAddr Args to Child
00 0235f134 7602ed30 00000528 765aebe0 00000000 Sandboxdll!Mine_RegQueryValueExW+0xca [e:\ronggf\work\branches\minsheng\client_windows\src\hooklib\hook_advapi32.cpp @ 365]
WARNING: Stack unwind information not available. Following frames may be wrong.
01 0235f178 7602e977 00000528 765aebe0 0000ffff SHLWAPI!PathIsRelativeW+0xdf
02 0235f1bc 7602aed2 80000002 0235f210 765aebe0 SHLWAPI!SHRegGetValueW+0xe3
03 0235f1e0 7602b97e 80000002 0235f210 765aebe0 SHLWAPI!SHGetValueW+0x21
04 0235f41c 76024a79 00000000 765af510 765aebe0 SHLWAPI!Ordinal271+0x69
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\system32\SHELL32.dll -
05 0235f43c 765aedb7 00000100 00000000 765aedc0 SHLWAPI!StrCmpNIW+0x40
06 0235f45c 766b1026 00000100 0235f4b8 00000004 SHELL32!SHRestricted+0x24
07 0235f474 766b07b3 00000000 02d80e68 00000000 SHELL32!Ordinal744+0x32a1
08 0235f494 766b0476 0235f4b8 02d36040 02d36010 SHELL32!Ordinal744+0x2a2e
09 0235f4e8 765685e5 02d80e68 00000001 0235f574 SHELL32!Ordinal744+0x26f1
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\system32\explorerframe.dll -
0a 0235f538 7198d77d 02d36010 00000001 0235f574 SHELL32!OpenRegStream+0x1652
0b 0235f5b0 7198041e 02a5c2e0 01000000 80000000 explorerframe!Ordinal110+0xe380
0c 0235f5d0 765d619e 02a5c2f4 7fffffff 02a63668 explorerframe!Ordinal110+0x1021
0d 0235f5ec 765d6109 0235f628 00000000 02ac0fb8 SHELL32!SHCreateItemFromIDList+0x166
0e 0235f634 765caaa8 0235f64c 7602b6cf 02a63668 SHELL32!SHCreateItemFromIDList+0xd1
0f 0235f63c 7602b6cf 02a63668 0030e150 0235f6c0 SHELL32!Ordinal95+0x2274
10 0235f64c 771ab5e9 02ac0fb8 752c3f68 00294448 SHLWAPI!PathBuildRootW+0x4c
11 0235f6c0 771ae8d1 02ac0fb8 0030e150 752c3188 ntdll!RtlTestBit+0x21c
12 0235f820 75f81194 00294440 0235f86c 771db3f5 ntdll!RtlIsCriticalSectionLockedByThread+0x474
13 0235f82c 771db3f5 00294440 752c31c4 00000000 kernel32!BaseThreadInitThunk+0x12
14 0235f86c 771db3c8 771ad63e 00294440 00000000 ntdll!RtlInitializeExceptionChain+0x63
15 0235f884 00000000 771ad63e 00294440 00000000 ntdll!RtlInitializeExceptionChain+0x36
从 SHELL32.dll 的 函数 SHRestricted开始,转到读取策略注册表键值上去的,我们来看看 SHRestricted 的逆向

.text:7387F02B _SHRestricted@4 proc near ; CODE XREF: CMenuItemsCache::RefreshCachedDarwinShortcuts(int)+Dp
.text:7387F02B                                         ; CDesktopBrowser::_ActivateView(void)+3Dp ...
.text:7387F02B
.text:7387F02B rest            = dword ptr  8
.text:7387F02B
.text:7387F02B                 mov     edi, edi
.text:7387F02D                 push    ebp
.text:7387F02E                 mov     ebp, esp
.text:7387F030                 push    offset ?g_lRestrictionsVersionNumber@@3JA ; long g_lRestrictionsVersionNumber
.text:7387F035                 push    9Ch
.text:7387F03A                 push    offset ?g_rgRestrictionItemValues@@3PAKA ; ulong * g_rgRestrictionItemValues
.text:7387F03F                 push    offset unk_7387F058
.text:7387F044                 push    0
.text:7387F046                 push    [ebp+rest]
.text:7387F049                 call    ds:__imp__SHRestrictionLookup@24 ; SHRestrictionLookup(x,x,x,x,x,x)
.text:7387F04F                 pop     ebp
.text:7387F050                 retn    4
.text:7387F050 _SHRestricted@4 endp

在其中调用了 SHLAPI.DLL 中的 SHRestrictionLookup

SHRestrictionLookup

函数如下:

int __stdcall SHRestrictionLookup(int a1, LPCWSTR pszDir, int a3, void *Dst, int a5, int a6)
{
char *v6; // edi@7
int v7; // ebx@1
unsigned int v8; // eax@2
int v9; // edx@3
v7 = 0;
if ( !g_bDllTerminating )
{
_ValidateRestrictionTable(Dst, a5, a6);
v8 = 0;
if ( (unsigned int)a5 > 0 )
{
v9 = a3;
while ( a1 != *(_DWORD *)v9 )
{
++v8;
v9 += 12;
if ( v8 >= a5 )
return v7;
}
v6 = (char *)Dst + 4 * v8;
v7 = *(_DWORD *)v6;
if ( *(_DWORD *)v6 == -1 )
{
v7 = SHGetRestriction(pszDir, *(LPCWSTR *)(a3 + 12 * v8 + 4), *(LPCWSTR *)(a3 + 12 * v8 + 8));
AcquireSRWLockExclusive(&g_csrwlockRestrictions);
if ( *(_DWORD *)a6 == SHGlobalCounterGetValue(GLOBALCOUNTER_RESTRICTIONS) )
*(_DWORD *)v6 = v7;
ReleaseSRWLockExclusive(&g_csrwlockRestrictions);
}
}
}
return v7;
}

会从注册表中获取值然后返回(如果没有获取 -1 没有获取),否则直接读取出来

在MSDN 中:

Determines whether a specified administrator policy is in effect. In many cases, applications need to modify certain behaviors in order to comply with the policies enacted by system administrators.

检测指定的管理员策略是否有效。在很多情况下,应用程序需要遵照系统管理员指定的策略依序修改某些行为。

系统行为是这个样子,如果我们的程序需要某些和系统行为不同,那么hook这个函数,并且返回和系统不同的值就能起到效果。

也谈隐藏盘符等windows 的管理员的策略实现相关推荐

  1. 禁用U盘!隐藏盘符和禁止查看

    禁用U盘! 方法1,隐藏盘符和禁止查看(适用于Windows系统) 打开注册表编辑器,依次展开如下分支[HKEY_CURRENT_USER/software/Microsoft/Windows/Cur ...

  2. 如何隐藏计算机上的盘符,如何隐藏整个磁盘?隐藏盘符及磁盘方法介绍

    昨天我们推送了"get新技能:终极隐藏电脑文件",有人给小编留言,问有没有办法整个磁盘隐藏,小编在这里给大家一个肯定的答复,想隐藏盘符没问题!想隐藏整个磁盘,也没问题! 隐藏盘符 ...

  3. 教你隐藏盘符,把你的小姐姐藏起来

    上次一个朋友告诉我,他无意中把一台硬盘里有小姐姐爱薇的笔记本借给了小姨子.从此,小姨子看他的眼神都充满了警惕,大有一言不合就拔刀相向的感觉,两人见面经常相当尴尬. 我之所以说这件事除了要告诉大家,个人 ...

  4. win7计算机盘符显示在左侧,官方Win7旗舰版系统怎样显示隐藏盘符

    在官方Win7旗舰版系统中为防止他人私自查看自己电脑中的信息而进行了Win7隐藏盘符操作,但自己要使用信息时,要怎样显示隐藏盘符呢?下面,墨染暖心以官方Win7旗舰版系统为例,进行显示隐藏盘符操作. ...

  5. win10下如何隐藏Linux盘符,Win10专业版系统下如何显示隐藏盘符

    在win10专业版系统中,很多用户都会在磁盘中保存很多重要的文件,考虑到安全问题,有部分用户会将保存有重要信息的盘符隐藏起来,但是有时候想要打开隐藏盘符,却不知道要如何显示隐藏盘符,其实方法很简单,这 ...

  6. 服务器隐藏盘符如何显示,Windows10系统如何使用注册表隐藏磁盘盘符?

    Windows10系统如何使用注册表隐藏磁盘盘符?如果你有一些文件不想被他人看到,那么你可以将放置文件的磁盘隐藏起来,这样别人就无法进入你的私密磁盘了.想要隐藏磁盘盘符其实很简单,使用注册表即可轻松实 ...

  7. win10 隐藏盘符

    这招主要是用来对付小孩,就是让电脑中的盘符在我的电脑下不显示. 比如,原本这样的: 设置完,并重启之后就变成: 要达到此效果,需要以下条件: 1.当前账户具有管理员权限. 2.修改注册表: 计算机\H ...

  8. win7如何隐藏盘符

    通过隐藏硬盘分区可以防止其他用户查看和读写该分区中的数据,从而有效地保护该分区的重要数据不被破坏.运行输入regedit回车打开注册表编辑器,依次展开[HKEY_CURRENT_USER\Softwa ...

  9. 一bat小工具 隐藏盘符

    reg add "HKLM\system\currentcontrolset\control\storagedevicepolicies"/v writeprotect /t re ...

最新文章

  1. Pass Infrastructure基础架构(上)
  2. 固态硬盘驱动器在设计上有个安全漏洞 易导致数据损毁
  3. 网吧网管在自杀前的遗书
  4. 【基础算法】 GBDT/XGBoost 常见问题
  5. Android中使用软引用和弱引用避免OOM的方法
  6. Django自带的用户验证与事务管理的基本概念理解
  7. 微信 SDK 升级,全面支持异步缓存接口, .NET 3.5/4.0版本5月1日起停止更新
  8. SQL Server 2017 SELECT…INTO 创建的新表指定到文件组
  9. SLAM_2021_F-LOAM:基于激光雷达的快速里程计和建图
  10. ubuntu 12.04 安装Docker 实战
  11. multipartfile获取数据_详解SpringMVC使用MultipartFile实现文件的上传
  12. Crystal Ball—蒙地卡罗仿真软件
  13. 三年探索:一条自控、电信/科类学生的技术成长路线
  14. 湖北飞young使用任意路由器教程
  15. oracle 删掉同义词,【oracle删除同义词】作文写作问答 - 归教作文网
  16. 输入整形 matlab仿真
  17. Android12及所有版本解决没有system读写权限(只需要magisk面具)
  18. Java项目 网上订餐系统计算机毕业设计必备
  19. OneDNS终端网络安全接入服务原理解析
  20. 运动无线耳机哪个品牌比较好、口碑最好的运动蓝牙耳机

热门文章

  1. D3D渲染遇到的问题
  2. WIFI WPA1/2 Crack for Windows
  3. js逆向案例-某数美
  4. 6. 表与表之间的关系
  5. Redis - 适配全国产操作系统的那些坑
  6. MySQL数据库——day26 数据库安装,卸载,概念,msq的介绍,安装,连接,DDL,DML,DQL模糊查询,字段控制(别名和运算),排序,聚合函数,分组查询(where和having),分页查询
  7. 2021年茶艺师(初级)考试试卷及茶艺师(初级)考试申请表
  8. AidLux“人像抠图”案例源码详解 (Python)
  9. 90后alia炫富女
  10. Linux应用程序编程