使用gdb除錯openssl
阿新 • • 發佈:2020-07-17
這篇文章是什麼?
最近在讀一篇論文,裡面的一項工作是找到了openssl中沒有能夠很好的設定constant-time的code path。
方法是通過在相應的函數出設定斷點,檢測genpkey命令時,是否呼叫了共享庫中的這幾部分非constant-time函式。
我其實不怎麼懂debug這一套,對gdb等工具只是略有了解,程式的編譯連結也不敢說很懂,就只是藉助一下參考,簡單嘗試下作者的方法
具體要怎麼做?
openssl的編譯安裝
原始碼獲取
openssl原始碼可以從官網下載zip或者從github clone,這裡選擇github,便於回退到相應的版本
clone
git clone https://github.com/openssl/openssl.git
切換分支到1.0.2版本
git checkout -b 1_0_2 origin/OpenSSL_1_0_2-stable
編譯安裝
./config --prefix="/home/username/debugopenssl"
make
sudo make install (安裝到config配置好的目錄中,以免影響到當前系統中的openssl)
sudo su
echo "/home/username/openssl/bin" >> /etc/ld.so.conf //家加入動態連結庫的路徑
ldconfig -v
測試
在安裝目錄下的bin資料夾中,執行
./openssl version
不出現報錯且輸出版本資訊即安裝成功
操作
安裝gdb
如果你是debian/ubuntu/deepin使用者,直接
sudo apt install gdb
其他系統也有相應的安裝方式
上手
gdb ./openssl //在bin目錄下
(gdb)set args genpkey -algorithm RSA -out key.pem //設定引數
(gdb)b bn_gcd.c:120 //新增斷點
(gcd)run //執行,觀察是否觸發斷點