如何修補驅動程序?
介紹
剛接觸無線安全評估的人通常不了解修補驅動程序的必要性或如何做。有時您還需要修補ieee80211或mac80211堆棧。本教程試圖為讀者提供一些背景知識和一些基本技能。
重要說明本教程的存在確實意味著我們將在IRC頻道或論壇上提供基本的Linux支持。不要在論壇上發布基本的linux或通用補丁程序問題,它們將被忽略。它旨在幫助人們實現自給自足。
首先,什么是補丁?所有可執行程序均從源代碼生成。此源代碼提供了所有指令,以實現原始作者想要的所需功能。但是,有時候我們希望程序出于無線安全評估的目的而做一些稍有不同的事情。一個例子是數據包注入。因此更改了源代碼以實現新功能。為了共享此代碼,請對原始源代碼和修改后的源代碼之間的差異進行“修補”。
然后,任何人都可以將此“補丁”應用于他們自己的原始源代碼副本,然后進行編譯以獲得新功能。這使其非常易于運輸和維護。
一旦了解了一些簡單的概念,修補程序就很容易應用:
補丁通常是針對特定版本的源代碼的。這意味著舊的修補程序可能不適用于更新版本的源代碼。有時他們這樣做,有時卻沒有。同樣,修補程序可能無法在舊版本的源代碼上運行。在所有條件都相同的情況下,請使用專門為您的源代碼版本編寫的補丁。
修補程序通常是從“干凈的”未修補程序源構建的。因此,一個補丁可能會做出更改,從而導致其他補丁失敗。
補丁程序不是已發布的源代碼的一部分,因此,如果它們不起作用,請不要感到驚訝。始終保留原始程序源的備份!
其他常見問題:
我需要什么補丁?
我在哪里可以獲得補丁?
該Aircrack-ng的維基通常表明需要哪些特定的驅動程序補丁。相應的頁面包含詳細的安裝和修補說明。請參閱驅動程序安裝頁面以獲取指向各個詳細頁面的鏈接。
您可以通過多種方式獲得補丁。Wiki頁面通常提供下載鏈接。同樣,修補程序也包含在“ patches”目錄中的aircrack-ng源程序包中。
應用補丁
本節提供常規修補信息。盡可能按照您的驅動程序在Wiki頁面上給出的詳細說明進行操作。強烈建議您在應用修補程序之前備份源,以防出現問題。這樣,您可以輕松恢復原始源代碼。
這整個部分是通過控制臺會話完成的。
第一步是下載補丁。維基頁面通常會提供相關說明。通常,您使用“ wget”,如下所示:
wget "URL to patch"
wget https://patches.aircrack-ng.org/rtl8187_2.6.24v3.patch
然后,您需要使用“ mv”命令將補丁移動到適當的目錄。出現的問題是哪個“適當的目錄”?這個問題沒有正確答案。這取決于您要打補丁的內容以及補丁的創建方式。查看補丁本身中引用的目錄通常可以很好地指示它應該去的地方。您可能需要嘗試一些位置。以下是一些典型的位置:
與要修補的文件相同的目錄
要修補的文件上方的一個目錄
修補內核模塊時,/ usr / src / linux或類似文件
補丁到位后,使用“ cd”切換到包含補丁的目錄。
現在該運行“ patch”命令了。通用格式為:
patch -Np0 -i <name of the patch file>
哪里:
-N表示如果已安裝該修補程序,則不要應用該修補程序。
-p0表示要從補丁程序中的文件名中剝離的目錄數。有時您需要嘗試使用-p1,-p2,-p3等來剝離數量不等的目錄。
如果要測試應用補丁:
patch -Np0 --dry-run --verbose -i <name of the patch file>
注意:“試運行”和“詳細”前面有雙破折號。
在將其實際應用之前進行測試始終是一個好主意。這樣可以避免出現問題。
安裝補丁后,您需要重新編譯程序。通常通過以下方式完成此操作:
進行安裝
如果要重新編譯內核模塊,請參閱此[links#compiling_kernels | wiki條目],以獲取有關編譯內核和單個模塊的說明。
撤消(撤消)補丁:
patch -Rp0 -i <name of the patch file>
哪里:
-R表示如果已安裝該修補程序,則反轉該修補程序。
-p0表示要從補丁程序中的文件名中剝離的目錄數。有時您需要嘗試使用-p1,-p2,-p3等來剝離數量不等的目錄。
故障排除技巧
在輸入行找不到要修補的文件
您收到類似于以下錯誤信息:
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -Naur rtl8187_linux_26.1010.0622.2006_orig/beta-8187/ieee80211_crypt.h rtl8187_linux_26.1010.0622.2006_rawtx/beta-8187/ieee80211_crypt.h
|--- rtl8187_linux_26.1010.0622.2006_orig/beta-8187/ieee80211_crypt.h 2006-06-05 22:58:02.000000000 -0400
|+++ rtl8187_linux_26.1010.0622.2006_rawtx/beta-8187/ieee80211_crypt.h 2008-08-12 13:11:32.000000000 -0400
--------------------------
File to patch:
根據問題的根本原因,有幾種解決方案:
確保您要修補的文件確實存在于系統中。在上面的示例中,確認“ ieee80211_crypt.h”確實存在。如果不是,則安裝包含該文件的源代碼。同樣,大多數時候,您需要安裝內核頭文件和/或內核源代碼。內核標頭/源的版本必須與您正在運行的內核的版本相匹配。“ uname -r”將顯示您正在運行的內核版本。同樣,Fedora需要安裝kernel-devel rpm。
您將修補程序放在錯誤的目錄中。重新閱讀上面“簡介”部分中有關放置補丁的位置的部分。有時,您可以通過查看補丁本身來獲得有關將補丁放置在何處的線索。修補程序中指定的目錄路徑應指示您應將其放置在何處。
播放“ -pX”值。這使您可以從補丁程序中的引用文件中剝離目錄。嘗試-p0,-p1,-p2等。
補丁程序的版本可能與您的內核版本不匹配。檢查以確保已知您正在使用的補丁可以針對正在運行的內核正常工作。
Hunk #X FAILED at XXX
您收到類似于以下錯誤信息:
patching file drivers/net/wireless/iwlwifi/iwl-sta.c
Hunk #1 FAILED at 968.
1 out of 1 hunk FAILED -- saving rejects to file drivers/net/wireless/iwlwifi/iwl-sta.c.rej
patching file drivers/net/wireless/iwlwifi/iwl-tx.c
Hunk #1 FAILED at 783.
Hunk #2 FAILED at 805.
Hunk #3 FAILED at 819.
3 out of 3 hunks FAILED -- saving rejects to file drivers/net/wireless/iwlwifi/iwl-tx.c.rej
這意味著該修補程序在一個或多個位置與系統上的程序源代碼不匹配。結果,修補過程失敗。
根據問題的根本原因,有幾種解決方案:
在極少數情況下,一些故障仍然可以忽略。您可以嘗試編譯該程序,看看它是否有效。可能性不大,但值得一試。
補丁程序的版本可能與您的內核版本不匹配。檢查以確保已知您正在使用的補丁可以針對正在運行的內核正常工作。您很可能需要舊版本或新版本的補丁程序。
如果所有塊均失敗:該修補程序可能被空格損壞。嘗試將-l選項添加到patch命令行。
嘗試使用“ fuzz”選項應用補丁:將“ -F3”添加到補丁命令行。(數字指定了允許的最大模糊度-3是一個可以正常工作的值。)
如果所有其他方法均失敗,則可以通過查看補丁并手動應用更改來嘗試手動更新源代碼。
Aircrack-ng中文使用教程
推薦文章: