rtladjustprivilege() 這玩意是在 ntdll.dll 裡的乙個不為人知的函式,ms沒有公開,原因就是這玩意實在是太nb了,以至於不需要任何其他函式的幫助,僅憑這乙個函式就可以獲得程序acl的任意許可權!
先來看看這個函式的定義(winehq給出):
ntstatus rtladjustprivilege
(ulong privilege,
boolean enable,
boolean currentthread,
pboolean enabled
)引數的含義:
privilege [in] privilege index to change.
// 所需要的許可權名稱,可以到 msdn 查詢關於 process token & privilege 內容可以查到
enable [in] if true, then enable the privilege otherwise disable.
// 如果為true 就是開啟相應許可權,如果為false 則是關閉相應許可權
currentthread [in] if true, then enable in calling thread, otherwise process.
// 如果為true 則僅提公升當前執行緒許可權,否則提公升整個程序的許可權
enabled [out] whether privilege was previously enabled or disabled.
// 輸出原來相應許可權的狀態(開啟 | 關閉), 注意:該引數賦予空指標會出錯,我測試過。
附上 delphi 定義和例子,我測試過的:
function rtladjustprivilege(privilege:ulong;
enable:bool;
currentthread:bool;
var enabled:bool):dword; stdcall; external 'ntdll';
const
se_backup_privilege = $11;
se_restore_privilege = $12;
se_shutdown_privilege = $13; //關機許可權
se_debug_privilege = $14; //除錯許可權
delphi 呼叫例子:
varenabled:bool;
begin
if rtladjustprivilege(se_debug_privilege,true,false,enabled)) = 0 then
showmessage('ok');
end;
瞬間關機**vc
#include
const unsigned int se_shutdown_privilege = 0x13;
int main()
nresult = zwshutdownsystem(2);
freelibrary(hdll);
return 0;
如果是c++ 需要主要呼叫約定問題 函式本身是c呼叫方式 c++是標準呼叫方式 所以在申明函式的時候要加上_stdcall
typedef int (_stdcall *axi)(int, bool, bool, int*);typedef int (_stdcall * type_rtladjustprivilege)(int, bool, bool, int*);
關於返回值也需要特別說明下: 實驗了下 提權成功了 但是返回值還是null 如果這個時候驗證返回值將不準確了 所以成功與否還是只能看後邊的開啟程序是否成功
提權函式之RtlAdjustPrivilege
提權函式之rtladjustprivilege rtladjustprivilege 這玩意是在 ntdll.dll 裡的乙個不為人知的函式,ms沒有公開,原因就是這玩意實在是太nb了,以至於不需要任何其他函式的幫助,僅憑這乙個函式就可以獲得程序acl的任意許可權 下面是函式定義 12 3 4 5 ...
提權函式之RtlAdjustPrivilege
ulong privilege,boolean enable,boolean currentthread,pboolean enabled 引數的含義 privilege in privilege index to change.所需要的許可權名稱,可以到msdn查詢關於process token ...
授權函式 web set user
為web伺服器指定登入字串。當我們使用rns伺服器或者某些伺服器的時候需要我們輸入賬號密碼登入才能給進行訪問,那麼這個時候就需要用到該函式 int web set user const char username,const char password,const char host port 引數...