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 。