首页
社区
课程
招聘
[原创]国庆假期很闲之针对 VS2019 + WDK10 生成驱动关不掉pdb符号文件的研究
2022-10-2 01:32 11988

[原创]国庆假期很闲之针对 VS2019 + WDK10 生成驱动关不掉pdb符号文件的研究

2022-10-2 01:32
11988

引用自:WDK10 + VS2019 关不掉符号开关


两年前,这个问题一直就这样挂起了,本着闲来无事找事的心态,把事情的前因后果从头分析了一遍



玩过VS的应该都知道,这样一来,不管是创建dll或者exe就不会生成pdb符号文件了

但是用WDK10创建驱动就不一定了,创建sys始终会生成pdb文件,那么问题来了,pdb符号文件是生成的呢


可能有些人不知道,VS的开发工具里面有一个mspdbsrv.exe这个进程名字大概可以猜出来,就是它生成pdb符号文件的

那么继续反推,VS是如何调用这个进程的呢?



看到这里,link.exe有没有熟悉的感觉呢?没错,就是link调用的mspdbsrv,那就继续回溯,来看一下堆栈



link通过CreateProcess调用mspdbsrv,有了这条线索,那么接下来就好办了,直接用OD附加link

根据上面的截图来对比分析,来到 link.exe + 0x30d60



也就是说,判断 cmp byte ptr ds:[0x6980F9],0x0 里面的值不为0,才会调用mspdbsrv




IDA可以发现这里面的初始值就是1,那意思就是,如果不生成pdb文件,就需要调用一段代码去把这里面的值写成0,继续回溯分析



如上截图,and byte ptr ds:[0x6980F9],al 写入了0,所以就不生成pdb文件

而前面生成驱动的时候,那个0x20000标记,就会跳过写入0

现在一切变得越来越清晰了

mov edx,dword ptr ss:[ebp-0x45C]

test dword ptr ds:[edx+0x150],0x20000

问题似乎就出在这个0x20000的标记上,但是哪里又写入了0x20000呢?接下来谜底该彻底揭开了



0056C861    68 44495100                 push link.00514944                        ; UNICODE "profile"

0056C866    FF37                        push dword ptr ds:[edi]

0056C868    FF95 68DCFFFF               call dword ptr ss:[ebp-0x2398]

0056C86E    59                          pop ecx

0056C86F    59                          pop ecx

0056C870    85C0                        test eax,eax

0056C872    0F84 F2520500               je link.005C1B6A                          ; 跳过去

就来到

005C1B6A    818E 50010000 00000200      or dword ptr ds:[esi+0x150],0x20000       ; 给了0x20000

005C1B74  ^ E9 DEAFFAFF                 jmp link.0056CB57

"profile",是的,最终矛头就是指向配置文件,找一下链接器高级选项



改成否,VS创建驱动再也不会生成pdb符号文件了

exe或dll工程这个选项默认就是否,但是驱动却给了/PROFILE

很难想象,也很难注意到,这个选项居然跟pdb符号文件有关

原来如此,高级也并不高级,微软这么干,目的何在?


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2022-10-2 01:37 被luskyc编辑 ,原因:
收藏
点赞11
打赏
分享
最新回复 (8)
雪    币: 2392
活跃值: (9215)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
TkBinary 5 2022-10-2 09:13
2
0
谢谢分享.很有用.
雪    币: 8887
活跃值: (3334)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chengdrgon 2022-10-2 10:39
3
0
感谢分享
雪    币: 1341
活跃值: (2236)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
恒大 2022-10-10 18:16
4
0
可以
雪    币: 377
活跃值: (5996)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
zx_838741 2022-10-10 18:52
5
0
有趣,虽然没什么实际价值,但是这是逆向的乐趣,发现别人不在二进制不知道的,做别人做不到的
雪    币: 5860
活跃值: (4427)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
淡然他徒弟 1 2023-7-24 01:00
6
0
mark
雪    币: 8057
活跃值: (4345)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunsjw 1 2023-7-24 08:03
7
0
5楼说的有道理
雪    币: 19299
活跃值: (28933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-7-24 13:46
8
1
感谢分享
雪    币: 1174
活跃值: (1172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cmputer 2023-7-24 14:17
9
0
mark
游客
登录 | 注册 方可回帖
返回