通过在ida的python console输入下面代码获取plugin路径(下面获取的一般是C盘的用户路径,C:\Users\XXXX\AppData\Roaming\Hex-Rays\IDA Pro\plugins),或者你直接放到IDA根目录的plugins文件夹
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))
知道路径后将lighthouse项目的plugins文件夹的lighthouse文件夹和lighthouse_plugin.py放到plugins目录即可
重新打开IDA,就可以看到加载文件那里多了Code coverage file
DynamoRIO就是针对windows,很简单(我使用的是DynamoRIO-Windows-8.0.0-1,据说Lighthouse默认使用的drcov文件版本为version 2,但是最新版的DynamoRIO生成的drcov文件的版本为version 3)
bin64\drrun.exe -t drcov -- XXX.exe
官方指南: 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/pinexport PIN_ROOT=/root/pin-3.13 #上面下载后解压的pin的路径export PATH=PATH:PIN_ROOTmake # 默认编译intel64make TARGET=ia32 # 指定编译ia32
pin覆盖率获取
~/tools/pin-3.13/pin -t obj-intel64/CodeCoverage.so -- ./src/target ./testfile
使用 -w 命令行标志,可以指示pintool仅对您指定的模块进行插桩,可以加快速度,也大大减少收集的数据量。
~/tools/pin-3.13/pin -t obj-intel64/CodeCoverage.so -w target -- ./src/target ./testfile
而且-w可以有多个
~/tools/pin-3.13/pin -t obj-intel64/CodeCoverage.so -w target -w libcrypto.so.1.1 -- ./src/target ./testfile
Frida在移动平台上的支持最好,如iOS或Android,声称对Windows、MacOS、Linux和QNX提供一些支持。实际上, frida-drcov.py 只应用于收集移动应用程序的覆盖数据。
安装Frida
pip install frida
一旦安装了Frida,可以使用frida-drcov.py
脚本来收集正在运行的进程的覆盖率
python frida-drcov.py <process name | pid>
默认会生成frida-cov.log覆盖率文件
使用 -o 标志,可以指定覆盖率日志文件的自定义名称/位置:
python frida-drcov.py -o more-coverage.log foo
以htop为例,首先启动htop,之后执行下面命令
python frida-drcov.py htop
结束掉htop,之后再结束上面命令,即可生成frida-cov.log,就可以导入到IDA了。