IDA插件lighthouse的安装与使用

IDA安装

通过在ida的python console输入下面代码获取plugin路径(下面获取的一般是C盘的用户路径,C:\Users\XXXX\AppData\Roaming\Hex-Rays\IDA Pro\plugins),或者你直接放到IDA根目录的plugins文件夹

1
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))

知道路径后将lighthouse项目的plugins文件夹的lighthouse文件夹和lighthouse_plugin.py放到plugins目录即可

重新打开IDA,就可以看到加载文件那里多了Code coverage file

覆盖率文件生成

DynamoRIO

DynamoRIO就是针对windows,很简单(我使用的是DynamoRIO-Windows-8.0.0-1,据说Lighthouse默认使用的drcov文件版本为version 2,但是最新版的DynamoRIO生成的drcov文件的版本为version 3)

1
bin64\drrun.exe -t drcov -- XXX.exe

pin

官方指南: https://github.com/gaasedelen/lighthouse/blob/develop/coverage/pin/README.md

下载pin tools: https://www.intel.com/content/www/us/en/developer/articles/tool/pin-a-binary-instrumentation-tool-downloads.html

注意: 下载最新版的无法编译通过,我当时下载的Pin3.13,可以编译通过

编译:

cd lighthouse/coverage/pin
export PIN_ROOT=/root/pin-3.13 #上面下载后解压的pin的路径
export PATH=$PATH:$PIN_ROOT
make # 默认编译intel64
make TARGET=ia32 # 指定编译ia32

pin覆盖率获取

1
~/tools/pin-3.13/pin -t obj-intel64/CodeCoverage.so -- ./src/target ./testfile

使用 -w 命令行标志,可以指示pintool仅对您指定的模块进行插桩,可以加快速度,也大大减少收集的数据量。

1
~/tools/pin-3.13/pin -t obj-intel64/CodeCoverage.so -w target -- ./src/target ./testfile

而且-w可以有多个

1
~/tools/pin-3.13/pin -t obj-intel64/CodeCoverage.so -w target -w libcrypto.so.1.1 -- ./src/target ./testfile

通过frida收集

Frida在移动平台上的支持最好,如iOS或Android,声称对Windows、MacOS、Linux和QNX提供一些支持。实际上, frida-drcov.py 只应用于收集移动应用程序的覆盖数据。

安装Frida

1
pip install frida

一旦安装了Frida,可以使用frida-drcov.py脚本来收集正在运行的进程的覆盖率

1
python frida-drcov.py <process name | pid>

默认会生成frida-cov.log覆盖率文件

使用 -o 标志,可以指定覆盖率日志文件的自定义名称/位置:

1
python frida-drcov.py -o more-coverage.log foo

以htop为例,首先启动htop,之后执行下面命令

1
python frida-drcov.py htop

结束掉htop,之后再结束上面命令,即可生成frida-cov.log,就可以导入到IDA了。

打赏专区