首页 > 编程知识 正文

java生成token令牌and(phptoken令牌原理)

时间:2023-05-04 04:24:15 阅读:66076 作者:298

GetCurrentProcessID要调整当前进程的ID OpenProcessToken进程的令牌句柄LookupPrivilegeValue进程的访问权限AdjustTokenPrivileges令牌权限, open只需要当前进程具有“SeDeDebug”权限,该权限指定了任何进程(包括系统安全进程和服务进程)的写入相关访问权限。 如果用户是管理员或具有相应的权限,则可以拥有该权限。 但是,如果使用管理员帐户对系统安全进程运行openprocess(process_all_access,FALSE,dwProcessID ),则“拒绝访问” 为什么会这样呢? 默认情况下,未启用进程的某些访问权限。 所以我们要做的首先是启用这些权限。 与此相关的API函数包括OpenProcessToken、LookupPrivilegevalue和AdjustTokenPrivileges。 更改进程的访问令牌。 首先,要获取进程访问令牌的句柄,可以在OpenProcessToken中获得。 函数的原型如下。 boolopenprocesstoken (handleprocesshandle,DWORD DesiredAccess,PHANDLE TokenHandle 1 )第一个参数是更改访问权限的进程句柄。 第三个参数是返回的访问令牌指针。第二个参数指定要执行的操作的类型。 要更改令牌,请将第二个参数指定为TOKEN_ADJUST_PRIVILEGES。 有关其他参数,请参见PlatformSDK。 通过该函数可以获得当前进程的访问令牌的句柄。 将函数的第一个参数指定为GetCurrentProcess (即可。 然后,可以调用AdjustTokenPrivileges对此访问令牌进行更改。 AdjustTokenPrivileges原型例如是booladjusttokenprivileges (handletokenhandle,//handletotokenbooldisablealllprivileges, //disablingoptionptoken _ privileges newstate,//privilegeinformationdwordbufferlength,//sizeofbufferptoken _ privi lli 第一个参数是访问令牌的句柄。 第二个参数决定是更改权限还是删除所有权限。 第三个参数指示要更改的权限,并且是指向包含数组的TOKEN_PRIVILEGES结构的指针。 数据组中的每个项目都显示权限类型和要执行的操作。 第四个参数是结构预览状态的长度。 如果PreviousState为空,则参数必须为空。 第五个参数也是指向TOKEN_PRIVILEGES结构的指针,用于存储更改前权限的信息。 空也没关系。 最后一个参数是实际PreviousState结构返回的大小。 在使用此函数之前,让我们先看看名为TOKEN_PRIVILEGES的结构。 其宣言示例如下。 typedef struct _ token _ privileges { dwordprivilegecount; luid _ and _ attributes privileges [ ]; } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES; PrivilegeCount指数组基元的数量,后跟LUID_AND_ATTRIBUTES类型的数组。 现在,让我们看一下名为LUID_AND_ATTRIBUTES的结构的内容。 声明如下。 typedef struct _ luid _ attributes dword attributes; } LUID_AND_ATTRIBUTES、*PLUID_AND_ATTRIBUTES的第二个参数指示要执行的操作类型。 有三个选项: se _ privilege _ enabled _ by _ default和SE_PRIVILEGE_USED_FOR_ACCESS 要启用权限,请将Attributes指定为SE_PRIVILEGE_ENABLED。 第一个参数是权限类型,即LUID的值。 LUID是指locallyuniqueidentifier。 我认为GUID是众所周知的,它保证了GUID的请求在全局范围内是唯一的。 只有确保LUID在本地是唯一的,才能确保LUID在系统的每个运行过程中是唯一的。 另外和GUID是相同的点。 LUID也是64位的值,我想你见过GUID的大值。 我如何知道与权限相应的LUID值是多少? 这将使用另一个API函数LookupPrivilegevalue。

其真实身份例如是boollookupprivilegevalue (lpctstrlpsystemname,//system name LPCTSTR lpName,//privilegenamepluidlpluid///lllpluid 第三个参数是返回LUID的指针,假设本地系统只需要指定NULL。 第二个参数指示权限的名称,如" SeDebugPrivilege "。

Winnt.h还定义了权限名称宏。 例如# definese _ backup _ name text (sebackupprivilege );definese _ restore _ name text (serestoreprivilege ) ) ) e_debug_nametext ) sedebugprivilege ) )这样通过对这三个函数的调用,我们可以实现开放处理(process _ all _ access,FALSE,dwProcessID 然后指定了所有访问权限。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。