简单的活着

pinlog

Posted on By Mista Cai

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

ARTeam的2012 deroko

有时我们需要快速浏览二进制文件,并查看执行流程。在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系统一起执行。