首页
社区
课程
招聘
[原创]WIN7 X64 DNF IDT01 逆向
发表于: 2019-4-26 22:38 14620

[原创]WIN7 X64 DNF IDT01 逆向

2019-4-26 22:38
14620
          01是处理硬段和单步异常之类的中断  0E是处理内存页面方面的中断
          还有msr 82 就是syscall的r0处理函数  但是他都不是inline Hook 是直接把寄存器里的值改掉的
          还有msr 82 就是syscall的r0处理函数  但是他都不是inline Hook 是直接把寄存器里的值改掉的
          Win7 dnf除了降低权限和DebugPort清0外还替换了个假的cr3
         我把 调试权限和进程权限DebugPort 和cr3解决后  用windows调试器调试的症状就是 会程序崩溃 
         所以现在只能用VEH调试了  VEH因为有TP有idt01的存在 
         所以导致了
                 硬件断点失效  
                 单步失效
         所以我们开始分析IDT
        先打开xt 看看TP idt01的地址

         结果发现 这里面的数据和系统IDT完全不一样 根本牛头不对马嘴 这里有个CALL  我们跟进去

         然后......发现还是牛头不对马嘴  这里面一大堆计算 他还ret了出来  所以 这是肯定一段混淆 然后用ret返回真实的idt地址


          这是以前分析的 所以前面地址不一样 入口这里还是没有变化  这里看不懂啥意思的话 可以自己去分析一遍 我写的可能有点乱

        现在的IDT才对 一大堆保持环境  因为这里是IDT01 所以进来的时候rsp所在的位置是 _KTRAP_FRAME+0x168的位置这 个结构在我上篇分析IDT的帖子里有图片

         因为veh断点是R3的操作 所以我们来看R3的处理 他干了啥   我文档上和windbg上面显示的地址不是一样的  不过代码他没有变 都是一样的  因为我文档有注释 所以我们看文档(在win7双机调试dnf的时候 会发现windng能断下来 但是不能单步 就是这里搞的鬼 R0处理的地方他有个单步位取反的操作)
         他判断先前模式后 然后有各自的操作 下面是R3
                  这里他进了一个CALL  有4个参数 当前cr3  _KTRAP_FRAME+0x170   dr6  dr7我们跟进去

               这里面这个用方框框起来的地方  不知道这串运算有啥用 好多地方都有这样的运算  看不懂 晕晕

0x04


       然后碰到了第一个CALL 参数就一个 cr3 穿进去比较的
      
这里找到里个一存储CR3的数组 我们用WINDBG看看里面的东西


这是一个存储结构体指针的指针 而这个结构体就是存储CR3之类信息的结构体 往下面看汇编代码 
我们发现 他取到了这个结构体指针 用CR3和偏移为0  70  80的几个值比较了  所以这里应该存的也是CR3
用WINDBG看

从图中可以看出这个结构体0偏移位置为假的cr3 因为他PTML4都是空的
经测试 +0x70是存储真实CR3的位置
判断相同 对上了就会直接CR3就会直接返回 跳出去

这个函数里就做了一件事清 循环判断了CR3 判断正确了就返回这个存储CR3的结构体指针 错误了就返回0  图中我们看r8是结构体的指针ebx是循环了多少遍
这里乘以c700我们可以猜测出 这个结构体大小为c700

现在TP更新了 这个结构体大小变成D828了
然后我们返回到上一层


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 4
支持
分享
最新回复 (16)
雪    币: 634
活跃值: (1149)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
山总:很好。又省我50块钱
2019-4-27 00:43
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
不懂,可能是为了效率吧,把内存藏起来,损失的效率太大了估计。
2019-4-27 08:22
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
hook的挂,用内存隐藏是藏不了的,不依赖vt,没法做到读写和执行页分离。
并且hook肯定是注入了,既然注入那就是游戏线程的上下文,那替换假cr3也没用了
最后于 2019-4-27 09:56 被hzqst编辑 ,原因:
2019-4-27 09:55
0
雪    币: 1454
活跃值: (84)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
去研究Win10 64位1903的IDT Hook吧
2019-4-27 13:40
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark一下 谢谢分享
2019-4-27 14:09
0
雪    币: 223
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
厉害,mark一下
2019-4-27 14:37
0
雪    币: 914
活跃值: (2468)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
8
新人都这么厉害了吗
2019-4-27 17:28
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
win7x64 双机调试 你过了检测?
2019-4-28 17:37
0
雪    币: 2055
活跃值: (486)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
killpy win7x64 双机调试 你过了检测?
https://bbs.pediy.com/thread-247940.htm  按照这上面来就能过了
2019-4-28 17:41
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
不吃麻婆豆腐 https://bbs.pediy.com/thread-247940.htm 按照这上面来就能过了
win7x64的呢  另外你这个后面我没看明白  0e里面会根据异常地址 进程等信息 给一个真实的cr3 和真实cr3里的rip地址 完后设置单步(dr寄存器) 返回后 在真实cr3执行一条指令后 立刻触发单步异常 进入idt 01中断 里面根据相关情况 会把页表再次换成假页表  你这里直接漏掉了 所以不能单步
2019-4-28 18:30
0
雪    币: 2055
活跃值: (486)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
killpy win7x64的呢 另外你这个后面我没看明白 0e里面会根据异常地址 进程等信息 给一个真实的cr3 和真实cr3里的rip地址 完后设置单步(dr寄存器) 返回后 在真实cr3执行一条指令后 立 ...
win7处理方法一样  win10低版本和win7x64一样
2019-4-28 18:58
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
内存隐藏很难兼容
2019-5-1 16:58
0
雪    币: 206
活跃值: (2001)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
BDBig 山总:很好。又省我50块钱
山总给了你多少广告费啊,天天跟人家打广告
2019-12-16 11:05
0
雪    币: 38
活跃值: (168)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
早不能用了 
2020-7-1 18:46
0
雪    币: 38
活跃值: (168)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
山总 很牛了。
2020-7-6 23:39
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
有dnf开发吗,合作
2020-7-20 02:53
0
游客
登录 | 注册 方可回帖
返回
//