crypto

混合编码

1
2
文件:
JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzk7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM2ODsmIzY5OyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjNTI7JiM3NjsmIzEyMjsmIzEwNzsmIzUzOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc3OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiMxMDc7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzg7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjODQ7JiM2OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzUwOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc4OyYjMTA1OyYjNTY7JiM1MzsmIzc4OyYjMTIxOyYjNTY7JiM1MzsmIzc5OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM5OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjNjk7JiMxMTk7JiM3NzsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjNjU7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM2OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjMTA3OyYjNTM7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM4NDsmIzEwNzsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzEyMDsmIzc2OyYjMTIyOyYjNjk7JiMxMjA7JiM3ODsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjMTAzOyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjMTE5Ow==

打开文件发现是base64,使用在线解密工具http://tool.oschina.net/encrypt?type=3 得到unicode编码,再使用在线解密工具http://tool.oschina.net/encode 又得到base64编码,再解密一次,得到ascll码,转换之后得到flag

easychallenge

题目给的文件为.pyc文件,先将其反编译成.py文件。反编译可以下载uncompyle6工具或者使用在线反编译工具https://tool.lu/pyc/得到.py文件如下:

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
32
33
import base64

def encode1(ans):
s = ''
for i in ans:
x = ord(i) ^ 36
x = x + 25
s += chr(x)

return s


def encode2(ans):
s = ''
for i in ans:
x = ord(i) + 36
x = x ^ 36
s += chr(x)

return s


def encode3(ans):
return base64.b32encode(ans)

flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
print 'correct'
else:
print 'wrong'

根据代码,写出解密脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
# encoding: utf-8

import base64

a = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
b = base64.b32decode(a)

s = ''
for i in b:
s += chr((ord(i) ^ 36) - 36)
l = ''
for i in s:
l += chr((ord(i) - 25) ^ 36)
print ('flag is ',l)

得到flag


因为之前没有学习过python,所以从最基础的记录下

  • Python不用推荐用分号,而是用回车
  • def:相当于define,用来定义函数
1
2
3
4
5
6
7
# 例:简单的函数使用
# 定义函数
def hello():
print 'hello python!'

# 调用函数
hello()
  • for in循环:是一种循环结构,常用于遍历可迭代的对象
  • 在python中,for…else中的else语句会在循环正常执行完(即for不是通过break跳出而中断的)的情况下执行一次,while … else也是一样。
  • ord()函数:接受一个参数,返回值是int整数,返回其对应的ASCII
  • chr()函数:返回当前整数对应的 ASCII 字符,范围在range(256)内,参数可以是可以是10进制也可以是16进制的形式的数字
  • base64.b32encode(s):使用Base32编码字符串。s是要编码的字符串。

幂数加密

1
2
文件:
8842101220480224404014224202480122

百度搜到的二进制幂数加密:链接

而本题不是二进制的幂数加密,而是01248密码,又称云影密码,关于01248密码的链接

这种密码由0,1,2,4,8这几个数组成,但是以加法的形式可以得到0~9的各个数字,比如28=0,14=5,124=7,再用得到的数1-26表示字母的A-Z,0来作为分隔。

本题中密文:8842101220480224404014224202480122

8+8+4+2+1=23=W,依次类推就可以得到明文WELLDONE,从而得到flag


附上一个工具链接 ctf.ssleye.com/?tdsourcetag=s_pcqq_aiomsg