文件

  • capture
  • header
  • packet
  • pt
  • sideband

题解

一开始看到这种操作我还是先把其中的黑体的binary文件放进ida看了一眼,不难看出capture就是一个trace,然后pt应该是运行的程序,那pt中的逻辑就是读取flag然后对flag的每一位去走一个循环判断。

BCTF——easypt - 图1

然后经过大佬提示发现这个packet文件是processor trace文件,然后可以到github这里去克隆大佬的项目来查看这个packet文件,确实是很难看呢,然后可以在文件中找到一大堆T和N去查看源代码发现在那里只会出现T和N,那么这个可能就是CPU的分支判断结果,然后回去看程序发现for里面是有判断的。所以可以用

  1. f = open('ttt.txt')
  2. d = f.read()
  3. f.close()
  4. import re
  5. s = r'tnt8 ([N,T]+)'
  6. dd = re.findall(s,d)
  7. res = ''
  8. for i in dd:
  9. res += i
  10. sss = r'((NT)+)TTT'
  11. de2 = re.findall(sss,res)
  12. de = ''
  13. for i in de2:
  14. t = len(i[0])/2
  15. de += chr(t+0x20)
  16. print(de)