[原创]Unlocker加强版技术特征-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

[原创]Unlocker加强版技术特征

简介:

                                                                 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


 然后在gcc中只要按需求定义宏,就可以实现完全自动的DEBUG输出了:

#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

对于内核中的 "printf" 函数我们同样有: 

  _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 上做测试,如果哪位可以帮忙测试一下,就十分
 感谢啦. :)

 6.增加了 强力查找 功能,可以模糊匹配更多关键字;

 7.加强了对 是否真正关闭 的检查功能,不像以前只是给出一个"模糊"的结果。并且更具
 不同的结果以不同的颜色更加显目的呈现给用户。

 

8.修正了一个有符号数的关系 BUG 。

 (未完待续)

unlocker EX 下载连接: http://download.csdn.net/source/433389 欢迎测试,请多多指出bug 。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章