最近两天又在折腾pin,是一个很强大的二进制程序的插桩分析工具,这里我就只用了inscount这个pintool,其他的以后再慢慢研究,inscount就是一个可以计算执行指令数的一个程序,通过所获的指令数分析我们可以来对程序爆破出正确的输入
pin的安装及使用
大家可以去看ctf-wiki上的教程,我也是跟着教程复现了几道题
pin in ctf
NDH2K13-crackme-500
首先这道题ida一打开就是各种报错,所以我们粗暴一点直接上pin试试,由于wiki已经讲的很详细了,这里我就直接上脚本了,我下的pin3.7的不知道为什么无法输出结果到控制台(如果有大佬知道怎么修改可以输出到控制台可以告诉我!),所以对wiki上的脚本做了一点修改,首先猜测输入的长度(脚本里的myinscount1.so其实就是inscount1.so)
1 | #!/usr/bin/env python |
1 | ☁ obj-intel64 python guessLen.py |
接下来爆破内容
1 | #!/usr/bin/env python |
1 | ☁ obj-intel64 python guessPWD.py |
很快我们就轻松得得到了pwd
QCTF-ollvm
这题ida打开也挺复杂的,但是告诉了我们输入的长度要是38,所以我们也尝试一下用pin,但是一开始我在ubuntu无法运行这道题
1 | ☁ ollvm ldd ollvm |
上网找了一下,发现是我的linux没有安装gmp,于是先装个gmp
安装gmp
下载最新gmp [ gmp_6.1.2+dfsg.orig.tar.xz],解压(https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/gmp/2:6.1.2+dfsg-2/gmp_6.1.2+dfsg.orig.tar.xz)
安装gmp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31#安装m4,不然会报错
sudo apt-get install build-essential m4
# 编译准备
./configure --prefix=/usr \
--enable-cxx \
--disable-static \
--docdir=/usr/share/doc/gmp-6.1.2
# 编译包和生成HTML文档
make
make html
make check
# 安装包和相关文档
sudo make install
make install-html
# 然后我们的ollvm文件就能正常运行了
☁ ollvm ldd ollvm
linux-vdso.so.1 => (0x00007ffebf98c000)
libgmpxx.so.4 => /usr/lib/libgmpxx.so.4 (0x00007fa01cc76000)
libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fa01c9f6000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa01c674000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa01c36a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa01c154000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa01bd8a000)
/lib64/ld-linux-x86-64.so.2 (0x00005642fe7ab000)
☁ ollvm ./ollvm asdsda
flag require 38 chars
然后就可以上我们的脚本了
1 | #!/usr/bin/env python |
1 | ☁ ollvm python guessPWD.py |
参考文章:
- https://blog.csdn.net/win_in_action/article/details/46956245
- https://blog.csdn.net/shengerjianku/article/details/80721510
- https://blog.csdn.net/liuruiqun/article/details/49590531#
- https://github.com/bash-c/pin-in-CTF
- https://ctf-wiki.github.io/ctf-tools/binary_core_tools/instrumentation/intel_pin/#pin