入门==>如何在win7下调试PG
2019-09-03 17:09:06 Author: bbs.pediy.com(查看原文) 阅读量:306 收藏

1 系统版本

Built by: 7601.17514.amd64fre.win7sp1_rtm.101119-1850

2 异常触发除0异常===>KiFilterFiberContext

下断

bp KeInitAmd64SpecificState

bp nt!KeInitAmd64SpecificState+0x28 (fffff800`043cdbe8 41f7f8  idiv    eax,r8d)

bp KiFilterFiberContext

修改 kd> r r8=0 触发异常

3 查找所有的引用KdDebuggerNotPresent

我们看到 执行到

fffff800`043c9f9d 803d4d2cd0ff00  cmp     byte ptr [nt!KdDebuggerNotPresent (fffff800`040ccbf1)],0

fffff800`043c9fa4 7502            jne     nt!KiFilterFiberContext+0x24 (fffff800`043c9fa8)

fffff800`043c9fa6 ebfe            jmp     nt!KiFilterFiberContext+0x22 (fffff800`043c9fa6)

无限循环

发现比较的是 KdDebuggerNotPresent 所以我们查找所有的引用如下:

其中 上图的KiInitializePatchGuard_ 是我 重命名了如下Call函数:

fffff800`043ca083 e8b862ffff      call    nt!VfOrderDependentThunks <PERF> (nt+0x56d340) (fffff800`043c0340)

进入这个Call 修改

修改之前 我们先做一下汇总 心里有数 ida搜索结果如下

Up    r     KiInitializePatchGuard_+AB   cmp     byte ptr cs:KdDebuggerNotPresent, dil; FFFFF80004083BF1

Down  r     KiInitializePatchGuard_+A13  cmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+1652cmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+16C8cmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+1C3Fcmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+1E27cmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+2005cmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+3893cmp     byte ptr cs:KdDebuggerNotPresent, r12b

Down  r     KiInitializePatchGuard_+4BEEcmp     byte ptr cs:KdDebuggerNotPresent, r12b

Down  r     KiInitializePatchGuard_+5554cmp     byte ptr cs:KdDebuggerNotPresent, r11b

Down  r     KiInitializePatchGuard_+6E44cmp     byte ptr cs:KdDebuggerNotPresent, r9b

Down  r     KiInitializePatchGuard_+7D22cmp     byte ptr cs:KdDebuggerNotPresent, r9b

Down  r     KiInitializePatchGuard_+7D4Fcmp     byte ptr cs:KdDebuggerNotPresent, r9b

Down  r     KiInitializePatchGuard_+8058cmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+96AFcmp     byte ptr cs:KdDebuggerNotPresent, al

Down  r     KiInitializePatchGuard_+98C4cmp     byte ptr cs:KdDebuggerNotPresent, r14b

Down  r     KiInitializePatchGuard_+9C27cmp     byte ptr cs:KdDebuggerNotPresent, r14b

修改一下KiInitializePatchGuard函数相对nt的偏移

KiInitializePatchGuard = nt!VfOrderDependentThunks <PERF> (nt+0x56d340) (fffff800`043c0340)

kd> ? fffff800`043c0340-nt

Evaluate expression: 5690176 = 00000000`0056d340

01  56D340+0A13=0056d3eb+nt

02  56D340+0A13=0056dd53+nt

03  56D340+1652=0056e992+nt

04  56D340+16C8=0056ea08+nt

05  56D340+1C3F=0056ef7f+nt

06  56D340+1E27=0056f167+nt

07  56D340+2005=0056f345+nt

08  56D340+3893=00570bd3+nt

09  56D340+4BEE=00571f2e+nt

10  56D340+5554=00572894+nt

11  56D340+6E44=00574184+nt

12  56D340+7D22=00575062+nt

13  56D340+7D4F=0057508f+nt

14  56D340+8058=00575398+nt

15  56D340+96AF=005769ef+nt

16  56D340+98C4=00576c04+nt

17  56D340+9C27=00576f67+nt

下断咯

随机选取几个验证一下

kd> u nt+0x56d3eb

nt!VfOrderDependentThunks <PERF> (nt+0x56d3eb):

fffff800`043c03eb 40383dffc7d0ff  cmp     byte ptr [nt!KdDebuggerNotPresent (fffff800`040ccbf1)],dil                         

kd> u nt+0x56dd53

nt!VfOrderDependentThunks <PERF> (nt+0x56dd53):

fffff800`043c0d53 44383597bed0ff  cmp     byte ptr [nt!KdDebuggerNotPresent (fffff800`040ccbf1)],r14b

没毛病 一个一个处理 g起来

4 一个一个修改rip

01  56D340+0A13=0056d3eb+nt

02  56D340+0A13=0056dd53+nt

.... 由于内容过长 不一一展示 见附件

欢呼雀跃 出来咯

最后再改一处

kd> u fffff800`043ca117

nt!KiFilterFiberContext+0x193:

fffff800`043ca117 803dd32ad0ff00  cmp     byte ptr [nt!KdDebuggerNotPresent (fffff800`040ccbf1)],0

终于又出来了

fffff800`043cdc00 e87fc3ffff      call    nt!KiFilterFiberContext (fffff800`043c9f84)

可以看到 确实是异常引起的初始化 PG数据

5 总结

所以我们一共需要处理的是

17个KiInitializePatchGuard_ +2个 nt!KiFilterFiberContext

6 效果

为了验证是否有效

采用https://github.com/Sqdwr/PASS_PG_WIN7.git项目进行试验

7 为什么上面这么多nop?

这是由于代码里面很多

老套路 搜索

全部nop掉

8 tks for ZTY xiaochou

[线下培训]《安卓高级研修班》`FART`自动脱壳机专场!作者`hanbingle`开讲手把手教!北京9月8日等你来!

最后于 22小时前 被UnMovedMov编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-254248.htm
如有侵权请联系:admin#unsafe.sh