题目

CSDN资源下载(免积分)

文件

下载的文件直接后缀名就是.pyc
拖入010可发现Python特征也挺明显的:
image.png
raw_input还是Python2的函数,Python3已经没有了:
Python3-内置函数 - input()

答案

nctf{d3c0mpil1n9_PyC}

查看Writeup

解题

反编译

文件类型是pyc,要先进行反编译
Pyc

源码

  1. import base64
  2. def encode(message):
  3. s = ''
  4. for i in message:
  5. x = ord(i) ^ 32
  6. x = x + 16
  7. s += chr(x)
  8. return base64.b64encode(s)
  9. correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
  10. flag = ''
  11. print 'Input flag:'
  12. flag = raw_input()
  13. if encode(flag) == correct:
  14. print 'correct'
  15. else:
  16. print 'wrong'

代码逻辑

  1. 内置的密码“correct”(字符串“XlNkVmtUI1MgXWBZXCFeKY+AaXNt”)
  2. 要求输入字符串(也就是Flag)
  3. 将输入的字符串进行“encode”函数处理
  4. 如果“encode”函数处理后的字符串和密码“correct”的字符串一致,就成功

    解题逻辑

    把变量“correct ”的字符串,进行反“encode”函数的处理。

    ⌨反“encode”的Python脚本⌨

    先把字符串进行Base64解码,然后-16,再^32,对应脚本: ```python import base64

def decode(strInput): textOut = ‘’ strInputDe64 = base64.b64decode(strInput) for i in strInputDe64:

  1. # Python2 ↓
  2. # s = ord(i)-16
  3. # Python2 ↑

根据自己的环境选择-16使用的语句

    # Python3 ↓
    s = i - 16
    # Python3 ↑
    s = s ^ 32
    textOut += chr(s)
return textOut

correct = ‘XlNkVmtUI1MgXWBZXCFeKY+AaXNt’ flag = decode(correct) print(flag) ``` 除了Python版本的区别,应该没太大/别的问题。

现成工具/在线工具解法

CyberChefSUB(%7B’option’:’Decimal’,’string’:’16’%7D)XOR(%7B’option’:’Decimal’,’string’:’32’%7D,’Standard’,false)&input=WGxOa1ZtdFVJMU1nWFdCWlhDRmVLWStBYVhOdA)

这个在线数据处理的网站比较好的是可以多次处理数据,上面的Python代码逻辑在该网站的操作逻辑是:

  1. Base64解码,选择From Base64
  2. -16:选择减法函数SUB,注意值默认的是十六进制格式(Hex),要改成十进制(DECIMAL)
  3. ^32:选择异或函数XOR,同样注意值的进制

image.png