找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3416|回复: 3

win7磁盘读写操作

[复制链接]
发表于 2014-4-18 19:45:39 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 元始天尊 于 2014-9-20 21:32 编辑

2年前没解决的这个问题,就在今天解决了:正常情况下,Win7系统16扇区以后写操作是无效的,如果要破解这个通常会在驱动级实现,然而这里提供一种应用层实现方式:
  1.         

  2. HANDLE handle=CreateFile("\\\\.\\c:",GENERIC_ALL,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
  3. //GENERIC_ALL有时不好使,不过权限最大,如果用GENERIC_ALL返回INVALID_HANDLE则改成GENERIC_READ|GENERIC_WRITE
  4.         BOOL ret;
  5.         ret=SetFilePointer(handle,0x0000CC00,NULL,FILE_BEGIN);
  6.         BYTE buffer[512];
  7.         memset(buffer,1,512);
  8.         DWORD num;
  9.         ret=DeviceIoControl(handle,FSCTL_DISMOUNT_VOLUME,NULL,0,NULL,0,&num,NULL);//注意FSCTL_LOCK_VOLUME无效
  10.         //下面要写数据了,注意别把自己的数据写了,自己修改上面的偏移
  11.         ret=WriteFile(handle,buffer,512,&num,NULL);//必须是扇区大小的倍数,否则报参数错
  12.         CloseHandle(handle);

复制代码



当非Administrator和Administrators组的用户访问CreateFile时会失败,这时需要用到提权函数,下面是逆向出的unlocker的一部分代码用于提权

  1. bool SetACL(LPWSTR OjbectName)
  2. {
  3.         PSID pEveryoneSID=NULL,pAdminSID=NULL;
  4.         SID_IDENTIFIER_AUTHORITY SIDAuthWorld=SECURITY_WORLD_SID_AUTHORITY;
  5.         if(!AllocateAndInitializeSid(&SIDAuthWorld,1,SECURITY_WORLD_RID,0,0,0,0,0,0,0,&pEveryoneSID))
  6.         {//ERROR
  7.                 if(pEveryoneSID) FreeSid(pEveryoneSID);
  8.                 return FALSE;
  9.         }
  10.        
  11.         SID_IDENTIFIER_AUTHORITY SIDAuthNT=SECURITY_NT_AUTHORITY;
  12.         if(!AllocateAndInitializeSid(&SIDAuthNT,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,
  13.                 0,0,0,0,0,0,&pAdminSID))
  14.         {
  15.                 if(pAdminSID) FreeSid(pAdminSID);
  16.                 if(pEveryoneSID) FreeSid(pEveryoneSID);
  17.                 return FALSE;
  18.         }
  19.        
  20.         EXPLICIT_ACCESS ea[2];
  21.         ZeroMemory(ea,2*sizeof(EXPLICIT_ACCESS));
  22.         ea[0].grfAccessPermissions=GENERIC_ALL;
  23.         ea[0].grfAccessMode=SET_ACCESS;
  24.         ea[0].grfInheritance=NO_INHERITANCE;
  25.         ea[0].Trustee.TrusteeForm=TRUSTEE_IS_SID;
  26.         ea[0].Trustee.TrusteeType=TRUSTEE_IS_WELL_KNOWN_GROUP;
  27.         ea[0].Trustee.ptstrName=(LPSTR)pEveryoneSID;
  28.         ea[1].grfAccessPermissions=GENERIC_ALL;
  29.         ea[1].grfAccessMode=SET_ACCESS;
  30.         ea[1].grfInheritance=NO_INHERITANCE;
  31.         ea[1].Trustee.TrusteeForm=TRUSTEE_IS_SID;
  32.         ea[1].Trustee.TrusteeType=TRUSTEE_IS_GROUP;
  33.         ea[1].Trustee.ptstrName=(LPSTR)pAdminSID;
  34.        
  35.         PACL pACL=NULL;
  36.         if(!SetEntriesInAcl(2,ea,NULL,&pACL))
  37.         {
  38.                 DWORD nRet=SetNamedSecurityInfoW(OjbectName,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,pACL,NULL);
  39.                
  40.                 if(nRet == ERROR_ACCESS_DENIED)
  41.                 {
  42.                         SetNamedSecurityInfoW(OjbectName,SE_FILE_OBJECT,OWNER_SECURITY_INFORMATION,pAdminSID,NULL,NULL,NULL);
  43.                         SetNamedSecurityInfoW(OjbectName,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,pACL,NULL);
  44.                 }
  45.         }
  46.        
  47.         if(pACL) LocalFree(pACL);
  48.         if(pAdminSID) FreeSid(pAdminSID);
  49.         if(pEveryoneSID) FreeSid(pEveryoneSID);
  50.         return 0;
  51. }
复制代码



回复

使用道具 举报

发表于 2014-4-18 22:51:48 | 显示全部楼层
帖子虽短,内容却很实在。
学到了。
回复 赞! 靠!

使用道具 举报

发表于 2014-4-18 23:55:12 | 显示全部楼层
漏了一个细节
QQ图片20140418235435.jpg
回复 赞! 靠!

使用道具 举报

发表于 2014-7-7 13:09:20 | 显示全部楼层
很有料哟!谢谢分享
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-1 08:32 , Processed in 0.032455 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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