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

网上的文章都知道在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 [email protected] 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 [email protected]@3JA ; long g_lRestrictionsVersionNumber

.text:7387F035                 push    9Ch

.text:7387F03A                 push    offset [email protected]@3PAKA ; ulong * g_rgRestrictionItemValues

.text:7387F03F                 push    offset unk_7387F058

.text:7387F044                 push    0

.text:7387F046                 push    [ebp+rest]

.text:7387F049                 call    ds:[email protected] ; SHRestrictionLookup(x,x,x,x,x,x)

.text:7387F04F                 pop     ebp

.text:7387F050                 retn    4

.text:7387F050 [email protected] endp

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

SHRestrictionLookup

函数例如以下:

int __stdcall SHRestrictionLookup(int a1, LPCWSTR pszDir, int a3, void *Dst, int a5, int a6)

{

char *v6; // [email protected]

int v7; // [email protected]

unsigned int v8; // [email protected]

int v9; // [email protected]

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这个函数。而且返回和系统不同的值就能起到效果。

时间: 2024-08-11 05:36:17

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

Windows Server 2008 R2控制站点隐藏并限制访问任意盘符的组策略配制方法

域控隐藏盘符的设置项 在组策略管理编辑器中,依次打开的用户配置→策略→管理模板→Windows组件→Windows资源管理器,其中有两项: 隐藏"我的电脑"中的这些指定的驱动器 防止从"我的电脑"访问驱动器 只设置* 第一项 能让盘符在资源管理器窗口中消失,但是仍然可以通过快捷方式的打开文件位置等方式进入到磁盘:同时设置 第二项 *既能够隐藏盘符,也能避免用户通过其他方式直接在资源管理器中访问磁盘. 系统默认的配置方案 在上述两项的编辑窗口选择启用,发现系统默认都只

windows server 2008 R2 域中用组策略隐藏指定磁盘驱动器(盘符)

1.首先在C:\Windows\SYSVOL\sysvol\xxx.com\Policies文件夹下,创建文件夹PolicyDefinitions. 2.将%systemroot%\PolicyDefinitions\下所有文件复制到C:\Windows\SYSVOL\sysvol\xxx.com\Policies\PolicyDefinitions下. 3.修改C:\Windows\SYSVOL\sysvol\xxx.com\Policies\PolicyDefinitions\Windows

Windows Server 2012修改光驱盘符

Windows Server 2012修改光驱盘符,可通过下面的步骤完成: windows+R ,输入diskmgmt.msc 这时可以看到我们熟悉的磁盘管理界面: 右击盘符,选择"更改驱动器号和路径"或"Change Drive Letter and Paths". 修改盘符:

windows下批处理设置U盘盘符为U【非PE】

U盘下建立如下两个文件: getU.bat setU.bat 直接双击运行getU.bat即可,setU.bat可以隐藏起来. 其中getU.bat内容如下: @echo offset "u=%cd:~0,1%"echo.&echo 你的U盘盘符是 %u% 盘echo %u%:: echo %u% > %cd%%u%.txt copy  %cd%setU.bat  c:\setU.batcall c:\setU.bat %u% pause 其中setU.bat内容如下:

Windows如何自定义U盘盘符、文件夹图标、文件夹背景

自定义U盘盘符.文件夹图标.文件夹背景 注意对于Vista和Win7的用户不支持文件夹图标和文件夹背景的更换 1.自定义盘符:在U盘根目录下新建文件 autorun.inf(可先建.txt文本文档,再重命名为autorun.inf),打开输入以下内容:[autorun]icon=*.ico其中,*.ico 为你的图标文件路径(什么,你不会制作ico图标?赶紧去看看我以前的文章吧),如果图标在根目录下,则直接输入图标文件名,如 icon=u-ico.ico ,如果图标文件不在U盘根目录下,则输入其

windows下如何获取系统已存在的盘符

在项目开发时,使用公司的SDK给系统分区,在windows2003的系统下分区后无法自动给新分区分配盘符,当然系统重启后可以分配盘符,但是我不希望它重启,所以我的想法是通过程序自动给新分区分配盘符.分配盘符准备使用diskpart命令中的assign letter方法,但是新盘符不能和已存在的盘符冲突, 那么问题来了,如何才能获取已存在的盘符,包括给CD/DVD .U盘等分配的盘符? #include <iostream>  #include <windows.h>     usi

Windows盘符切换,Dos命令

|   版权声明:本文为博主原创文章,未经博主允许不得转载. >>.常用Dos命令 1 dir 列文件名 deltree 删除目录树 2 cls 清屏 cd 改变当前目录 3 copy 拷贝文件 diskcopy 复制磁盘 4 del 删除文件 format 格式化磁盘 5 edit 文本编辑 mem 查看内存状况 6 md 建立子目录 move 移动文件.改目录名 7 more 分屏显示 type 显示文件内容 8 rd 删除目录 sys 制作DOS系统盘 9 ren 改变文件名 xcopy

windows server 2003服务器插入移动硬盘之后未显示盘符问题处理

测试机是win server2003,今天插入1TB的移动硬盘,发现桌面右下角有安装驱动的提示,驱动程序安装完毕之后打开我的电脑,没有找到移动硬盘的盘符. 解决方法如下: 1.右键我的电脑,选择"管理": 2.弹出的电脑管理对话框中点击:"存储->磁盘管理" 菜单,可以看到有个接近1T的磁盘没有分配盘符: 3.在该磁盘上右键,选择"更改驱动器号和路径",在弹出的对话框中为该磁盘设置盘符即可.

windows 技巧一 ——--域环境下如何将域用户的配置文件转移到c盘外的其他盘符

对于IT员工来说最经常最多的工作就是重新安装系统,但是各种IT从业者,不得不面对一个问题,那就是重新安装系统前的备份问题,有没有可能直接把用户文件迁移到非C盘外的其他盘符呢? 答案是肯定的. 举个栗子: 一个公司环境为test的域.有一个员工为test001. 方法一: 使用DOS命令行中的ROBOCOPY  RMDIR 命令进行迁移,但是有一个缺点:需要在安装系统前的最后一步打开dos窗口进行输入,所以问题出来了,针对每天大量的安装系统来说,这个效率是非常低下的. 以下是具体的操作过程(摘自网