携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情
这是什么
小明是一个软件专业的高材生,但是老师布置的这次的作业似乎不怎么靠谱,因为他们老师以前是学物理的!喜欢乱七八糟命名文件,还喜欢奇奇怪怪的编码。你快帮小明看一下这题,小明准备好了一箱子辣条。 注意:得到的 flag 请包上 flag{} 提交.
下载附件发现是个APK文件,感觉很奇怪,我们将其放入010editor查看下数据。
发现数据形似jsfuck编码,类似于如下这种。
![] !![][][[]]+[![]]
我们用解码工具进行解码。即出来flag。
[MRCTF2020]古典密码知多少
先下载附件,根据题目已知,考察古典密码。
下载后根据识图发现是标准银河字母加密, 我们解密一下。
得到FGCP FLI RTU A S YO N 。
然后怀疑是栅栏密码。
flag{CRYPTOFUN}
[NCTF2019]Keyboard
下载附件感觉似曾相识,回想一下看着像九键键盘。解密方法字母在26键的第一行中是第几个字母,就对应去看九键的第几个键,当前字母出现几次,就去找对应键位上的第几个字母。
找了个大佬的脚本:
cipher="ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee"
base=" qwertyuiop"
a=[" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
l=cipher.split(" ")
#print(l) #l是按空格分割得到的list
for part in l:
s=base.index(part[0]) #在26键第一行中是第几个
count=len(part)
print(a[s][count-1],end="")
得到
youaresosmartthatthisisjustapieceofcake
传感器
5555555595555A65556AA696AA6666666955
这是某压力传感器无线数据包解调后但未解码的报文(hex)
已知其ID为0xFED31F,请继续将报文完整解码,提交hex。
曼彻斯特编码。直接上脚本。
cipher='5555555595555A65556AA696AA6666666955'
def iee(cipher):
tmp=''
for i in range(len(cipher)):
a=bin(eval('0x'+cipher[i]))[2:].zfill(4)
tmp=tmp+a[1]+a[3]
print(tmp)
plain=[hex(int(tmp[i:i+8][::-1],2))[2:] for i in range(0,len(tmp),8)]
print(''.join(plain).upper())
iee(cipher)
得到
flag{FFFFFED31F645055F9}
[GUET-CTF2019]BabyRSA
经典rsa,给我我们p+q,(p+1)(q+1),e,d,以及密文C,我们想要得到m要求出n。
n = (p+1) (q+1) - (p+q) - 1
我们直接可以整个脚本直接算m:
// python2
import gmpy2
a =0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea
b=0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740
e=0xe6b1bee47bd63f615c7d0a43c529d219
d=0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5
enc_flag=0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a
n=b-a-1
phi=n-a+1
d=gmpy2.invert(e,phi)
m=pow(enc_flag,d,n)
flag=hex(m)[2:].decode('hex')
print(flag)
#flag{cc7490e-78ab-11e9-b422-8ba97e5da1fd}
感觉rsa算法也就是当某部分缺失时我们先将其求出来,然后再根据公式m=pow(enc_flag,d,n),再进行求解即可,感觉还是得学学数学才好做吖。