西普CTF部分题目(解密)

来源:互联网 发布:js改变div内容 编辑:程序博客网 时间:2024/05/18 11:49

1、simple algorithm
题目地址:http://www.simplexue.com/ctf/examctfdetail/737
题目给了一个py脚本和一个密文文件,py脚本将明文转换为密文,现在需要将密文文件中的密文解密得到明文。
加密算法为

flag = '[censored]'hflag = flag.encode('hex')iflag = int(hflag[2:], 16)def FAN(n, m):    i = 0    z = []    s = 0    while n > 0:        if n % 2 != 0:            z.append(2 - (n % 4))        else:            z.append(0)        n = (n - z[i])/2        i = i + 1    z = z[::-1]    l = len(z)    for i in range(0, l):        s += z[i] * m ** (l - 1 - i)    return si = 0r = ''while i < len(str(iflag)):    d = str(iflag)[i:i+2]    nf = FAN(int(d), 3)    r += str(nf)    i += 2print r 

很明显加密流程为将明文转换为16进制编码,在转化为10进制数,将每两位数字构成的数进行FAN函数运算,再拼接起来得到密文。
因此解密流程为:将0~99利用FAN函数求得加密值,建立加密值–>原数的字典,在明文中查字典拼接得到10进制数,转化为16进制数,再求取字符串。代码如下:

xxx={} #字典for kk in range(0,100):    xxx[FAN(kk, 3)]=kkff=open('enc.txt','r')dd=ff.read()print ddstr1=''jj=0while jj<len(dd):    if xxx.has_key(int(dd[jj:jj+4])):        str1+='%d'%(xxx[int(dd[jj:jj+4])])        jj+=4    elif xxx.has_key(int(dd[jj:jj+3])):        str1+='%02d'%(xxx[int(dd[jj:jj+3])])        jj+=3    elif xxx.has_key(int(dd[jj:jj+2])):        str1+='%02d'%(xxx[int(dd[jj:jj+2])])        jj+=2    elif xxx.has_key(int(dd[jj:jj+1])):        str1+='%02d'%(xxx[int(dd[jj:jj+1])])        jj+=1print str1  str2='%x'%(int(str1))print str2.decode('hex')

得到明文为SIS{a9ab115c488a311896dac4e8bc20a6d7},根据算法还缺一位字母,加上题目来自ASIS(一个伊朗的CTF比赛),故key应该为ASIS{a9ab115c488a311896dac4e8bc20a6d7}。不过该题存储的答案是SIS{a9ab115c488a311896dac4e8bc20a6d7}。
该题还是不简单的,国外的题目确实很新颖,值得学习,开拓思路。

2、Broken heart
文件地址:http://ctf5.simplexue.com/misc/myheart
该文件用linux的file指令看一下,是个7z格式的压缩包,解压得到myheart~,再用file指令看一下得到pcap-ng capture file - version 1.0,可知是个抓包文件,用wireshalk打开,选择file–>export objects–>HTTP,导出全部文件,修改第一个文件名为LoiRLUoq(0),得到23个文件,将文件命名为LoiRLUoq(0)~LoiRLUoq(22)
查看http数据包看到
这里写图片描述
其中的content-Range包括文件的字节位置。
linux中执行:

strings myheart.pcap | grep 'Content-Range' | awk '{print NR,$3}' > myheart.txt

输出到文件myheart.txt,将txt和导出的23个文件放在一个文件夹下
编写代码,输出到文件,后来观察头包含HDR,前面缺少13个字节,猜测可能是个PNG图片,补充PNG头的前13个字节。打开图片。

f=open('myheart.txt','r')x=list(f.readlines())f.close()listvalues=[]indexlist=[]for i in xrange(len(x)):    d=x[i].split()[1].split('/')[0].split('-') #提取前后两个数    flag=True    for kline in listvalues:        if (int(d[0])>=kline[0] and int(d[1])<=kline[1]):#若数在已存在的列表中,则取消存储            flag=False            break    if flag:        listvalues.append((int(d[0]),int(d[1])))#存储        indexlist.append(i) #存储原顺序,以得到文件名sortedpos=sorted([xx[0] for xx in listvalues]) #排序fresult=open('resultx.png','wb')fresult.write('89504E470D0A1A0A0000000D49'.decode('hex')) #写入png头,共13个字节for i in xrange(len(sortedpos)):    index=0    for searchnums in listvalues:        if(sortedpos[i]==searchnums[0]): #在存储的范围列表中找到位置序号            break        else:            index+=1    f=open('LoiRLUoq(%d)'%(indexlist[index]),'rb') #打开文件    if(i!=len(sortedpos)-1):        fresult.write(f.read()[:sortedpos[i+1]-sortedpos[i]])    else:        fresult.write(f.read())        f.close()fresult.close()print '执行完毕,请查看图片得到key'

这里写图片描述

3、黑客叔叔(雨袭团)内部交流题
密文链接:http://ctf5.simplexue.com/crypto/p0tt1%20.html
该题设计太差,完全需要脑洞,没有水平,完全是坑爹的节奏。题目给了125位长度的密文,有大小有小写有数字。看起来不是base64加密的,不过去掉最后一位试一下base64解码,得到umfpbljhawrfrmxhz19zmf9megnrmw45x3donhq|01|03|07|+|+1|+3|+7|2+1|2+2|2+6|2+7|2+9|3+0|3+3|3+7|3
仍然很大的坑,后有人提示后面的数字代表前面的字符串中第n个字符应变换为大写,+代表*10+,如+表示10,+7表示17,2+9表示29,3+7表示37。最后面还有个特殊的3,啥意思(仍在坑人)。试了一下是代表最后的3位需要为大写。最后在base64解码一下得到key。国内出题人的逻辑和水平堪忧,题目差评。

import base64sss="dW1mcGJsamhhd3Jmcm14aHoxOXptZjltZWducm13NDV4M2RvbmhxfDAxfDAzfDA3fCt8KzF8KzN8Kzd8MisxfDIrMnwyKzZ8Mis3fDIrOXwzKzB8MyszfDMrN3wzK"x=base64.b64decode(sss[:-1])print x#umfpbljhawrfrmxhz19zmf9megnrmw45x3donhq|01|03|07|+|+1|+3|+7|2+1|2+2|2+6|2+7|2+9|3+0|3+3|3+7|3res=x.split('|')content=res[0]result=list(content)for ke in res[1:-1]:    numstr=ke.replace('+','*10+')    if numstr[0]=='*':        numstr='1'+numstr    if numstr[-1]=='+':        numstr=numstr+"0"    num=eval(numstr)    result[num-1]=chr(ord(result[num-1])-32)strs=''.join(result)+"="#长度不够4的倍数,最后补上等号strs=strs[:-3]+strs[-3:].upper()#最后三位变为大写print strs#UmFpblJhaWRfRmxhZ19zMF9meGNrMW45X3doNHQ=print "Flag is "+base64.b64decode(strs)#Flag is RainRaid_Flag_s0_fxck1n9_wh4t

4、zcrypt(ASIS2015)
给了一个附件及一串字符串提示和一个工具pkcrack
查看附件是个7z文件,解压再看一下是wireshalk文件,用wireshalk打开导出全部http对象为文件,发现7个很特殊的文件,均为zip格式,文件大小依次减小为一半,flag文件在最后一个压缩包中。
这里写图片描述
根据提示,搜索发现,从最大的压缩包入口解密,依次解,最后解开flag压缩包得到flag。根据pkcrack说明,需要一个参考文件,且文件sha1值为317fc6d41e3d0f79f3e9c470cda48f52a7168c6f,但参考文件哪里有呢。搜索发现有个地方有sha1值满足的文件下载地址。
下载后得到一个压缩包,解压(密码: infected)得到参考文件,重命名为plaintext,zip压缩为参考zip。

root@kali:~/Desktop/1234# sha1sum plaintext 317fc6d41e3d0f79f3e9c470cda48f52a7168c6f  plaintextroot@kali:~/Desktop/1234# zip plaintext.zip plaintext  adding: plaintext (deflated 0%)
root@kali:~/Desktop/1234# extract xnCub4eW 317fc6d41e3d0f79f3e9c470cda48f52a7168c6froot@kali:~/Desktop/1234# pkcrack  -p plaintext -c 317fc6d41e3d0f79f3e9c470cda48f52a7168c6f -P plaintext.zip -d decrypted1.zip -C xnCub4eW Files read. Starting stage 1 on Fri Sep 11 14:03:38 2015Generating 1st generation of possible key2_2725465 values...done.Found 4194304 possible key2-values.Now we're trying to reduce these...Lowest number: 959 values at offset 2722246省略中间的Lowest number: 97 values at offset 2689991Done. Left with 97 possible Values. bestOffset is 2689991.Stage 1 completed. Starting stage 2 on Fri Sep 11 14:05:25 2015Ta-daaaaa! key0=70a8cda4, key1=547222ce, key2=4c7d562eProbabilistic test succeeded for 35479 bytes.Stage 2 completed. Starting zipdecrypt on Fri Sep 11 14:05:52 2015Decrypting 317fc6d41e3d0f79f3e9c470cda48f52a7168c6f (ed5e829f7f1c27cbb62e5458)... OK!Decrypting 2VT&Wb!XJ0dzG7JyvyH-II#J (15b6960191cbc71256147d67)... OK!Finished on Fri Sep 11 14:05:52 2015

得到2VT&Wb!XJ0dzG7JyvyH-II#J 解密文件,重复上述步骤,直到最后一个文件,得到flag为ASIS{b72be7f18502dde0c2ca373ee3c2b03e}
bash脚本如下:

#!/bin/shPATH=$PATH:~/work/tools/pkcrackecho $PATHcd ~/Desktop/1234#路径请修改为自己所在的资源和程序目录#下面的文件名可通过zipinfo filename来依次获得,按照文件从大到小顺序执行cp rawplaintext plaintextzip plaintext.zip plaintextextract xnCub4eW 317fc6d41e3d0f79f3e9c470cda48f52a7168c6fpkcrack  -p plaintext -c 317fc6d41e3d0f79f3e9c470cda48f52a7168c6f -P plaintext.zip -d decrypted.zip -C xnCub4eW unzip -o decrypted.zipmv '2VT&Wb!XJ0dzG7JyvyH-II#J' plaintextzip plaintext.zip plaintextextract E0frzRAi cohaxOTDL4Iy4sK7DWFU6Mw6pkcrack  -p plaintext -c cohaxOTDL4Iy4sK7DWFU6Mw6 -P plaintext.zip -d decrypted.zip -C E0frzRAi unzip -o decrypted.zipmv 'Yy#FoK+YmAgM0#4*C2^i+WWA' plaintextzip plaintext.zip plaintextextract BOQqupmS 'JxdIs^43_74nc-1h3WGphjSUGigLPl'pkcrack  -p plaintext -c 'JxdIs^43_74nc-1h3WGphjSUGigLPl' -P plaintext.zip -d decrypted.zip -C BOQqupmSunzip -o decrypted.zipmv 'fIIutQ+18TE0*Odi*XxM' plaintextzip plaintext.zip plaintextextract EX8UPdUb '7U0(ZB%8AFX8pd!9FN~v1fePI@s'pkcrack  -p plaintext -c '7U0(ZB%8AFX8pd!9FN~v1fePI@s' -P plaintext.zip -d decrypted.zip -C EX8UPdUbunzip -o decrypted.zipmv 'l@IqLO0zJkujH0h3Fj#Ztp!m'  plaintextzip plaintext.zip plaintextextract YupE1RB8 'e7m1Jy+#%H!%bBD1FvCB)m!JM0gE'pkcrack  -p plaintext -c 'e7m1Jy+#%H!%bBD1FvCB)m!JM0gE' -P plaintext.zip -d decrypted.zip -C YupE1RB8unzip -o decrypted.zipmv 'fU2G8r)1DD2QQ_xNWuclyde#'  plaintextzip plaintext.zip plaintextextract EO4qqhn8 '7^&V8S(J63s$K9csDk~xaFRDGK&Z'pkcrack  -p plaintext -c '7^&V8S(J63s$K9csDk~xaFRDGK&Z' -P plaintext.zip -d decrypted.zip -C EO4qqhn8unzip -o decrypted.zipmv '%dQ+skWS84uT#KSKY1uND$v+'  plaintextzip plaintext.zip plaintextextract VuwPO9eM '9Ux)@Zzr1h03PA#p&#u~JWWgUtpF'pkcrack  -p plaintext -c '9Ux)@Zzr1h03PA#p&#u~JWWgUtpF' -P plaintext.zip -d decrypted.zip -C VuwPO9eMunzip -o decrypted.zipcat flag.txt
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机下载游戏自动扣费怎么办 用手机账号登陆游戏换手机怎么办 在qq上被骗充q币怎么办 微信借钱后删了好友怎么办 财付通绑定了其它人的身份证怎么办 微信支付密码忘了没绑银行卡怎么办 微信没有绑银行卡忘记密码怎么办 威信解绑银行卡支付密码望了怎么办 买了个qq号绑定了财付通怎么办 淘宝买的东西下架了怎么办 微信红包充话费充错了怎么办 手机qq不能发红包或转账怎么办 qq给人发红包被骗了怎么办 qq发红包对方看不不到怎么办 手机浏览器支付页面弹不出来怎么办 新手机登录微信需要验证怎么办 手机淘宝注册账号换手机号后怎么办 冒充微信好友诈骗被骗了怎么办 刚刚激活的电信手机号码忘了怎么办 用手机充话费充错了怎么办 王者荣耀号丢了换成了别的号怎么办 微信给空号q币怎么办 qq密码被别人改了怎么办怎么登 qq刚改了密码忘了怎么办 qq密码忘了想改密码怎么办 qq账号和密码都忘了怎么办 我的微信被别人改了密码怎么办 微信被盗密码被改了怎么办 微信被盗了密码都被改了怎么办 微信被别人改密码改手机号了怎么办 微信号手机号码换了密码改了怎么办 电信充值卡的密码刮花了怎么办 qq充了q币不到账怎么办 开通黄钻不支持手机话费开通怎么办 银行卡给红包充值迟迟不到账怎么办 我想用信用卡往微信零钱充钱怎么办 修改密保手机跳过原手机验证怎么办 骏卡有用但是充不进去怎么办 在云南移动上充错话费了怎么办 手机版本太低安装不了支付宝怎么办 手机下载支付宝后找不到了怎么办