注册
登录
论坛
搜索
插件
默认风格
默认风格_6hOY
D Dark
greenwall
jeans
fashion
私人消息 (0)
公共消息 (0)
论坛任务 (0)
系统消息 (0)
好友消息 (0)
帖子消息 (0)
【3.A.S.T】网络安全爱好者
»
技术交流
» [讨论] 关于EXHANDLE的结构的几个疑问 [已解决]
返回列表
发帖
s37su37
发短消息
加为好友
s37su37
当前离线
UID
1224
帖子
251
精华
0
积分
667
威望
1075
金钱
829
阅读权限
70
在线时间
2 小时
注册时间
2008-7-16
最后登录
2009-2-13
3.A.S.T少校
帖子
251
积分
667
威望
1075
金钱
829
在线时间
2 小时
1
楼
跳转到
»
正序看帖
打印
字体大小:
t
T
发表于 2008-7-24 17:25
|
只看该作者
[讨论] 关于EXHANDLE的结构的几个疑问 [已解决]
EXHANDLE
,
疑问
,
结构
,
解决
,
讨论
[讨论] 关于EXHANDLE的结构的几个疑问 [已解决]
文章作者:sudami
信息来源:邪恶八进制信息安全团队(
www.eviloctal.com
)
google了很久,还是没有理解清楚。所以发帖问下--
关于EXHANDLE的结构,XP SP2 和 W2K的结构是一样的不?怎么Windbg弄不出来呢?WRK也没得查啊。
WRK中的 ExpLookupHandleTableEntry 函数代码有个地方
引用:
EXHANDLE Handle;
Handle.Value ...
是不是W2K的EXHANDLE结构体中还多个参数Value啊?
下面这个EXHANDLE是不是XP下的呢?
复制内容到剪贴板
代码:
typedef struct _EXHANDLE {
union {
struct {
ULONG TagBits : 2;
ULONG Index : 30;
};
HANDLE GenericHandleOverlay;
};
} EXHANDLE, *PEXHANDLE;
句柄的值本身是个三层表的3个索引。简略的可以描述成下面这样的:
复制内容到剪贴板
代码:
ExpLookupHandleTableEntry (
IN PHANDLE_TABLE HandleTable,
IN EXHANDLE Handle
)
{
ULONG i,j,k,l;
l = (Handle.Index >> 24) & 255;
i = (Handle.Index >> 16) & 255;
j = (Handle.Index >> 8) & 255;
k = (Handle.Index) & 255;
return &(HandleTable->Table
[j][k]);
}
GenericHandleOverlay保存传进来的进程ID
而EXHANDLE.Index = (GenericHandleOverlay/4) & 0x3FFFFFFF;
就是ID除4得到的值的后30位。
偶这样理解对不?
Index |_6_|__8_|__8_|__8_|
i j k
索引 0 1 2
下面的是WRK中关于 ExpLookupHandleTableEntry 的源码,偶看的很糊涂啊。有木有对这个函数理解很透彻的,还忘指点下子~~
复制内容到剪贴板
代码:
PHANDLE_TABLE_ENTRY
ExpLookupHandleTableEntry (
IN PHANDLE_TABLE HandleTable,
IN EXHANDLE tHandle
)
{
ULONG_PTR i,j,k;
ULONG_PTR CapturedTable;
ULONG TableLevel;
PHANDLE_TABLE_ENTRY Entry = NULL;
EXHANDLE Handle;
PUCHAR TableLevel1;
PUCHAR TableLevel2;
PUCHAR TableLevel3;
ULONG_PTR MaxHandle;
PAGED_CODE();
Handle = tHandle;
Handle.TagBits = 0;
// nt!_HANDLE_TABLE +0x038 NextHandleNeedingPool : Uint4B
MaxHandle = *(volatile ULONG *) &HandleTable->NextHandleNeedingPool;
if (Handle.Value >= MaxHandle) {
return NULL;
}
CapturedTable = *(volatile ULONG_PTR *) &HandleTable->TableCode;
TableLevel = (ULONG)(CapturedTable & LEVEL_CODE_MASK);
CapturedTable = CapturedTable - TableLevel;
switch (TableLevel) {
case 0:
TableLevel1 = (PUCHAR) CapturedTable;
Entry = (PHANDLE_TABLE_ENTRY) &TableLevel1[Handle.Value *
(sizeof (HANDLE_TABLE_ENTRY) / HANDLE_VALUE_INC)];
break;
case 1:
TableLevel2 = (PUCHAR) CapturedTable;
i = Handle.Value % (LOWLEVEL_COUNT * HANDLE_VALUE_INC);
Handle.Value -= i;
j = Handle.Value / ((LOWLEVEL_COUNT * HANDLE_VALUE_INC) / sizeof (PHANDLE_TABLE_ENTRY));
TableLevel1 = (PUCHAR) *(PHANDLE_TABLE_ENTRY *) &TableLevel2[j];
Entry = (PHANDLE_TABLE_ENTRY) &TableLevel1[i * (sizeof (HANDLE_TABLE_ENTRY) / HANDLE_VALUE_INC)];
break;
case 2:
TableLevel3 = (PUCHAR) CapturedTable;
i = Handle.Value % (LOWLEVEL_COUNT * HANDLE_VALUE_INC);
Handle.Value -= i;
k = Handle.Value / ((LOWLEVEL_COUNT * HANDLE_VALUE_INC) / sizeof (PHANDLE_TABLE_ENTRY));
j = k % (MIDLEVEL_COUNT * sizeof (PHANDLE_TABLE_ENTRY));
k -= j;
k /= MIDLEVEL_COUNT;
TableLevel2 = (PUCHAR) *(PHANDLE_TABLE_ENTRY *) &TableLevel3[k];
TableLevel1 = (PUCHAR) *(PHANDLE_TABLE_ENTRY *) &TableLevel2[j];
Entry = (PHANDLE_TABLE_ENTRY) &TableLevel1[i * (sizeof (HANDLE_TABLE_ENTRY) / HANDLE_VALUE_INC)];
break;
default :
_assume (0);
}
return Entry;
}WINDOWS内核疯狂爱好者
帖子242 精华
6
积分5536 阅读权限150 性别男 在线时间1113 小时 注册时间2007-1-10 最后登录2008-7-23
查看个人网站
查看详细资料
TOP
良辰择日,预测咨询,公司改名,权威易经
sudami
大米米
运维管理组
收藏
分享
qxkmay
发短消息
加为好友
qxkmay
当前离线
UID
807
帖子
10
精华
0
积分
15
威望
20
金钱
20
阅读权限
10
在线时间
0 小时
注册时间
2008-7-16
最后登录
2008-8-2
3.A.S.T士兵
帖子
10
积分
15
威望
20
金钱
20
在线时间
0 小时
2
楼
发表于 2008-7-24 17:25
|
只看该作者
原来还真多了个value~~~~
typedef struct _EXHANDLE
{
union
{
struct
{
ULONG TagBits:2;
ULONG Index:30;
};
HANDLE GenericHandleOverlay;
ULONG_PTR Value;
};
} EXHANDLE, *PEXHANDLE;
fuck一下
WINDOWS内核疯狂爱好者
帖子242 精华
6
积分5536 阅读权限150 性别男 在线时间1113 小时 注册时间2007-1-10 最后登录2008-7-23
查看个人网站
查看详细资料
TOP
爱要怎么说出口
evilsir
gz1X
TOP
返回列表
【 新 手 入 门 】
初入江湖
有问必答
软件交流
程序设计
黑客播报
操作系统
Windows专区
Unix 专区
【 技 术 交 流 】
原创专区
QQ技巧
反黑知识
网站建设
教程发布
技术交流
免杀技术
0day发布
专题归类
私服技术
【 论 坛 水 区 】
被黑站点
激情灌水
极品贴图
开心乐园
影音专区
广告专区
【 论 坛 管 理 】
新人报到
论坛管理
勋章申请
[收藏此主题]
[关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]
全国地图
@@@ 加入本站会员 一个月月赚1200+的秘密@@@
@@@ 加入本站会员 一个月月赚1200+的秘密@@@