首页
社区
课程
招聘
[原创]x64 Kernel 获取Ntos Base(无API非ASM)
发表于: 2021-4-16 11:33 10026

[原创]x64 Kernel 获取Ntos Base(无API非ASM)

2021-4-16 11:33
10026

参考自单总发的帖子 : 帖子传送门 作者: @xiaofu

原理如上贴

优点:
用代码写 方便维护(?)
不用添加一个.asm文件 (一个算不上优点的优点)

缺点:
体积不够小

上代码:

用处:拿到nto_base以后可以自己检索导出表,获取函数地址,全程均无API调用(防止被人挂钩导入表 黑盒分析) 等...

如果写错了 或者 觉得哪里写的不好 望指正~

 
 
 
 
uintptr_t get_ntos_base()
 
{
 
    auto Idt_base = reinterpret_cast<uintptr_t>(KeGetPcr()->IdtBase);
 
    auto align_page = *reinterpret_cast<uintptr_t*>(Idt_base + 4) >> 0xc << 0xc;
 
    for (; align_page; align_page -= PAGE_SIZE)
 
    {
 
        for (int index = 0; index < PAGE_SIZE - 0x7; index++)
 
        {
 
            auto current_address = static_cast<intptr_t>(align_page) + index;
 
            if (*reinterpret_cast<uint8_t*>(current_address) == 0x48
 
                && *reinterpret_cast<uint8_t*>(current_address + 1) == 0x8D
 
                && *reinterpret_cast<uint8_t*>(current_address + 2) == 0x1D
 
                && *reinterpret_cast<uint8_t*>(current_address + 6) == 0xFF)//48 8d 1D ?? ?? ?? FF
 
            {
 
                auto nto_base_offset = *reinterpret_cast<int*>(current_address + 3);
 
                auto nto_base_ = (current_address + nto_base_offset + 7);
 
                if (!(nto_base_ & 0xfff))
 
                {
 
                    return nto_base_;
 
                }
 
            }
 
        }
 
    }
 
    return 0;
 
}
uintptr_t get_ntos_base()
 
{
 
    auto Idt_base = reinterpret_cast<uintptr_t>(KeGetPcr()->IdtBase);
 
    auto align_page = *reinterpret_cast<uintptr_t*>(Idt_base + 4) >> 0xc << 0xc;
 
    for (; align_page; align_page -= PAGE_SIZE)
 
    {
 
        for (int index = 0; index < PAGE_SIZE - 0x7; index++)
 
        {
 
            auto current_address = static_cast<intptr_t>(align_page) + index;
 
            if (*reinterpret_cast<uint8_t*>(current_address) == 0x48

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-4-16 11:55 被淡然他徒弟编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (6)
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
2
配合spoof call,无解
2021-4-16 14:15
0
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
3
xiaofu 配合spoof call,无解

偶像回复了  单总奥利给

最后于 2021-4-16 16:09 被淡然他徒弟编辑 ,原因:
2021-4-16 16:08
0
雪    币: 1634
活跃值: (3517)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
win7 x64直接挂掉
2021-4-20 22:12
0
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
5
tmflxw win7 x64直接挂掉

我测试是没问题的哈~


蓝屏建议你把dump发上来 或者 检查自己的代码


或者自己双机调试确定问题~

最后于 2021-4-21 04:15 被淡然他徒弟编辑 ,原因:
2021-4-21 04:13
0
雪    币: 32
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
Win10上会有问题 ntoskrnl.exe区域会存在无效内存
2021-4-26 20:59
0
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
7
WindBlow小迪 Win10上会有问题 ntoskrnl.exe区域会存在无效内存
如果有问题 请提供你的dump哦~

win7 win10我都测试过了 正常情况下 都没有问题~

非正常情况 我暂时没遇到过~
2021-4-27 02:07
0
游客
登录 | 注册 方可回帖
返回
//