首页
社区
课程
招聘
[求助]X64找SSDT疑惑(结贴吧)
发表于: 2012-2-17 15:05 5766

[求助]X64找SSDT疑惑(结贴吧)

2012-2-17 15:05
5766
ULONGLONG GetKeServiceDescriptorTable64()
{
//Pattern
char KiSystemServiceStart_pattern[14] = "\x8B\xF8\xC1\xEF\x07\x83\xE7\x20\x25\xFF\x0F\x00\x00";

//Scan boundaries
×××××××××××××××××××××××××不明白×××××××
ULONGLONG CodeScanStart = (ULONGLONG)&_strnicmp;
ULONGLONG CodeScanEnd = (ULONGLONG)&KdDebuggerNotPresent;
×××××××××××××××××××××××××不明白×××××××

//Another needed variables
UNICODE_STRING Symbol;
ULONGLONG i, tbl_address, b;

//Loop - to find the KiSystemServiceStart function
for (i = 0; i < CodeScanEnd - CodeScanStart; i++)
{
//Check if those bytes are equal to our pattern-bytes
if (!memcmp((char*)(ULONGLONG)CodeScanStart +i, (char*)KiSystemServiceStart_pattern,14))
{
//Search lea rdx, * - by opcodes: 4c 8d
for (b = 0; b < 50; b++)
{
tbl_address = ((ULONGLONG)CodeScanStart+i+b);

//Check for lea rdx, * and calculate base address from relative address

if (*(USHORT*) ((ULONGLONG)tbl_address ) == (USHORT)0x8d4c)
return ((LONGLONG)tbl_address +7) + *(LONG*)(tbl_address +3);
}
}
}

搜索的范围为什么是×号代码处的地方?求解释.谢谢了。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 256
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有人回答?也没有人顶?没搞错吧。
2012-2-20 09:42
0
雪    币: 420
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可能是根据调试结果来定的,发现ssdt正好位于这个上下限范围内
2012-2-20 10:08
0
雪    币: 256
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那我们写代码就直接拿来用了?不要管为什么来的吗?
2012-2-20 15:41
0
雪    币: 420
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那当然不是了,代码只是实现预定目的的工具而已,在写程序之前我们需要对目标系统有一个系统的调查过程,
调试就是经常会做的一件事
2012-2-20 17:38
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你IDA看下ntoskrnl.exe从strnicmp开始搜索,搜索到KdDebuggerNotPresent。比较内容为KiSystemServiceStart_pattern。这种编码搜索方式,你还不如硬编码干脆
2012-2-20 22:20
0
雪    币: 256
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢!我了解了。
2012-2-22 14:49
0
雪    币: 256
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我尝试去看看啊,谢谢了啊
2012-2-22 14:49
0
游客
登录 | 注册 方可回帖
返回
//