吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3691|回复: 22
收起左侧

[原创] 句柄降权

  [复制链接]
Panel 发表于 2023-4-7 21:17
本帖最后由 Panel 于 2023-4-7 22:21 编辑

句柄降权保护自己

概述:

通过句柄降权保护自己的内存

实验环境:

Windows7 x86 ,Windbg

前置条件:

必须要先看这篇文章https://www.52pojie.cn/thread-1770541-1-1.html,不看的话以下内容基本上是看不懂的

原理讲解:

私有句柄表中的值总共64bit位,高32bit位代表句柄拥有者对句柄对象的操作权限,低32bit位与运算上0xF是句柄对应的对象在内核中的地址,之所以与运算0xF是因为低32bit位中的最后3bit位为对象的三个属性。

速战速决:

根据上面所说的原理我们通过举例一个句柄值来操作便知道具体操作了,加入现在有个私有句柄表中的句柄值为000000039f026cc1`,那么此时00000003便是句柄拥有者的权限,权限有以下几种:
#define PROCESS_TERMINATE                  (0x0001)  
#define PROCESS_CREATE_THREAD              (0x0002)  
#define PROCESS_SET_SESSIONID              (0x0004)  
#define PROCESS_VM_OPERATION               (0x0008)  
#define PROCESS_VM_READ                    (0x0010)  
#define PROCESS_VM_WRITE                   (0x0020)  
#define PROCESS_DUP_HANDLE                 (0x0040)  
#define PROCESS_CREATE_PROCESS             (0x0080)  
#define PROCESS_SET_QUOTA                  (0x0100)  
#define PROCESS_SET_INFORMATION            (0x0200)  
#define PROCESS_QUERY_INFORMATION          (0x0400)  
#define PROCESS_SUSPEND_RESUME             (0x0800)  
#define PROCESS_QUERY_LIMITED_INFORMATION  (0x1000)  
#define PROCESS_SET_LIMITED_INFORMATION    (0x2000)  
#if (NTDDI_VERSION >= NTDDI_VISTA)
#define PROCESS_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \0xFFFF)
当我们通过OpenProcess以多种权限申请打开进程时便将多种权限或运算就得到了我们想要的权限值,我们的目的是为了降低句柄拥有者对我们要保护的进程的操作权限,那最简单暴力的方法便是把高32bit位置0,直接让句柄拥有者对我们的进程失去所有权限。依然按照昨天必读那篇文章的保护进程123.exe来说,我们只需要在原判断成功123.exe进程对象句柄在其他进程里的时候把对应的句柄值的高32bit位置0就实现了,更改后的代码如下:
        count_2 = count_2 - 1;
        ULONG64 pTmpTableValue = 0;
        ULONG uHight32 = 0;
        ULONG uLow32 = 0;
        UCHAR uType = 0;
        PUCHAR pProcessName = NULL;
        ULONG uFindNum = 0;
        PULONG pTableAddr = 0;
        int iClearNum = 0;
        for (int i = 0; i < count_2-1; i++)
        {
                for (int j = 0; j < 512; j++)
                {
                        if (pOneTableCode[i] == 0)
                        {
                                break;
                        }
                        pTableAddr = ((PUCHAR)pOneTableCode[i] + j * 8);
                        pTmpTableValue = *((PULONG64)(pTableAddr));
                        uHight32 = pTmpTableValue >> 32;
                        uLow32 = pTmpTableValue & 0x00000000ffffffff;
                        uLow32 = uLow32 & 0xFFFFFFF8;
                        if (uLow32 != 0 && uLow32>0x80000000)
                        {

                                uType = *(PUCHAR)((PUCHAR)uLow32 + 0xc);
                                if (uType == 0x7)
                                {
                                        pProcessName = (PUCHAR)((PUCHAR)uLow32 + 0x18 + 0x16c);
                                        if (strcmp(pProcessName, "123.exe") == 0)
                                        {
                                                //高32bit位写为0
                                                RtlCopyMemory(pTableAddr, &iClearNum, 4);
                                                openflag++;
                                        }
                                        DbgPrintEx(77, 0, "[db][exeinfor]:Processname:%s\n", pProcessName);
                                }

                        }
                        uFindNum++;
                }
        }

结果:

因为123.exe的句柄拥有者有CE调试器,所以如果我们保护成功了的话,CE是无法正常访问123.exe的进程数据的,所以看图

Snipaste_2023-04-07_21-24-37.png

image-20230407211343903.png

结论:

句柄降权暴力有效,但是任然能被化解,攻防就像矛盾!

免费评分

参与人数 9吾爱币 +13 热心值 +6 收起 理由
smile1110 + 1 6
笙若 + 1 + 1 谢谢@Thanks!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
swansfight + 1 我很赞同!
Spacecraft + 1 我很赞同!
laosi520 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
GS9452 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
lpzly + 1 + 1 谢谢@Thanks!
成熟的美羊羊 + 1 + 1 学到了,学到了。

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Panel 发表于 2023-4-8 16:23
smile1110 发表于 2023-4-8 16:02
@Panel  降权在今天还是不大行,尤其是海拔降权,因为tp adguard   随机时间扫函数参数,这种技术严格意义 ...

是的,主要是谈及这种对抗思想
 楼主| Panel 发表于 2023-4-8 16:30
smile1110 发表于 2023-4-8 16:02
@Panel  降权在今天还是不大行,尤其是海拔降权,因为tp adguard   随机时间扫函数参数,这种技术严格意义 ...

其实最影响这个应用的还是断链隐藏句柄表
smile1110 发表于 2023-4-8 16:02
@Panel  降权在今天还是不大行,尤其是海拔降权,因为tp adguard   随机时间扫函数参数,这种技术严格意义上说已经失效了
sunzhw 发表于 2023-4-7 22:52
牛,支持一下,非常厉害
xy0225 发表于 2023-4-8 00:00
太厉害了,学习了
labixiaoxing 发表于 2023-4-8 08:52
句柄降权感觉好高级
zhb8616246 发表于 2023-4-8 08:59
学习一下,感觉有点蒙降权
 楼主| Panel 发表于 2023-4-8 11:42
zhb8616246 发表于 2023-4-8 08:59
学习一下,感觉有点蒙降权

简单理解就是,原本A进程有B进程的读写权限,我们通过句柄降权就是把A对B的读写权限去了
lwgcqh111 发表于 2023-4-8 13:47

牛,支持一下,非常厉害
daniel7785 发表于 2023-4-8 14:27

学习一下
中原一点红 发表于 2023-4-8 15:19
过来看看
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 19:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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