找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7455|回复: 3

X64 HOOK IDT 抄抄改改~发上来~~~鄙视某些放代码的

[复制链接]

9

主题

43

回帖

2

精华

铂金会员

积分
2525
发表于 2015-11-6 23:36:08 | 显示全部楼层 |阅读模式
本帖最后由 落笔飞花 于 2015-11-8 18:53 编辑

修改一下代码 之前没注意
kd> dt nt!_KIDTENTRY64 @idtr + @@(sizeof(nt!_KIDTENTRY64))
   +0x000 OffsetLow        : 0x44c0
   +0x002 Selector         : 0x10
   +0x004 IstIndex         : 0y000
   +0x004 Reserved0        : 0y00000 (0)
   +0x004 Type             : 0y01110 (0xe)
   +0x004 Dpl              : 0y00
   +0x004 Present          : 0y1
   +0x006 OffsetMiddle     : 0x40e
   +0x008 OffsetHigh       : 0xfffff800
   +0x00c Reserved1        : 0
   +0x000 Alignment        : 0x40e8e00`001044c0
kd> !idt 1

Dumping IDT:

01:        fffff800040e44c0 nt!KiDebugTrapOrFault

#pragma pack(1)
typedef struct{
        USHORT limit;
        ULONG64 BASE;


}IDT_INFO,*PIDT_INFO;


typedef union _KIDTENTRY64
{
        struct
         {
                USHORT OffsetLow;
                USHORT Selector;
                USHORT IstIndex : 3;
                USHORT Reserved0 : 5;
                USHORT Type : 5;
                USHORT Dpl : 2;
                USHORT Present : 1;
                USHORT OffsetMiddle;
                ULONG OffsetHigh;
                ULONG Reserved1;
                };
        UINT64 Alignment;
        } KIDTENTRY64, *PKIDTENTRY64;

#pragma pack()
typedef NTSTATUS(NTAPI *_KeSetAffinityThread)(
        IN PKTHREAD Thread,
        IN KAFFINITY Affinity
        );



NTSTATUS HOOKIDT(ULONG IDTID, PVOID NewfcuncAddress,__out  PVOID * oldTRAP1){

        KIRQL oldIrql;
        ULONG lowpart;
        KAFFINITY processOrs;
        PKTHREAD thread;
        LONG i;
        IDT_INFO idtinfo;
        ULONG_PTR oldTrap = 0;
        ULONG_PTR newTrap;
        KIDTENTRY64*idt_entry;
        UNICODE_STRING ustrKeSetAffinityThread;
        _KeSetAffinityThread KeSetAffinityThread;
        RtlInitUnicodeString(&ustrKeSetAffinityThread, L"KeSetAffinityThread");
        KeSetAffinityThread = (_KeSetAffinityThread)MmGetSystemRoutineAddress(&ustrKeSetAffinityThread);
        processOrs = KeQueryActiveProcessors();
        thread = KeGetCurrentThread();
        newTrap = (ULONG_PTR)NewfcuncAddress;
        if (!MmIsAddressValid(oldTRAP1))
        { return 1; }

        for (i = 0; i < 32; i++){
                KAFFINITY curProc = processOrs &(1 << i);
                if (curProc != 0){
               
                        KeSetAffinityThread(thread, curProc);
                        __sidt(&idtinfo);
                        idt_entry = idtinfo.BASE;

                        oldTrap = (ULONG_PTR)((((ULONGLONG)idt_entry[IDTID].OffsetHigh) << 32) | (ULONGLONG)(((idt_entry[IDTID].OffsetMiddle << 16) | idt_entry[IDTID].OffsetLow) & 0x00000000ffffffff));
                        if ( *oldTRAP1 == NULL)
                        {
                                *oldTRAP1 = (PVOID)oldTrap;
                        }
                       
                       
               
                KeRaiseIrql(HIGH_LEVEL, &oldIrql);
                        lowpart = (ULONG)((ULONGLONG)(newTrap));
                        idt_entry[IDTID].OffsetLow = (USHORT)lowpart;
                        idt_entry[IDTID].OffsetMiddle = (USHORT)(lowpart >> 16);
                        idt_entry[IDTID].OffsetHigh = (ULONG)((ULONGLONG)newTrap >> 32);
                        KeLowerIrql(oldIrql);
                }
       
       
       
        }
        KeSetAffinityThread(thread, processOrs);

        return STATUS_SUCCESS;
}

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2015-11-8 00:04:24 | 显示全部楼层
IDT HOOK,32、64位的代码可以做成一套的,只需要修改少部分即可。

9

主题

43

回帖

2

精华

铂金会员

积分
2525
 楼主| 发表于 2015-11-8 18:30:57 | 显示全部楼层
Tesla.Angela 发表于 2015-11-8 00:04
IDT HOOK,32、64位的代码可以做成一套的,只需要修改少部分即可。

嗯呐

2

主题

35

回帖

0

精华

铜牌会员

积分
173
发表于 2016-5-20 19:24:09 | 显示全部楼层
求放代码.求不鄙视放代码的.笑
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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