使用gdb调试openssl

这篇文章是什么?

最近在读一篇论文,里面的一项工作是找到了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 //运行,观察是否触发断点
posted @ 2020-07-17 17:46  火腿烧豆腐  阅读(772)  评论(0编辑  收藏  举报