windows解析DNS的核心逻辑
本帖最后由 DQQQQQ 于 2021-11-11 17:20 编辑吐槽一下,这个发帖要贴个图片。好麻烦。。。。。。。。。。
WIN10处理逻辑调试技巧。由于DNS可以使用命令清除缓存,然后使用Ping命令,触发DNS解析。因此调试时候遇到不确定的是否是关键调用。可以先用 ipconfig /flushdns 清除缓存。然去反汇编调试器上面步过,确认是否是关键调用1. 首选准备测试程序
测试方法。找一个IP。然后本地使用命令ipconfig/flushdns 清空DNS查询 使用IDA查看函数
进去
WSALookupServiceNextA具体函数作用未知。但是通过命令,发现不存在的DNS在WSAloolupservice执行之后,有了新增的。使用x64dbg查看这个函数实现
调用Unicode的函数版本 后面就主要进入mssock.dll一直跟进,直到
然后进入DNSapi.dll
上面大致逻辑就是对于 localhost, localmachine.loopring之类的进行解析。如果不是就去查询注册表是否设置了DNS。如果还不是,就进入RPC调用
所以win10上面。Windows解析DNS的逻辑就是先去判断是不是localhost,localmachine之类的。如果不是就再去查是不是注册表中设置了这个DNS,如果还不是就使用RPC和SVCHOST.exe进行通讯。让服务去查询DNS。处理完成之后,使用WSNoteSuccessfulHostentLookup去查询对应的IP。 Win7处理逻辑开头和win10基本区别不大,也是进入WSALookupServiceNextA
然后统一进入Unicode版本函数
WSALookupServiceNextW的实现
这之后通过几个函数的跳转进入到mssocket.dll,明显这里开始进行网络处理了。通过GetProcAddress找到DnsQueryExW
然后又是判断是不是那些特殊的本地域名
然后又是进入关键地方,进行RPC的调用
RPC核心调用位置:
最后到达这里应该就是RPC正式调用了
吐槽一下:win7的RPC代码,感觉比起WIN10乱了好多。 总结:windows 对于DNS的处理,都是交给一个系统进程(svchost.exe)去处理,其他程序需要DNS时候,windows先去看是否是本地的一些代表本地的特殊DNS。如果不是,则进行进程RPC通讯,交个系统进程去处理DNS。然后RPC取得返回结果,正式因为有单独进程处理,所以才可以使用命令清除DNS来找关键CALL DQQQQQ 发表于 2021-11-11 17:14
后面那一堆图片怎么删除呀。我编辑了,貌似也没有删除。没注意到有附件图片。一开始附件去了,结果不显示 ...
在到附件上传那可以看到上传后的附件列表,里面点删除就行了。 dgclan 发表于 2021-11-16 21:01
记得DNS解析不对打不开网页
只是不能用域名访问网站。但是如果你知道IP,或者域名解析网站上面查询到对应的IP。可以直接用IP访问,但是访问域名解析网站又需要DNS。emmm.....开始套娃了 贴图确实不是很先进,是十年前的产品了,但最好不要从其他地方复制过来粘贴这样不容易编辑,我给你编辑一下,换了行好看一些,你把多的图贴到文章里吧。 Hmily 发表于 2021-11-11 16:11
贴图确实不是很先进,是十年前的产品了,但最好不要从其他地方复制过来粘贴这样不容易编辑,我给你编辑一下 ...
谢谢,第一次正式吾爱发文章。我原来是word写的。。。。。搞了好久,才搞出来怎么贴图片。 DQQQQQ 发表于 2021-11-11 17:12
谢谢,第一次正式吾爱发文章。我原来是word写的。。。。。搞了好久,才搞出来怎么贴图片。
后面那一堆图片怎么删除呀。我编辑了,貌似也没有删除。没注意到有附件图片。一开始附件去了,结果不显示。我又图片上传了一次 学习了! 搞久了,才能搞定贴图片!!! 谢谢楼主,学习了。 这个有意思,收藏起来慢慢看,谢谢楼主DQQQQQ{:1_893:} 感谢楼主,讲的很细致,解决了心中的疑惑