閱讀938 返回首頁    go 阿裏雲 go 技術社區[雲棲]


[原創]Unlocker加強版技術特征

                                                                 Unlocker加強版技術特征
 

 1. 解鎖已打開文件;
 2.建立以特定用戶身份的shell。

上一個版本的概述在:原創]C# 與 匯編 的一次親密接觸。

 1.采取了和 regmon & filemon 類似的方法,將 dll 等模塊嵌入到主PE中,
 使之成為真正的 "綠色" 工具。

 2.因為gcc沒有naked函數的功能(雖然有naked選項,但是生成不了naked函數
 如果哪位知道是什麼問題,請不吝指出,多謝。),所以用匯編寫了一個
 靜態庫進行連接。之所以要采用naked函數是想實現不定參數的跨函數傳遞,
 比如:

        void myprintf(const char *ft,...)
        {
      printf(ft,?????);//wrong!
        }


 而在匯編或vc中這個比較好辦,我們設計一個"透明"的跳板,好像從myprintf
 直接跳轉到printf一樣:

 _MsgShow_Console proc
   jmp printf
  _MsgShow_Console endp

 

void myprintf_msgbox(const char *ft,...)
        {
     char buf[BUFSIZ]={0};
     sprintf(buf,ft,?????);//wrong!
     MessageBox(NULL,buf,"message",MB_OK);
        }


 這時不能直接做跳轉,必須手動寫參數處理,就像偶以前在匯編區回答過一位
 VC仁兄的問題 <如何處理函數的不定參數> 一樣:

 _MsgShow_Win32  proc
   push ebp  ;save ebp is very important
   mov eax,[esp+4] ;temp return address
   lea ebp,[esp+4]
   sub esp,0100h ;create tmp buf (0x100 bytes)
   mov esi,esp  ;save tmp buf address
   add eax,2
   movzx ecx,byte ptr [eax]
   shr ecx,2  ;get parms number total size / size(dword)
   mov ebx,esp  ;save esp
   .while ecx > 0h
    mov eax,[ebp + ecx*4]
    push eax
    dec ecx
   .endw
   push esi
   call sprintf
   invoke MessageBoxA,0,ebx,addr cp,0
   lea esp,[ebp-4]
   pop ebp  ;restore ebp
   ret
  _MsgShow_Win32  endp


 

#ifdef _DRV_DEBUG_
  
   #if defined(_DRV_CONSOLE_)
    #define MsgShow(...) _MsgShow_Console(__VA_ARGS__)
   #elif defined(_DRV_WIN32_)
    #define MsgShow(...) _MsgShow_Win32(__VA_ARGS__)
   #elif defined(_DRV_CORE_)
    #define MsgShow(...) _MsgShow_Core(__VA_ARGS__)
   #else
    #error : Must Choose One From 3 Show Model.
   #endif
 
  #else
   #define MsgShow(...) ((void)0)
  #endif

 

  _MsgShow_Core  proc 
   jmp DbgPrint
  _MsgShow_Core  endp

3.在unlocker中加入了建立用戶shell的功能,方便測試。比如可以方便的生成本地最高
 權限SYSTEM用戶的shell,以及其他任何管理員和用戶的shell;可以在當前是user級別
 用戶的環境下直接產生Administrator級別用戶的shell。

4.增加了 關閉核心句柄 的功能。使之在NT下可以關閉像 PageFile.sys 這樣核心文件對
 象的句柄。但對一些關鍵核心文件對象,比如 SAM 文件來說,如果將其關閉馬上會造成
 係統藍屏。所以請在虛擬機下嚐試,否則後果自負哦。

 

5.分別在 Windows 2000 sp4、Windows XP sp2、Windows 2003 sp1 下做了兼容性測試,發
 現幾處需要調整的地方:

  a.windows 2000 中沒有 GetProcessImageFileName 函數,所以將原來的 API
  換成 GetModuleFileNameEx;

  b.windows 2000 中沒有 NtCreateProcessEx 這個 API ,所以將原來的
  _CreateSystemShell分為2個版本;

  c.windows 2003 對內存屬性的檢查更加嚴格,故而從原來的
  PAGE_READWRITE 變成 PAGE_EXECUTE_READWRITE,否則在2003下程序崩潰。
 
 因為條件有限,沒有在 windows NT 4.0 上做測試,如果哪位可以幫忙測試一下,就十分
 感謝啦. :)

 7.加強了對 是否真正關閉 的檢查功能,不像以前隻是給出一個"模煳"的結果。並且更具
 不同的結果以不同的顏色更加顯目的呈現給用戶。

 

unlocker EX 下載連接: https://download.csdn.net/source/433389 歡迎測試,請多多指出bug 。

最後更新:2017-04-02 00:06:29

  上一篇:go 關於靜態方法
  下一篇:go yahoo 的 C# 筆試題