PR
高亮代码需要.json
文件,需要提前获得已执行和全体基本块信息。
S2E把执行的基本块信息和全部基本块信息记录在了json文件中,然后用python处理。
接下来
- 跑一遍s2e,获取json文件
- 看s2e源码,弄明白
s2e coverage basic_block --disassembler=ida **
s2e coverage basic_block
IDA 插件Process Stalker,pinlog
- process stalker
- pinlog
Pinlog
有时我们需要快速浏览二进制文件,并查看执行流程。在IDA中,可以获得许多执行路径,但是可以更快地将其分解,需要知道执行了哪些代码,哪些不是正常的执行流程,而无需弄清楚所有循环,静态反汇编中的jmp。
pinlog做的是使用pin来记录代码的某些部分执行了多少次,并根据此计数在IDA中分配颜色,比如,不必理会带有保留为“白色”的代码,没有被执行。
pinlog是怎样工作的?
pinlog.exe将分配50mb(w0000000t)的共享内存,并且该内存将用作exe或dll中指令位置的字节索引。如果不关心进程本身的执行,它也可以追踪也可以通过进程加载dll。
exe跟踪示例:
pinlog.exe c:\victim\victim.exe victim.exe log.log
dll跟踪示例:
pinlog.exe c:\victim\victim.exe victim.dll log.log
日志文件中将有执行指令的数量,因此我可以确定执行的循环以及执行路径。
完成跟踪或被杀死之后,日志文件将被写入磁盘。现在您可以使用loadlog.py脚本,也可以使用用于IDA的loadlog_plugin.py,因此不必每次都需要加载脚本
将日志加载到IDA中。如果您不喜欢蓝色,可以尝试修改loadlog.py/loadlog_plugin.py
中的颜色以查看最喜欢的颜色。
def build_color_list():
clist = [];
r = 0x00 / 255.0;
g = 0x00 / 255.0;
b = 0xff / 255.0;
工具一如既往随附源代码。pin的路径必须在Linux和Windows的PATH中。如果要编译Windows版本,则需要Microsoft的SDK和WDK(用于pinlog.exe)。pin的Makefile假设位于 $(HOME)\Desktop\pin
上,Linux版本也是如此.
当前支持的PIN版本: Windows:用于vc9的pin 58423(用于预编译的二进制文件),或者任何版本(如果您使用重新编译源 Linux:58423版本,需要重新编译 Mac:58423版本,需要重新编译
pinlog获取数据
将执行路径信息收集和系统调用监控分开操作,只能保证第一次流程可行。
后续修改系统调用返回值,模拟系统调用必须系统调用监控系统和PT系统一起执行。