zoukankan      html  css  js  c++  java
  • 使用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 //运行,观察是否触发断点
    
  • 相关阅读:
    mysql prepare语句使用
    mysql 存储过程中的declare 和 set @的两种变量的区别
    Redis命令总结
    系统架构师
    php 大数组的POST问题解决
    ubuntu设置系统时间与网络时间同步
    JAVA开发者最常去的20个英文网站
    文件上传之一句话木马原理及制作
    Postman怎么进行参数化
    单元测试、接口测试、功能测试的区别
  • 原文地址:https://www.cnblogs.com/chuaner/p/13331586.html
Copyright © 2011-2022 走看看