PinTool安装与简单使用

整了好久…话说去年看东南平台上的那道mov时就想试试pin了,结果一直不知道咋整,上周六东南校赛又出了一道几乎一样的题,迫使我从零开始重新弄了一遍,最后结合很多dalao的教程终于能跑起来了。

下载

微软官方网址

选择对应的系统下载并解压即可

我这里使用的是linux版本,osx版本在之后使用时需要关闭sip保护,也不是很困难但是既然linux可以直接用就不搞那么麻烦了

编译

1
2
cd pin/source/tools/ManualExamples/
make TARGET=ia32/intel64 #可以指定目标版本

编译好之后当前目录就会出现obj-ia32/obj-intel64文件夹,之后根据文件是32位/64位使用对应的文件夹里的.so文件。

使用

这里贴上东南平台上的mov的解题脚本

只要编译好之前的ManualExamples就能运行,算是pin最简单的使用了

1
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import popen2,string
 
INFILE = "test"
CMD = "~/pin/pin -t ~/pin/source/tools/ManualExamples/obj-ia32/inscount1.so -- ~/mov.dms < " + INFILE
choices = "(_ABCDEFGHIJKLMNOPQRSTUVWXYZ{}abcdefghijklmnopqrstuvwxyz0123456789!#$%&'()*+,-./:;<=>?@[\]^`|~"#自定义爆破字典顺序,将数字和小写字母提前可以使得速度快一些~
 
def execlCommand(command):
    global f
    fin,fout = popen2.popen2(command)
    result1 = fin.readline()#获取程序自带打印信息,wrong或者correct
    print result1		
    result2 = fin.readline()#等待子进程结束,结果输出完成
    fin.close()
 
 
 
def writefile(data):
    fi = open(INFILE,'w')
    fi.write(data)
    fi.close()
 
flag = ''
while 1:
    l = 0#初始化计数器
    for i in choices:
        key = flag + i
        print ">",key
        writefile(key)
        execlCommand(CMD)
        fi = open('./inscount.out', 'r')
        while(1):
            try:
                n = int(fi.read().split(' ')[1], 10)
                break
            except IndexError:
                continue
        fi.close()
        print n
        if(l-n > 1 and l):#如果两次运行指令差别过大,说明字符正确
            flag += i
            print flag
            break
        else:
            l = n
    if '}' in flag:
    	break
print flag

脚本有点小问题,字典第一个字符最好放一个不可能出现在flag里的字符。

跑的电脑好烫

文章目录
  1. 1. 下载
  2. 2. 编译
  3. 3. 使用
|