这题有提供加密程序,其实看懂后,最关键的是加密密码,如果不知道,就坑爹了,除非暴力破解匹配结果是否存在密钥的格式,鉴于这题密码为空,我就提供下面的python代码(如果觉得非要暴力破密码,自己加个循环读取密码字典之类,再判断结果是否符合密钥格式即可),程序理解不难,我就不赘述了。题目给出的密文解出来是4组密钥(附带4个\n),提交最后一组密钥即可。

# -*- coding: utf8 -*-

import hashlib

def md5(s):
	return hashlib.md5(s).hexdigest()

def evalCrossTotal(strMd5):
	r = 0
	for i in strMd5:
		r += int("0x%s" % i, 16)
	return r

def encryptString(strString, strPasswd):
	strPasswdMd5 = md5(strPasswd)
	intMd5       = evalCrossTotal(strPasswdMd5)
	r = []
	for i in range(len(strString)):
		r.append(ord(strString[i]) + int("0x%s" % strPasswdMd5[i%32], 16) - intMd5)
		intMd5 = evalCrossTotal(md5(strString[:(i+1)])[:16] + md5(str(intMd5))[:16])
	return " ".join(map(lambda x: str(x), r))

#以下就是自己写的
def decryptString(nList,strPasswd):
	strPasswdMd5 = md5(strPasswd)
	intMd5       = evalCrossTotal(strPasswdMd5)
	r = ""
	for i in range(len(nList)):
		r+=chr(nList[i] - int("0x%s" % strPasswdMd5[i%32], 16) + intMd5)
		intMd5 = evalCrossTotal(md5(r[:(i+1)])[:16] + md5(str(intMd5))[:16])
	return r

def foo():
	s="-149 -234 -157 -132 -187 -140 -157 -241 -158 -177 -85 -215 -180 -187 -173 -218 -161 -183 -133 -226 -136 -171 -126 -169 -155 -96 -169 -240 -163 -153 -137 -111 -123 -191 -151 -213 -151 -142 -152 -208 -118 -137 -136 -244 -157 -168 -187 -201 -170 -176 -192 -209 -205 -174 -163 -189 -126 -133 -148 -194 -145 -212 -170 -155 -148 -165 -167 -206 -171 -177 -88 -173 -125 -129 -129 -235 -121 -190 -161 -165"
	nList=eval('[%s]' %s.replace(' ',','))
	strPasswd='' #密码为空
	print decryptString(nList,strPasswd)

if __name__ == '__main__':
	foo()
	print "ok"
	pass

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Writeup请点击这里查看索引

查看所有Flag需要付费,需要获取所有Flag的童鞋请访问这里成为付费用户,可以自助把自己的注册邮箱加入网站白名单,即可免回复看到本站所有Flag

Flag大全地址:所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜,如果喜欢我的博客,愿意捐赠的,可以扫描下面的二维码

微信二维码:
支付宝二维码: