找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5684|回复: 3

简单的过Unlocker1.8.9的方法和自己的解决对策

  [复制链接]
头像被屏蔽

3

主题

35

回帖

3

精华

铂金会员

积分
4902
发表于 2012-1-19 22:52:39 | 显示全部楼层 |阅读模式
一般在Ring3下面强占一个文件只要
HANDLE hFile = CreateFile(L"XXX.XXX", GENERIC_READ, FILE_SHARE_READ,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); 并且不关闭句柄即可,用Unlocker可以轻松解锁这样的句柄,并且删除
不过如果设置了句柄的属性,情况就不一样了
SetHandleInformation(hFile, HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
把句柄的属性设置成保护的句柄,Unlocker就无法解锁了,
我自己研究了个方法对付这种顽固句柄,
思路是去掉这个保护的属性,然后关闭句柄即可
typedef struct _OBJECT_HANDLE_FLAG_INFORMATION
{
BOOLEAN Inherit;
BOOLEAN ProtectFromClose;
}OBJECT_HANDLE_FLAG_INFORMATION, *POBJECT_HANDLE_FLAG_INFORMATION;
设置这个结构的属性
   pHandleFlags->Inherit = 0;
   pHandleFlags->ProtectFromClose = 0; // 把保护属性去掉
然后调用一个导出的标准API即可
ObSetHandleAttributes(Handle, pHandleFlags, KernelMode);
最后用ZwClose(Handle);
把这个句柄关闭了,就完成了解锁的过程
(, 下载次数: 1)
补充一句:在驱动里关闭其它进程里的句柄,需要先依附到那个进程的进程空间。


完整的代码:
  1. POBJECT_HANDLE_FLAG_INFORMATION pHandleFlags;
  2. pHandleFlags =  ExAllocatePool(NonPagedPool, sizeof(OBJECT_HANDLE_FLAG_INFORMATION));
  3. pHandleFlags->Inherit = 0;
  4. pHandleFlags->ProtectFromClose = 0;
  5. __try
  6. {               
  7.    KeAttachProcess(EPROCESS);
  8.     status = ObSetHandleAttributes((HANDLE)(paramater->Handle), pHandleFlags, KernelMode);
  9.     if ( NT_SUCCESS(status) )
  10.     {
  11.         status = ZwClose((HANDLE)(paramater->Handle));
  12.     }
  13.     KeDetachProcess();
  14. }
  15. __except(EXCEPTION_EXECUTE_HANDLER)
  16. {
  17.     KdPrint(("[kEvP] CloseHandle Exception!"));
  18. }
复制代码

71

主题

350

回帖

2

精华

钻石会员

积分
4123
发表于 2012-1-21 13:51:25 | 显示全部楼层
本帖最后由 yxd199512041 于 2012-1-21 17:25 编辑

要是有1.9的解锁就好了

9

主题

117

回帖

0

精华

银牌会员

积分
422
发表于 2012-1-24 14:28:43 | 显示全部楼层
{:soso_e142:}学习收藏!!!!

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-9 22:19:41 | 显示全部楼层
學習學習!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表