偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

太慘了!藍(lán)屏了,我的文章沒(méi)了

開發(fā) 前端
Linux上咱們使用tcpdump抓取數(shù)據(jù)包時(shí),底層使用的核心庫(kù)就是libpcap,這是一個(gè)開源項(xiàng)目,在Windows上對(duì)應(yīng)的就是winpcap。后來(lái)在Win7之后,Windows上使用了更現(xiàn)代化的抓包接口,Wireshark默認(rèn)使用npcap來(lái)代替了傳統(tǒng)的winpcap。

 [[392695]]

在某一個(gè)平行宇宙中,各位讀者大大現(xiàn)在看到的應(yīng)該是一篇關(guān)于網(wǎng)絡(luò)協(xié)議的文章。

這個(gè)平行宇宙與當(dāng)前宇宙的分叉點(diǎn)來(lái)源于2個(gè)小時(shí)前,我點(diǎn)了一下Wireshark抓包,一剎那,藍(lán)屏了,那篇文章中近一段時(shí)間寫的內(nèi)容沒(méi)了。

我差點(diǎn)拍案而起,WTF!保存啊保存,一個(gè)不留神就忘記了。

事情是這樣的:

我想抓一些DHCP協(xié)議的數(shù)據(jù)包,于是將網(wǎng)卡禁用,然后開啟Wireshark,打算把一會(huì)兒?jiǎn)⒂镁W(wǎng)卡后的通信過(guò)程抓下來(lái)。然而等我雙擊網(wǎng)卡開始抓包的一瞬間,藍(lán)了!

捶足頓胸之際,不小心瞅見(jiàn)了藍(lán)屏界面上藍(lán)屏的驅(qū)動(dòng)程序名字:npcap.sys,看來(lái)是Wireshark用的抓包驅(qū)動(dòng)有問(wèn)題呀!

這家伙害我害得這么慘,我不打算放過(guò)它,決定找出來(lái)到底這程序哪里寫的有問(wèn)題。

等了幾分鐘,電腦重啟后,在C:\Windows目錄下找到了系統(tǒng)崩潰后產(chǎn)生的核心存儲(chǔ)文件:MEMORY.dmp,這個(gè)文件是操作系統(tǒng)崩潰后,Windows將內(nèi)核的數(shù)據(jù)、所有進(jìn)程、線程的執(zhí)行上下文進(jìn)行了保存,相當(dāng)于對(duì)“案發(fā)現(xiàn)場(chǎng)”進(jìn)行了“拍照”,用于事后定位問(wèn)題。

注意,這個(gè)得提前設(shè)置好才會(huì)存儲(chǔ),默認(rèn)情況下只會(huì)存儲(chǔ)一個(gè)很簡(jiǎn)單的mini dump文件,不利于問(wèn)題分析。

祭出內(nèi)核分析神器:WinDbg,來(lái)加載分析dump文件。

因?yàn)橐呀?jīng)知道崩潰位置位于npcap.sys文件,所以先去簡(jiǎn)單了解了一下這個(gè)東西。

Linux上咱們使用tcpdump抓取數(shù)據(jù)包時(shí),底層使用的核心庫(kù)就是libpcap,這是一個(gè)開源項(xiàng)目,在Windows上對(duì)應(yīng)的就是winpcap。后來(lái)在Win7之后,Windows上使用了更現(xiàn)代化的抓包接口,Wireshark默認(rèn)使用npcap來(lái)代替了傳統(tǒng)的winpcap。

既然是開源項(xiàng)目,事情就好辦了,有源碼,有PDB符號(hào)文件。

源碼大家知道,PDB文件可能有些人不知道。我們知道C/C++這類語(yǔ)言編譯完成后,所有的函數(shù)名字、參數(shù)、數(shù)據(jù)結(jié)構(gòu)定義等信息就丟失了,剩下的都是CPU指令了。那萬(wàn)一程序出了問(wèn)題程序員怎么分析呢?這就需要pdb文件了,pdb是程序數(shù)據(jù)庫(kù)的意思,這里面有前面說(shuō)的那些信息。

在npcap項(xiàng)目的官網(wǎng),找到了npcap.sys驅(qū)動(dòng)程序?qū)?yīng)版本的npcap.pdb文件,下載后,載入WinDbg中,可以看到程序崩潰的函數(shù)調(diào)用堆棧:

看到了吧,有了PDB文件,連源代碼路徑都顯示出來(lái)了。

在GitHub上找到了這個(gè)openclos.c文件,定位到最后導(dǎo)致崩潰的函數(shù):NPF_FreeCapData

具體是崩潰在哪一行呢?

回頭看看windbg可以告訴我們具體那一行指令的地址,在上下文的RIP寄存器中可以看到:

看一下這個(gè)位置的指令是個(gè)啥:

導(dǎo)致藍(lán)屏的是這一條指令:

  1. mov rbx, [rdx+18h] 

這條指令的意思是把rdx+18指向位置的內(nèi)容,讀取到rbx寄存器中。又看了一下崩潰代碼是內(nèi)存訪問(wèn)異常,那肯定就是rdx+18這個(gè)地址有問(wèn)題了。

地址有問(wèn)題,那現(xiàn)在rdx是個(gè)啥呢?

我去,居然是0,空指針NULL啊!那不崩潰就怪了!

結(jié)合匯編指令和數(shù)據(jù)結(jié)構(gòu)定義,就能鎖定源碼中的具體位置了:在源碼中的三級(jí)指針訪問(wèn)中,第二級(jí)指針的pNBLCopy字段為空!而代碼中又沒(méi)有判斷為空指針的情況,就崩潰了~

再次結(jié)合函數(shù)調(diào)用棧和GitHub中的源代碼,可以看到這是在清理釋放抓取到的所有數(shù)據(jù)包時(shí)出現(xiàn)的問(wèn)題,看下面代碼,這是在一個(gè)循環(huán)中,挨個(gè)釋放每個(gè)數(shù)據(jù)包所占據(jù)的資源,所有數(shù)據(jù)包以雙鏈表形式串聯(lián)了起來(lái)。

問(wèn)題分析到這里,我已經(jīng)按捺不住心里的激動(dòng)了,難道我發(fā)現(xiàn)了一個(gè)0day漏洞?要知道,驅(qū)動(dòng)程序空指針bug用的好可是能做內(nèi)核級(jí)攻擊的!一個(gè)漏洞都是值不少$的。

剛剛幻想了1秒鐘,馬上清醒過(guò)來(lái),等等,我這版本好像不是最新的,我康康最新的版本還有沒(méi)有這個(gè)問(wèn)題。

結(jié)果潑了我一盆冷水,新的版本,已經(jīng)增加了對(duì)這個(gè)指針是否為空的判斷了:

哎!與財(cái)富擦肩而過(guò)~

本文轉(zhuǎn)載自微信公眾號(hào)「編程技術(shù)宇宙」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系編程技術(shù)宇宙公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 編程技術(shù)宇宙
相關(guān)推薦

2020-09-25 08:58:43

推薦系統(tǒng)業(yè)務(wù)

2024-03-14 10:30:05

緩存場(chǎng)景DEMO

2019-06-18 11:09:54

2020-12-21 07:36:15

緩存數(shù)據(jù)庫(kù)緩存層

2021-05-27 05:29:29

緩存數(shù)據(jù)Redis

2020-11-09 07:38:19

RedisMySQL互聯(lián)網(wǎng)

2020-09-11 14:48:43

RedisMySQL數(shù)據(jù)

2020-03-20 08:00:32

代碼程序員追求

2017-01-10 09:59:51

2019-09-24 11:36:51

Python支付寶數(shù)據(jù)

2019-12-06 17:31:30

程序員人生第一份工作設(shè)計(jì)

2022-01-26 22:22:38

LinuxLinus TorvGitHub

2020-02-06 11:30:08

代碼JavaScript&&

2013-07-17 14:13:08

產(chǎn)品產(chǎn)品失敗

2021-05-08 08:51:28

SpringCloud微服務(wù)架構(gòu)

2020-10-21 12:10:30

訂單號(hào)Java代碼

2022-04-11 08:56:27

AIAI算法

2021-01-19 05:27:44

HTTPSECDHE算法

2021-07-02 05:28:30

Windows 11操作系統(tǒng)微軟

2021-09-09 19:19:50

命令Rm 腳本
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)