首页
社区
课程
招聘
[原创]玩着腾讯的游戏,VS2010无法F5调试运行程序的原因,64位版
发表于: 2015-3-23 08:59 22449

[原创]玩着腾讯的游戏,VS2010无法F5调试运行程序的原因,64位版

2015-3-23 08:59
22449
在看雪学习了这么久,也没怎么发过贴,好像有点不好意思,
本人小菜菜,欢迎各位大神,指点,赐教,
前面很多大神已经说过了,我只是更加具体的实践了下,简单点说就是调试权限被清零了,具体可以看下视频,

这个调试权限XP下面已经被玩的熟透了,如果看不懂,大家可以回去找找XP下面的帖子,都一样的,

dq DbgkDebugObjectType
dt _OBJECT_TYPE fffffa80`24e33250

清零前:

1: kd> dt _OBJECT_TYPE_INITIALIZER fffffa80`24e33250+0x040
nt!_OBJECT_TYPE_INITIALIZER
   +0x000 Length           : 0x70
   +0x002 ObjectTypeFlags  : 0x8 ''
   +0x002 CaseInsensitive  : 0y0
   +0x002 UnnamedObjectsOnly : 0y0
   +0x002 UseDefaultObject : 0y0
   +0x002 SecurityRequired : 0y1
   +0x002 MaintainHandleCount : 0y0
   +0x002 MaintainTypeList : 0y0
   +0x002 SupportsObjectCallbacks : 0y0
   +0x004 ObjectTypeCode   : 0
   +0x008 InvalidAttributes : 0
   +0x00c GenericMapping   : _GENERIC_MAPPING
   +0x01c ValidAccessMask  : 0x1f000f
   +0x020 RetainAccess     : 0
   +0x024 PoolType         : 0 ( NonPagedPool )
   +0x028 DefaultPagedPoolCharge : 0
   +0x02c DefaultNonPagedPoolCharge : 0x58
   +0x030 DumpProcedure    : (null)
   +0x038 OpenProcedure    : (null)
   +0x040 CloseProcedure   : 0xfffff800`01f0ddb0     void  nt!DbgkpCloseObject+0
   +0x048 DeleteProcedure  : 0xfffff800`01d66fe0     void  nt!CmpConfigureProcessors+0
   +0x050 ParseProcedure   : (null)
   +0x058 SecurityProcedure : 0xfffff800`01dd25f0     long  nt!SeDefaultObjectMethod+0
   +0x060 QueryNameProcedure : (null)
   +0x068 OkayToCloseProcedure : (null)

清零后:
0: kd> dt _OBJECT_TYPE_INITIALIZER fffffa80`24e51250+0x040
nt!_OBJECT_TYPE_INITIALIZER
   +0x000 Length           : 0x70
   +0x002 ObjectTypeFlags  : 0x8 ''
   +0x002 CaseInsensitive  : 0y0
   +0x002 UnnamedObjectsOnly : 0y0
   +0x002 UseDefaultObject : 0y0
   +0x002 SecurityRequired : 0y1
   +0x002 MaintainHandleCount : 0y0
   +0x002 MaintainTypeList : 0y0
   +0x002 SupportsObjectCallbacks : 0y0
   +0x004 ObjectTypeCode   : 0
   +0x008 InvalidAttributes : 0
   +0x00c GenericMapping   : _GENERIC_MAPPING
  +0x01c ValidAccessMask  : 0
   +0x020 RetainAccess     : 0
   +0x024 PoolType         : 0 ( NonPagedPool )
   +0x028 DefaultPagedPoolCharge : 0
   +0x02c DefaultNonPagedPoolCharge : 0x58
   +0x030 DumpProcedure    : (null)
   +0x038 OpenProcedure    : (null)
   +0x040 CloseProcedure   : 0xfffff800`01eb5db0     void  nt!DbgkpCloseObject+0
   +0x048 DeleteProcedure  : 0xfffff800`01d0efe0     void  nt!CmpConfigureProcessors+0
   +0x050 ParseProcedure   : (null)
   +0x058 SecurityProcedure : 0xfffff800`01d7a5f0     long  nt!SeDefaultObjectMethod+0
   +0x060 QueryNameProcedure : (null)
   +0x068 OkayToCloseProcedure : (null)

游戏是隔几秒清一次零,我呢则以暴制暴,隔一秒给它还原一次,不是太完美,不过有效就行,呵呵,
下面 这个代码是获取调试权限的
VOID
  DeferredRoutine(
    __in struct _KDPC  *Dpc,
    __in_opt PVOID  DeferredContext,
    __in_opt PVOID  SystemArgument1,
    __in_opt PVOID  SystemArgument2
    )
  {

        //DbgPrint("DpcTimer%p\n",NUM++);
        *(ULONG*)ValidAccessMaskAddr =0x1f000f;//0x1f000f;
        KeSetTimer(&g_kTimer,largeInt,&g_kDpc);
}

暴力搜索得到调试权限的地址 ValidAccessMask
ULONGLONG MyGetAddress(ULONGLONG startaddr,ULONGLONG endaddr) //我的方法
{
        PUCHAR StartSearchAddress = (PUCHAR)startaddr;
            PUCHAR EndSearchAddress =(PUCHAR) endaddr;
        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==0x8b && b3==0x05 && *(i+7)==0x48 && *(i+8)==0x83) //4c8d15
                        {
                                memcpy(&templong,i+3,4);
                                addr = (ULONG)templong + (ULONG)i + 7;
                                addr = 0xfffff80000000000+addr;
                                return addr;
                        }
                }
        }
        return 0;
}
        DbgkDebugObjectTypeAddr = MyGetAddress(NtDebugActiveProcessaddr,NtDebugActiveProcessaddr+0x500);

TEMP = *(ULONG_PTR*)DbgkDebugObjectTypeAddr;
        ValidAccessMaskAddr = TEMP+0x40+0x1c;//dd 0xfffffa80`018cdf30 +0x40+0x1c

KeInitializeTimer(&g_kTimer);
        KeInitializeDpc(&g_kDpc,DeferredRoutine,0);
        largeInt.QuadPart = -1000000;
        KeSetTimer(&g_kTimer,largeInt,&g_kDpc);

链接: http://pan.baidu.com/s/1sjDMBed 密码: q563

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

收藏
免费 3
支持
分享
最新回复 (23)
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享,版区有你更精彩!
2015-3-23 09:38
0
雪    币: 62
活跃值: (946)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
感谢分享,学到了。
2015-3-23 09:42
0
雪    币: 2819
活跃值: (880)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习下,顺便顶顶
2015-3-23 09:46
0
雪    币: 10867
活跃值: (17252)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢楼主分享经验,
2015-3-23 09:54
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享,每次玩游戏都会有这个问题。只能重启机子才行。
2015-3-23 10:44
0
雪    币: 9941
活跃值: (2143)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
现在都玩64位的驱动啊
2015-3-23 14:03
0
雪    币: 6124
活跃值: (4476)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
简单粗暴啊
2015-3-24 20:37
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark

留着以后研究。
2015-3-27 13:27
0
雪    币: 182
活跃值: (434)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
终于找到原因了,谢谢大神
2015-4-5 15:09
0
雪    币: 181
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好,非常给力,尤其是剑灵,去他md
2015-4-7 22:52
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
纯属路过,回想起曾经,DbgkDebugObjectType也搞残了不少男女老少
2015-4-8 01:13
0
雪    币: 12061
活跃值: (4773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好像很强大哟
2015-4-22 23:11
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢分享,学到了。
2015-4-29 21:47
0
雪    币: 130
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
马克。。
2015-5-29 18:06
0
雪    币: 4840
活跃值: (2260)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
mark下
2015-5-30 17:30
0
雪    币: 9
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
LZ 玩的真6
2015-5-31 08:53
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
fffffa80`24e33250
这个值怎么来的,谢谢
2015-6-7 14:22
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
找到教程了
2015-6-7 14:26
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark,谢谢楼主分享!
2015-6-7 21:41
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
不太好吧,有可能封号
2015-7-2 08:55
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
typedef struct _OBJECT_TYPE_INITIALIZER {
     USHORT Length;
     BOOLEAN UseDefaultObject;
     BOOLEAN CaseInsensitive;
     ULONG InvalidAttributes;
     GENERIC_MAPPING GenericMapping;
     ULONG ValidAccessMask;
     BOOLEAN SecurityRequired;
     BOOLEAN MaintainHandleCount;
     BOOLEAN MaintainTypeList;
     POOL_TYPE PoolType;
     ULONG DefaultPagedPoolCharge;
     ULONG DefaultNonPagedPoolCharge;
      PVOID DumpProcedure;这几个函数决定对象的一些操作
    PVOID OpenProcedure; 例如 打开 创建 删除
     PVOID CloseProcedure; 不同对象类型(OBJECT_TYPE)的操作也不同
    PVOID DeleteProcedure; 所以要清楚知道对象是什么类型
    PVOID ParseProcedure; 如果没有匹配系统调用的对象类型,都是NtOpenFile
      PVOID SecurityProcedure;
     OB_QUERYNAME_METHOD QueryNameProcedure;
     OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
2015-7-6 17:14
0
雪    币: 2305
活跃值: (4559)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
NtDebugActiveProcessaddr 地址怎么获取啊·!!
2015-10-28 23:10
0
雪    币: 0
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
能请教一下楼主找数数据(程序逆向)的技术都看了哪些书籍吗 求推荐
2015-11-28 16:28
0
游客
登录 | 注册 方可回帖
返回
//