挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运寻找会做《单机》游戏修改器的开发作者长期合作,价格不是问题!联系QQ:1874088565
IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██.
.. .
查看: 4304|回复: 5
打印 上一主题 下一主题

[辅助源码分享] 解决TP在X64内核级别对调试对象做的手脚

[复制链接]

23

积分

3

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
20
海币
0
交易币
0
跳转到指定楼层
楼主
发表于 2016-4-4 15:47:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


#include "ntddk.h"
#define DELAY_ONE_MICROSECOND (-10)
#define DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND*1000)

KTIMER PassObjTimer;
KDPC PassObjDpc;
LARGE_INTEGER PassObjTime;

ULONGLONG ValIDAccessmask;

typedef struct _SYSTEM_SERVICE_TABLE
{
         PVOID ServiceTableBase;
         PVOID ServiceCounterTableBase;
         ULONGLONG NumberOfServices;
         PVOID ParamTableBase;
}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE;

ULONGLONG MyGetKeServiceDescriptorTable64 ()
{

    //LARGE_INTEGER    addr;
    __asm
    {
       // mov         ecx, 0xC0000082;
        //rdmsr  
       // mov         addr.LowPart,eax  
        //mov         addr.HighPart,edx  
    }

         PUCHAR StartSearchAddress = (PUCHAR)__readmsr(0xC0000082);

         PUCHAR EndSearchAddress = StartSearchAddress+ 500;
         PUCHAR i= NULL;
        UCHAR b1=0,b2=0,b3=0;
         ULONG templong=0;
         ULONGLONG addr = 0;
         for (i = StartSearchAddress;i<EndSearchAddress;i++)
         {
                 if(MmIsAddressValid(i)&& MmIsAddressValid(i+1)&&MmIsAddressValid(i+2))
                {
                                   b1=*i;
                                   b2 = *(i+1);
                                   b3 = *(i+2);
                           if(b1 == 0x4c&& b2 == 0x8d && b3 == 0x15)
                           {
                                    memcpy(&templong,i+3,4);
                                    addr = (ULONGLONG)templong + (ULONGLONG)i+7;
                                    return addr;
                           }
            }
     }
      KdPrint(("==%x",StartSearchAddress));
      return 0;
}


ULONGLONG GetSSDTFunAddress64()
{
                 LONG dwtemp = 0;
                 ULONGLONG qwtemp=0,stb=0,ret=0;
                 PSYSTEM_SERVICE_TABLE ssdt = (PSYSTEM_SERVICE_TABLE)MyGetKeServiceDescriptorTable64();
                 stb = (ULONGLONG)(ssdt->ServiceTableBase);
                 qwtemp = stb + 4 * 144 ;
                 dwtemp = *(PLONG)qwtemp;
                 dwtemp = dwtemp >> 4;
                 ret = stb +(LONG64)dwtemp;
                 return ret;
}

ULONGLONG readpoint()
{
         ULONGLONG readp,result;
         UCHAR savehex[4];
         ULONG debugobjectaddress;
         readp =GetSSDTFunAddress64()+0x7c;
         KdPrint(("==%p",readp));
     savehex[3] = *(UCHAR*)(readp+6);
         savehex[2] = *(UCHAR*)(readp+5);
         savehex[1] = *(UCHAR*)(readp+4);
         savehex[0] = *(UCHAR*)(readp+3);

    debugobjectaddress = *(ULONG*)savehex +(ULONG)readp+7 ;

     KdPrint(("%p",debugobjectaddress));
     (ULONGLONG) result =(ULONGLONG)( readp&0xffffffff00000000) + (ULONGLONG)debugobjectaddress;
     KdPrint(("hex==%x",*(ULONG*)savehex));

    return result;
}


VOID RemoveVaildMaskObj(
__in struct _KDPC  *Dpc,
__in_opt PVOID  DeferredContext,
__in_opt PVOID  SystemArgument1,
__in_opt PVOID  SystemArgument2
)
{
         __try
         {

              *((ULONG*)Validaccessmask) = 0x1F000F;
                         //*((ULONG*)validaccessmask) = 0;
                           KdPrint(("Validaccessmask==%x",*(ULONGLONG*)Validaccessmask ));  

        }
         __except (1)
         {
                 KeCancelTimer(&PassObjTimer);
                 return;
         }
         KeSetTimer(&PassObjTimer, PassObjTime, &PassObjDpc);
         return;
}

VOID RecoveryValidAccessMask()
{
         ULONGLONG resultaddress = readpoint();

         Validaccessmask = *(ULONGLONG*)resultaddress +0x40 +0x1c ;

        KdPrint(("Validaccessmask==%x",*(ULONGLONG*)Validaccessmask ));  

        PassObjTime.QuadPart = -10000 * 100;
     KeInitializeTimer(&PassObjTimer);
     KeInitializeDpc(&PassObjDpc, &RemoveVaildMaskObj, NULL);
     KeSetTimer(&PassObjTimer, PassObjTime, &PassObjDpc);
}

VOID UnPassObjectMask()
{
         KeCancelTimer(&PassObjTimer);
}

VOID Unload(PDRIVER_OBJECT pDriverObject)
{
         UnPassObjectMask();
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING Reg_Path)
{
         RecoveryValidAccessMask();
         pDriverObject->DriverUnload = Unload;
         return STATUS_SUCCESS;
}




联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:DEBUG HOOK messagebox最标准写法
下一篇:【教程 han 源码】 开源自写钻皇菜单/第三课
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

23

积分

3

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
20
海币
0
交易币
0
沙发
 楼主| 发表于 2016-4-4 15:55:24 | 只看该作者
哎呀好奇怪,我发主题了,怎么还是新手状态
4中级会员
403/600

403

积分

5

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
398
海币
289
交易币
0
板凳
发表于 2016-4-4 18:50:10 | 只看该作者
C语言表示看不懂,有成品吗
6高级会员
969/1100

969

积分

1

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
968
海币
2539
交易币
0

热心会员推广达人宣传达人签到达人最佳新人突出贡献机器王

地板
发表于 2016-4-4 20:34:40 | 只看该作者
好贴希望能继续出更多这样的帖子。
6高级会员
832/1100

832

积分

18

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
814
海币
401
交易币
0

热心会员推广达人宣传达人最佳新人开荒者突出贡献

QQ
5#
发表于 2016-4-5 18:05:47 | 只看该作者
正是我想要的,谢谢楼主。

78

积分

1

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
77
海币
71
交易币
0
6#
发表于 2016-4-7 23:41:57 | 只看该作者
支持楼主,感谢楼主的分享,好贴必须学习!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-20 20:03 , Processed in 0.076781 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

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