我写了个函数,以下是VC版的可以编译通过:
// 函数作用:为当前进程取得系统特权的函数
VOID WINAPI MyGetPrivileges(VOID)
{
HANDLE hToken;
TOKEN_PRIVILEGES stTokenPrivilege;
// 取得当前进程的[Token](标识)句柄,(TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY) == 0x0028
if(!OpenProcessToken(GetCurrentProcess(), 0x0028, &hToken))
{
MyErrExit("OpenProcessToken");
}
// 取得关闭系统的[LUID](本地唯一的标识符)值
if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &stTokenPrivilege.Privileges[0].Luid))
{
MyErrExit("LookupPrivilegeValue");
}
// 设置特权数组的元素个数
stTokenPrivilege.PrivilegeCount = 1;
// 设置[LUID]的属性值
stTokenPrivilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 为当前进程取得关闭系统的特权
if(!AdjustTokenPrivileges(hToken, FALSE, &stTokenPrivilege, 0, NULL, NULL))
{
MyErrExit("AdjustTokenPrivileges");
}
if(hToken != NULL)
{
CloseHandle(hToken);
}
return;
}
为何改成ASM版的,却编译不了
错误如下:
..\MyProc.asm(10) : error A2006: undefined symbol : OpenProcessToken
..\MyProc.asm(12) : error A2006: undefined symbol : LookupPrivilegeValue
..\MyProc.asm(18) : error A2006: undefined symbol : AdjustTokenPrivileges
.code
;函数作用:为当前进程取得系统特权的函数
MyGetPrivileges proc
LOCAL hToken:DWORD
LOCAL stTokenPrivilege:TOKEN_PRIVILEGES
;取得当前进程的 Token 标识 句柄
invoke GetCurrentProcess
invoke OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hToken
;取得关闭系统的 LUID 本地唯一的标识符 值
invoke LookupPrivilegeValue,NULL,SE_SHUTDOWN_NAME,addr stTokenPrivilege.Privileges[0].Luid
;设置特权数组的元素个数
mov stTokenPrivilege.PrivilegeCount,1
;设置[LUID]的属性值
mov stTokenPrivilege.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
;为当前进程取得关闭系统的特权
invoke AdjustTokenPrivileges,hToken,FALSE,addr stTokenPrivilege,0,NULL,NULL
invoke CloseHandle,hToken
ret
MyGetPrivileges endp
请大侠们帮帮我!!!
[培训]《安卓高级研修班(网课)》月薪三万计划,掌
握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法