登錄檔是windows系統十分關鍵的部分,通過設定登錄檔專案,可以很好的配置優化計算機,當然也可以給計算機帶來無法想象的災難,我們來看一段關於登錄檔唯讀設定的**……
最近看wrk,發現登錄檔操作類函式都有類似下面的**段:
if (mode == usermode) else else
obdereferenceobject((pvoid)keybody); } }
其中cmiskcbreadonly是實現保護的關鍵。定義如下:
#define cmiskcbreadonly(kcb) ((kcb)->extflags & cm_kcb_read_only_key)
#define cm_kcb_read_only_key 0x0080 // this kcb is read-only all write operations onto it are denied.
很簡單吧,看來實現保護只需要設定一下keycontrolblock裡的extflags就可以了。在win2003下keycontrolblock型別定義如下:
lkd> dt _cm_key_control_block
+0x000 refcount : uint4b
+0x004 extflags : pos 0, 8 bits // 設定這裡
+0x004 privatealloc : pos 8, 1 bit
+0x004 delete : pos 9, 1 bit
+0x004 delayedcloseindex : pos 10, 12 bits
+0x004 totallevels : pos 22, 10 bits
+0x008 keyhash : _cm_key_hash
+0x008 convkey : uint4b
+0x00c nexthash : ptr32 _cm_key_hash
+0x010 keyhive : ptr32 _hhive
+0x014 keycell : uint4b
+0x018 parentkcb : ptr32 _cm_key_control_block
+0x01c nameblock : ptr32 _cm_name_control_block
+0x020 cachedsecurity : ptr32 _cm_key_security_cache
+0x024 valuecache : _cached_child_list
+0x02c indexhint : ptr32 _cm_index_hint_block
+0x02c hashkey : uint4b
+0x02c subkeycount : uint4b
+0x030 keybodylisthead : _list_entry
+0x030 freelistentry : _list_entry
+0x038 keybodyarray : [4] ptr32 _cm_key_body
+0x048 delaycloseentry : ptr32 void
+0x050 kcblastwritetime : _large_integer
+0x058 kcbmaxnamelen : uint2b
+0x05a kcbmaxvaluenamelen : uint2b
+0x05c kcbmaxvaluedatalen : uint4b
+0x060 kcbuserflags : pos 0, 4 bits
+0x060 kcbvirtcontrolflags : pos 4, 4 bits
+0x060 kcbdebug : pos 8, 8 bits
+0x060 flags : pos 16, 16 bits
實現的**片段如下:
#pragma pack(1)
typedef struct _cm_key_body cm_key_body, *pcm_key_body;
#pragma pack()
ntstatus driverentry(in pdriver_object driverobject, in punicode_string registrypath)
keycontrolblock = keybody->keycontrolblock;
// // try to protect the key
// *(pulong)((ulong)keycontrolblock + 0x4) |= 0x0080; // 0x14
obdereferenceobject(keybody);
zwclose(hkey);
return status_success; }
最後很掃興的說,這種方法不適用於window2000
AHK 簡單實現的登錄檔定位指令碼
noenv sendmode input notrayicon singleinstance ignore inputbox newlastkey,登錄檔自動定位工具,請輸入要定位到的路徑,800 120 if errorlevel 1 ifwinexist 登錄檔編輯器 ahk class reg...
一種登錄檔沙箱的思路 實現
在作業系統中,我們對乙個物件 檔案 登錄檔鍵等 的操作存在 建立 開啟 關閉 修改 刪除 和 查詢 等。這些操作的源便是那個物件,重定向 思路就是針對這個物件 作手腳 說得通俗點,就是通過 狸貓換太子 的方式達到欺騙上層的目的。以後有什麼操作,我們便是對這個 狸貓 去作,從而達到保護 太子 的目的。...
使用登錄檔實現開機自啟動的注意點
使用登錄檔項實現開機自啟動時,需要在值後面加個空格1。d download feiq.exe 1 值需要用雙引號引起來防止路徑中有空格導致的錯誤。hkey local machine用於計算機上的所有使用者。hkey current user適用當前登入的使用者。hkey local machine...