带你上分,顺便拿下CTF|BugKu 密码学

562 阅读19分钟

BugKu加密题型

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战


1.滴答滴

摩斯密码 -... -.- -.-. - ..-. -- .. ... -.-.

直接解密 KEY{bkctfmisc}

使用的工具 ctf.ssleye.com/morse.html>

本地fccode工具 github.com/findneo/fco…

2.聪明的小羊

使用fccode工具 输入

git clone https://github.com/findneo/fcode.git

或者

git clone git@github.com:findneo/fcode.git

题干:KYsd3js2E{a2jda},一只小羊翻过了2个栅栏, 使用在线工具 tool.bugku.com/jiemi/

栏数为2

KEY{sad23jjdsa2}

3.ok

Ook!解混淆

来自 www.splitbrain.org/services/oo…

flag{ok-ctf-1234-admin}

www.splitbrain.org/services/oo…

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.

来自 ctf.bugku.com/challenges#…

4.这不是摩斯密码

Brainfuck解混淆

来自 www.splitbrain.org/services/oo…

flag{ok-c2tf-3389-admin}

5.简单加密

e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA

凯撒,用python跑一下

方法一代码:

str = "e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA"
for a in range(127):
key = ""
for i in str:
temp = chr((ord(i)+a)%127)
if 32<ord(temp)<127:
key = key + temp
feel = 1
else:
feel = 0
break
if feel == 1:
print(key)

来自 ctf.yuanlichenai.cn/2018/05/07/…

该段为base64编码: a2V5ezY4NzQzMDAwNjUwMTczMjMwZTRhNThlZTE1M2M2OGU4fQ== 然后使用base64解码

tool.chinaz.com/Tools/Base6…

得到flag: key{68743000650173230e4a58ee153c68e8}

6.散乱的密文

lf5{ag024c483549d7fd@@1} 一张纸条上凌乱的写着2 1 6 5 3 4 2 1 6 5 3 4 l f 5 { a g 0 2 4 c 4 8 3 5 4 9 d 7 f d @ @ 1 } 按照顺序读下来 f25dl03fa4d1g87}{c9@544@

进行栅栏解密,栅栏等于6 www.qqxiuzi.cn/bianma/zhal… 得到 flag{52048c453d794df1}@@,去掉两个@@

7.凯撒部长的奖励

要点: 词频分析 quipqiup.com/

或者脚本,注意代码格式

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
 
upperDict=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
lowerDict=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
 
def cesarWithLetter(ciphertext,offset):
'''
凯撒密码 :
只转换字母(包括大写小写)
参数 : 
ciphertext : 明文
offset : 偏移量
'''
result = ""
for ch in ciphertext:
if ch.isupper():
result=result+upperDict[((upperDict.index(ch)+offset)%26)]
elif ch.islower():
result=result+lowerDict[((lowerDict.index(ch)+offset)%26)]
elif ch.isdigit():
result=result+ch
else:
result=result+ch
return result
 
def printAllResult(ciphertext):
'''
打印所有偏移结果
'''
for i in range(len(upperDict)):
print cesarWithLetter(ciphertext,i)
 
#ciphertext=input("Please input the words : ")
ciphertext = "MSWbyly_Cm_sIol_lYqUlx_yhdIs_Cn_Wuymul_il_wuff_bcg_pCwnIl_cm_u_Yrwyffyhn_guh_cz_sio_quhn_ni_ayn_bcm_chzilguncihm_sio_wuh_dich_om"
printAllResult(ciphertext)
 
 

可以确定, MSW=SYC

SYChere_Is_yOur_rEwArd_enjOy_It_Caesar_or_call_him_vIctOr_is_a_Excellent_man_if_you_want_to_get_his_informations_you_can_join_us,添上{}就是flag

8.一段Base64

解法1. salt-neko.com/2018/02/14/… 解法2 使用编码工具Converter,将文本内容复制进去 按照以下次序解码base64、Unescape、Hex to Text、Unescape(只要括号内的参数)、Dec to Text、Decode HTML。最后得到Unicode编码: 来自 ctf.yuanlichenai.cn/2018/05/07/… &#102;&#108;&#97;&#103;&#37;&#55;&#66;&#99;&#116;&#102;&#95;&#116;&#102;&#99;&#50;&#48;&#49;&#55;&#49;&#55;&#113;&#119;&#101;&#37;&#55;&#68;

最后url解码得到flag(手动解码*^▽^*:”%7B”=”{“,”%7D”=”}”) 解法3

#coding:utf-8
#python 2.7
import urllib
import re
#1. 第一层base64
with open('8base64.txt') as f:
    cipher1 = f.read()
plain1 = cipher1.decode('base64')
# print plain1, type(plain1)

#2. 第二层,根据plain1的形式(0-7的整数),推测为8进制加密
cipher2 = plain1
cipher2 = re.findall(r'\d+', cipher2)
# print cipher2
plain2 = ''
for i in cipher2:
    plain2 += chr(int(i, 8))
# print plain2
#3. 第三层,根据plain2的形式(\xdd),推测为16进制加密
cipher3 = plain2
cipher3 = re.findall(r'\d+', cipher3)
# print cipher3
plain3 = ''
for i in cipher3:
    plain3 += chr(int(i, 16))
# print plain3
#4. 第四层,根据plain3的形式(udd*),推测为unicode
cipher4 = plain3
cipher4 = re.findall(r'u[\d\w]+', cipher4)
# print cipher4
cipher4 = ''.join(cipher4).replace('u', '\u')
# print cipher4
plain4 = cipher4.decode('unicode-escape').encode('utf-8')#将unicode转中文,来自知乎
# print plain4
#5. 第5层,根据plain4形式,将所有数字转ASCII即可
cipher5 = plain4
cipher5 = re.findall('\d+', cipher5)
# print cipher5
plain5 = ''
for i in cipher5:
    plain5 += chr(int(i))
# print plain5
#6. 第6层,百度plain5的编码格式(&#x)得到解码方法
cipher6 = plain5
# print cipher6
cipher6 = re.findall(r'\d+\w?', cipher6)
# print cipher6
plain6 = ''
for i in cipher6:
    plain6 += chr(int(i, 16))
# print plain6
#7. 第7层,百度plain6的编码格式(&#)得到解码方法
cipher7 = plain6
cipher7 = re.findall('\d+', cipher7)
# print cipher7
flag = ''
for i in cipher7:
    flag += unichr(int(i))
# print flag
flag = urllib.unquote(flag)
print flag

#作者:水月々轩辕 #链接:www.jianshu.com/p/3f19c1690… #來源:简书 #简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

求得flag

flag{ctf_tfc201717qwe}

9 .!?

来自 ctf.bugku.com/challenges#… Ook!解混淆

..... ..... ..... ..... !?!!. ?.... ..... ..... ..... .?.?! .?... .!...
..... ..... !.?.. ..... !?!!. ?!!!! !!?.? !.?!! !!!.. ..... ..... .!.?.
..... ...!? !!.?. ..... ..?.? !.?.. ..... .!.?. ..... ..... !?!!. ?!!!!
!!!!! !?.?! .?!.? ..... ....! ?!!.? ..... ...?. ?!.?. ..... !.?.. .....
!?!!. ?!!!! !!?.? !.?!! !!!!! !!!!. ..... ...!. ?.... ...!? !!.?. .....
?.?!. ?..!. ?.... ..... !?!!. ?!!!! !!!!? .?!.? !!!!! !!!!! !!!.? .....
..!?! !.?.. ....? .?!.? ....! .!!!. !!!!! !!!!! !!!!! !!.?. ..... .!?!!
.?... ...?. ?!.?. ..... !.!!! !!!!! !.?.. ..... ..!?! !.?.. ..... .?.?!
.?... ..... !.?.

来自 ctf.bugku.com/challenges#…

flag{bugku_jiami}

10.+[]-

Brainfuck解混淆 来自 ctf.bugku.com/challenges#…

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ [->-- ---<] >.<++ ++[-> ++++< ]>+++ .<+++
[->-- -<]>- ----. ++++. <+++[ ->+++ <]>+. <++++ [->-- --<]> ----- -.<++
+[->+ ++<]> ++.-. ----- ---.< +++[- >+++< ]>+++ .---- .<+++ [->-- -<]>-
.<+++ +++[- >---- --<]> ----- ----. +.<++ +++++ +[->+ +++++ ++<]> +++++
+++++ .<

flag{bugku_jiami_23}

11.奇怪的密码

要点: 变异凯撒

python脚本 l

ist = 'gndk€rlqhmtkwwp}z'
flag = ''
num = 1
for i in list:
a = ord(i)
a -= num
flag += chr(a)
num +=1
 
print(flag)

来自 ctf.yuanlichenai.cn/2018/05/07/…

python3.5 11strangepasswd.py

flag₧lei_ci_jiami flag{lei_ci_jiami}

12.托马斯.杰斐逊

1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: <KPBELNACZDTRXMJQOYHGVSFUWI <
3: <BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: <RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: <IHFRLABEUOTSGJVDKCPMNZQWXY <
6: <AMKGHIWPNYCJBFZDRUSLOQXVET <
7: <GWTHSPYBXIZULVKMRAFDCEONJQ <
8: <NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: <QWATDSRFHENYVUBMCOIKZGJXPL <
10: <WABMCXPLTDSRJQZGOIKFHENYVU <
11: <XPLTDAOIKFZGHENYSRUBMCQWVJ <
12: <TDSWAYXPLVUBOIKZGJRFHENMCQ <
13: <BMCSRFHLTDENQWAOXPYVUIKZGJ <
14: <XPHKZGJTDSENYVUBMLAOIRFCQW <

密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12 密文:HCBTSXWCRQGLES 题干知:

①根据密钥将行,进行重新排序

2:  <KPBELNACZDTRXMJQOYHGVSFUWI <
5:  <IHFRLABEUOTSGJVDKCPMNZQWXY <
1:  <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
3:  <BDMAIZVRNSJUWFHTEQGYXPLOCK <
6:  <AMKGHIWPNYCJBFZDRUSLOQXVET <
4:  <RPLNDVHGFCUKTEBSXQYIZMJWAO <
9:  <QWATDSRFHENYVUBMCOIKZGJXPL <
7:  <GWTHSPYBXIZULVKMRAFDCEONJQ <
8:  <NOZUTWDCVRJLXKISEFAPMYGHBQ <
14: <XPHKZGJTDSENYVUBMLAOIRFCQW <
10: <WABMCXPLTDSRJQZGOIKFHENYVU <
13: <BMCSRFHLTDENQWAOXPYVUIKZGJ <
11: <XPLTDAOIKFZGHENYSRUBMCQWVJ <
12: <TDSWAYXPLVUBOIKZGJRFHENMCQ <

② 同时有一一对应,即 密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12 密文: H, C, B, T, S, X, W, C, R, Q, G, L, E, S ③然后根据第一个密文的位置确定位置,在每行中将每个密文及其后面字母以到最前面【理解为都向右移位】 例如:

HGVSFUWIKPBELNACZDTRXMJQOY
CPMNZQWXYIHFRLABEUOTSGJVDK
BVIQHKYPNTCRMOSFEZWAXJGDLU
TEQGYXPLOCKBDMAIZVRNSJUWFH
SLOQXVETAMKGHIWPNYCJBFZDRU
XQYIZMJWAORPLNDVHGFCUKTEBS
WATDSRFHENYVUBMCOIKZGJXPLQ
CEONJQGWTHSPYBXIZULVKMRAFD
RJLXKISEFAPMYGHBQNOZUTWDCV
QWXPHKZGJTDSENYVUBMLAOIRFC
GOIKFHENYVUWABMCXPLTDSRJQZ
LTDENQWAOXPYVUIKZGJBMCSRFH
ENYSRUBMCQWVJXPLTDAOIKFZGH
SWAYXPLVUBOIKZGJRFHENMCQTD

④ 用脚本将一ing移位后的每一列遍历出来,并找到特殊的句子即为flag 1)本题脚本

a ="""HGVSFUWIKPBELNACZDTRXMJQOY
CPMNZQWXYIHFRLABEUOTSGJVDK
BVIQHKYPNTCRMOSFEZWAXJGDLU
TEQGYXPLOCKBDMAIZVRNSJUWFH
SLOQXVETAMKGHIWPNYCJBFZDRU
XQYIZMJWAORPLNDVHGFCUKTEBS
WATDSRFHENYVUBMCOIKZGJXPLQ
CEONJQGWTHSPYBXIZULVKMRAFD
RJLXKISEFAPMYGHBQNOZUTWDCV
QWXPHKZGJTDSENYVUBMLAOIRFC
GOIKFHENYVUWABMCXPLTDSRJQZ
LTDENQWAOXPYVUIKZGJBMCSRFH
ENYSRUBMCQWVJXPLTDAOIKFZGH
SWAYXPLVUBOIKZGJRFHENMCQTD"""
b="HCBTSXWCRQGLES"
a=a.splitlines()
for j in range(26):
for i in range(len(b)):
print(a[i][j],end=''),
print()

来自 ctf.yuanlichenai.cn/2018/05/07/…

2)通用脚本

list1 = """因为key的关系,所以这一行换行很重要
ZWAXJGDLUBVIQHKYPNTCRMOSFE
KPBELNACZDTRXMJQOYHGVSFUWI
BDMAIZVRNSJUWFHTEQGYXPLOCK
RPLNDVHGFCUKTEBSXQYIZMJWAO
IHFRLABEUOTSGJVDKCPMNZQWXY
AMKGHIWPNYCJBFZDRUSLOQXVET
GWTHSPYBXIZULVKMRAFDCEONJQ
NOZUTWDCVRJLXKISEFAPMYGHBQ
XPLTDSRFHENYVUBMCQWAOIKZGJ
UDNAJFBOWTGVRSCZQKELMXYIHP
MNBVCXZQWERTPOIUYALSKDJFHG
LVNCMXZPQOWEIURYTASBKJDFHG
JZQAWSXCDERFVBGTYHNUMKILOP"""
key = [2 ,3 ,7 ,5 ,13 ,12 ,9 ,1 ,8 ,10 ,4 ,11 ,6]
crypto = 'NFQKSEVOQOFNP'
 
# 换行操作
list2 = []
list1 = list1.splitlines()
for i in key:
list2.append(list1[i])
 
# 将密文移动到第一列生成密码表
def Table():
table = []
for i in range(len(key)):
num = list2[i].find(crypto[i])
list = ''
for j in range(26):
if num >= 25:
num -= 26
list += list2[i][num]
num += 1
table.append(list)
return table
 
# 遍历
def Flag(table):
for j in range(26):
for i in range(len(key)):
print(table[i][j] ,end=''),
print()
 
 
if __name__ == '__main__':
table = Table()
Flag(table)
 
# FIREINTHEHOLE

来自 ctf.yuanlichenai.cn/2018/05/07/…

⑤ flag{XSXSBUGKUADMIN} 实际为小写flag{xsxsbugkuadmin}

13.zip伪加密

修改压缩源文件数据区的全局加密为00 00 且压缩源文件目录区的全局方式位标记为00 00

flag{Adm1N-B2G-kU-SZIP}

14.告诉你个秘密(ISCCCTF)

636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A5769426961453067

先进行HEX16进制转ASCII

得到:cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g www.rapidtables.com/convert/num…

再进行base64解码 得到:r5yG lp9I BjM tFhBT6uh y7iJ QsZ bhM tool.chinaz.com/Tools/Base6…

结合字符组,观察键盘上的位置,r5yG中间是t,以此类推答案就是tongyuan 经试几次,输入大写的 TONGYUAN

15这不是MD5

666c61677b616537333538376261353662616566357d

直接进行16进制转字符串

www.rapidtables.com/convert/num…

flag{ae73587ba56baef5}

16贝斯家族

base家族,应该不是base64,及逆行尝试

base16/32/36/58/62解码失败

ctf.ssleye.com/base64.html ctf.ssleye.com/ 在尝试base91解码时,解码成功。 ctf.ssleye.com/base91.html

flag{554a5058c9021c76}

17富强民主

核心价值观解码题型,在线解码

ctf.ssleye.com/cvencode.ht…

flag{90025f7fb1959936}

18Python(N1CTF)

题目提供两个文件,challenge.py和N1ES.py 。

虽然似乎在模仿AES,但是实际上明文和密文是一一映射的,复杂度不是恶心的100^48 而只是100*48 ,穷举是很快的。一个小障碍是N1ES.py 第71行的L, R = R, L ,这导致了明文的[0:8] 、[8:16]、[16:24]、[24:32]、[32:40]、[40:48] 分别对应的是密文的[8:16]、[0:8] 、[24:32]、[16:24]、[40:48]、 [32:40] ,写穷举脚本时需要注意。

来自 findneo.github.io/180310N1CTF…

编写crack.py文件

import base64,string,N1ES
key = "wxy191iss00000000000cute"
c = base64.b64decode("HRlgC2ReHW1/WRk2DikfNBo1dl1XZBJrRR9qECMNOjNHDktBJSxcI1hZIz07YjVx")
n1es = N1ES.N1ES(key)
f=""
for i in xrange(3):
for j in xrange(16):
for k in string.printable:
s="x"*i*16+"x"*j+k+"x"*(48-i*16-j-1)
e=n1es.encrypt(s)
check=c[i*16+j+8]==e[i*16+j+8] if j<8 else c[i*16+j-8]==e[i*16+j-8]
if check:
f+=k
break
print f
# N1CTF{F3istel_n3tw0rk_c4n_b3_ea5i1y_s0lv3d_/--/}

来自 findneo.github.io/180310N1CTF…

加密过程和round_add都是可逆的,直接在源码文件中加入解密用代码如下:

19进制转换

要点 编程基础、进制转换 解题

import binascii
text = "d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e"
solution = ''
text2 = text.split(' ')
for x in text2:
    print x
    if x[0] == 'b': #binary
        solution += chr(int(x[1:],2))    
    elif x[0] == 'x': # hexadecimal
        solution += x[1:].decode("hex")    
    elif x[0] == 'd': # decimal
        solution += chr(int(x[1:]))    
    elif x[0] == 'o': # octal
        solution += chr(int(x[1:],8))
print solution

来自 www.sdnisc.cn/detail_285_…

flag{1e4bf81a6394de5abc005ac6e39a387b}

20afine

考点 仿射加密

解题过程

def affine(a,b):
pwd = {}
for i in range(26):
pwd_dic[chr(((a*i+b)%26+97))] = chr(i+97)
return pwd_dic
if __name__ == '__main__':
pwd_dic = {}
pwd = 'szzyfimhyzd'
plain = []
pwd_dic = affine(17,-8)
for i in pwd:
plain.append(pwd_dic[i])
print "Flag is : " + "".join(plain)

flag{affineshift}

21Crack it

shadow文件破解,在kali下直接使用john进行破解

flag{hellokitty}

22.RSA

解题思路 blog.csdn.net/shenzhang73…

看出e特别大,在e特别大的情况下,可以使用wiener attack的方法进行破解,正好工具RsaCtfTool集成了wiener attack的方法, 所以可以直接使用RsaCtfTool计算私钥

1)安装工具 Ganapati/RsaCtfTool Github源码 github.com/Ganapati/Rs… github.com/Ganapati/Rs…

RsaCtfTool的安装及使用

来自 www.freebuf.com/sectool/185…

安装失败

安装完,执行

python /mnt/d/security/emulation/ctftools/RsaCtfTool/R
saCtfTool.py --createpub -n 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597 -e 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619 > 22rsa.pem
python /mnt/d/security/emulation/ctftools/RsaCtfTool/RsaCtfTool.py --publickey 22rsa.pem --private > 22rsa.key
python /mnt/d/security/emulation/ctftools/RsaCtfTool/RsaCtfTool.py --key 22rsa.key --dumpkey

得到p,q,e,直接解密密文,得到flag,

代码如下所示:

#coding:utf-8
from libnum import n2s,s2n
import base64
def gcd(a, b):   #求最大公约数
if a < b:
    a, b = b, a
while b != 0:
    temp = a % b
    a = b
    b = temp
return a
 
def egcd(a, b):
if a == 0:
    return (b, 0, 1)
else:
    g, y, x = egcd(b % a, a)
    return (g, x - (b // a) * y, y)
 
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
    raise Exception('modular inverse does not exist')
else:
    return x % m
    
if __name__ == "__main__":
p=15991846970993213322072626901560749932686325766403404864023341810735319249066370916090640926219079368845510444031400322229147771682961132420481897362843199
q=28805791771260259486856902729020438686670354441296247148207862836064657849735343618207098163901787287368569768472521344635567334299356760080507454640207003
e = 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619
# tmp = base64.b64decode("qzogS7X8M3ZOpkUhJJcbukaRduLyqHAPblmabaYSm9iatuulrHcEpBmil7V40N7gbsQXwYx5EBH5r5V2HRcEIOXjgfk5vpGLjPVxBLyXh2DajHPX6KvbFpQ8jNpCQbUNq8Hst00yDSO/6ri9dk6bk7+uyuN0b2K1bNG5St6sCQ4qYEA3xJbsHFvMqtvUdhMiqO7tNCUVTKZdN7iFvSJqK2IHosIf7FqO24zkHZpHi31sYU7pcgYEaGkVaKs8pjq6nbnffr4URfoexZHeQtq5UAkr95zD6WgvGcxaTDKafFntboX9GR9VUZnHePiio7nJ3msfue5rkIbISjmGCAlj+w==")
#  = 
d = modinv(e, (p - 1) * (q - 1))
# c=s2n(tmp)
c = 38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192
#c = 225031483444634056931067907865853799650197225351377050632290334721073031287701730297815850654473721939907812470206115171738967740183098960272963323728747481560137205796840356532306950935686580268408289864109695494835661414073083573249882362332920722000099781994315336570711188934565379141406727420346806389405536474102730682155998263607095718543239272202402139286809779368710600842078606046563228470023546348908618719147790859257980882643030144242048154566691808688844513142261099020381730517293884263384819159874220288293023868919557980548807831273449743064237407705987056818011286315950476959812697067649075359373253
n = p*q
m=pow(c,d,n)
print n2s(m)

作者:段_Ross 来源:CSDN 原文:blog.csdn.net/shenzhang73… 版权声明:本文为博主原创文章,转载请附上博文链接!

flag{Wien3r_4tt@ck_1s_3AsY}

23来自宇宙的信号

对照密码表得到flag,参考百度百科: 标准银河字母: baike.baidu.com/item/%E6%A0…

flag{nopqrst}