Built by: 7601.17514.amd64fre.win7sp1_rtm.101119-1850
下断
bp KeInitAmd64SpecificState
bp nt!KeInitAmd64SpecificState+0x28 (fffff800`043cdbe8 41f7f8 idiv eax,r8d)
bp KiFilterFiberContext
修改 kd> r r8=0 触发异常
我们看到 执行到
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起来
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数据
所以我们一共需要处理的是
17个KiInitializePatchGuard_ +2个 nt!KiFilterFiberContext
为了验证是否有效
采用https://github.com/Sqdwr/PASS_PG_WIN7.git项目进行试验
如
这是由于代码里面很多
老套路 搜索
全部nop掉
[线下培训]《安卓高级研修班》`FART`自动脱壳机专场!作者`hanbingle`开讲手把手教!北京9月8日等你来!
最后于 22小时前 被UnMovedMov编辑 ,原因: