设置权限

179 篇文章 0 订阅
86 篇文章 0 订阅

设置权限

 

  v9 = operator new(0x1Cu);
  v10 =(struct _TOKEN_PRIVILEGES *)v9;
  if (!v9 )
  {
    v15 =-2147024882;
    "Failedto allocate memory for privilege tokens.");
    goto LABEL_342;
  }
  *
v9= 0;
  v11 =v9 + 3;
  *v9= 2;
  v12 =0;
  do
  {

    v13 =PRIVILEGES_BACKUP_RESTORE[v12];
    ++v12;
    *(v11 - 2) = v13;
    *(v11 - 1) = (unsigned__int64)v13 >> 32;
    *v11= 2;
    v11 +=3;
  }
  while
(v12 < 2);
  v14 =SetPrivileges((int)v11, v10, (int)v11);
  v15 = v14;
  if (v14 < 0)
    "Failedto set privileges.");
  operator delete(v10);

 

//----- (10095F72)--------------------------------------------------------
signed int __fastcall SetPrivileges(int a1, struct _TOKEN_PRIVILEGES *a2, int a3)
{

  v3 =a2;
  v4 =0;
  TokenHandle =0;
  BufferLength = 0;
  if (a2->PrivilegeCount )
  {
    v5 =GetCurrentProcess();
    if (OpenProcessToken(v5, 0x20028u, &TokenHandle))
    {
      if
(!AdjustTokenPrivileges(TokenHandle, 0,v3, BufferLength, 0, &BufferLength) )
      {
        if
( GetLastError() == 122 )
        {
          v9 =(struct _TOKEN_PRIVILEGES *)operatornew(BufferLength);
          if ( v9 )
          {
            v9->PrivilegeCount= 0;
            if ( !AdjustTokenPrivileges(TokenHandle, 0,v3, BufferLength, v9, &BufferLength) )
            {
              v10 = GetLastError();
              v4 = v10;
              v11 = v10 <0;
              if ( v10 >0 )
              {
                v4 = (unsigned__int16)v10 | 0x80070000;
                v11 = v4 <0;
              }
              if
( !v11 )
                v4 = -2147467259;
                "Failedto adjust token privileges after resizing to accommodate modifiedprivileges.");
            }
            operator delete
(v9);
          }
          else
          {

            v4 = -2147024882;
            "Failedto allocate memory for modified privilege tokens.");
          }
        }
        else
        {

          v12 =GetLastError();
          v4 =v12;
          v13 =v12 < 0;
          if ( v12 >0 )
          {
            v4 = (unsigned __int16)v12 | 0x80070000;
            v13 = v4 <0;
          }
          if
( !v13 )
            v4 = -2147467259;
          "Failedto adjust token privileges.");
        }
      }
      if
(TokenHandle && TokenHandle != (HANDLE)-1 )
        CloseHandle(TokenHandle);
    }
    else
    {

      v7 =GetLastError();
      v4 =v7;
      v8 =v7 < 0;
      if (v7 > 0)
      {
        v4 =(unsigned __int16)v7 | 0x80070000;
        v8 =v4 < 0;
      }
      if
(!v8 )
        v4 =-2147467259;
      "Failedto get process token to set privileges into.");
    }
  }
  return
v4;
}

 

 


TOKEN_PRIVILEGEScontains information about a set of privileges for an access token.

typedef struct_TOKEN_PRIVILEGES

{

ULONGPrivilegeCount; //数组元素的个数

LUID_AND_ATTRIBUTESPrivileges[ANYSIZE_ARRAY]; //数组.类型为LUID_AND_ATTRIBUTES

}TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;

有关LUID_AND_ATTRIBUTES,请查阅MSDN.

TOKEN_PRIVILEGES成员

PrivilegeCount

指定特权数组的个数(因为下一个参数是一个数组)

Privileges

一个LUID_AND_ATTRIBUTES结构体.每个结构体包括LUID和特权的属性. 特权的属性可以是下列值的组合:

属性

描述

SE_PRIVILEGE_ENABLED_BY_DEFAULT

特权默认启用

SE_PRIVILEGE_ENABLED

特权启用.

SE_PRIVILEGE_USED_FOR_ACCESS

特权被用来访问一个对象或服务。

这个标志 被用于 标识有关特权,因为

通过一组客户端应用程序,可能包含不必要的特权

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux系统中,可以使用chmod命令来设置文件或目录的权限。 chmod命令的语法如下: ``` chmod [options] mode file ``` 其中,mode表示要设置权限模式,可以使用数字或符号两种方式表示,file表示要设置的文件或目录。 数字方式表示权限模式,其格式为三个数字,每个数字表示一组权限。其中,第一组表示文件所有者的权限,第二组表示文件所属组的权限,第三组表示其他用户的权限。每个数字由三个位组成,分别表示读、写、执行权限。这些权限可以用数字0-7来表示,分别表示没有权限、只有读权限、读和写权限、读、写和执行权限等。 符号方式表示权限模式,其格式为[ugoa][+-=][rwx],其中,u表示文件所有者,g表示文件所属组,o表示其他用户,a表示所有用户。+表示添加权限,-表示移除权限,=表示设置权限。r表示读权限,w表示写权限,x表示执行权限。 下面是一些常用的chmod命令示例: ``` chmod 644 file # 设置文件所有者可读写,其他用户只读权限 chmod u+x file # 添加文件所有者执行权限 chmod g-w file # 移除文件所属组写权限 chmod o=rwx file # 设置其他用户读写执行权限 chmod -R 755 dir # 递归设置目录及其下所有文件的权限为所有者可读写执行,其他用户可读执行 ``` 需要注意的是,在Linux系统中,文件或目录的权限是非常重要的,不当的权限设置可能会导致系统安全问题,因此应该谨慎设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值