今天做CTF练习题的时候碰到这样一道题,挺有趣的,记一下。
题目只有一个加密压缩包,里面就有一个flag.txt的文件,显然就是需要设法破解出这个压缩包的密码。
另外题目有一句话写着trylowerandupper。直译就是试试小写和大写。直接用这个作为密码,发现无效,全部转成大写,发现也无效。
想了一下,可能正确的密码应该就是把这句话的部分字母改成大写,部分字母改成小写。那么我们的思路就是去生成这样的一个字典,然后用跑字典的软件ARCHPR去跑一下。
trylowerandupper这句话共有16个字母,每个字母都有大小写两种可能,那么就有2的16次方种可能性,也就是65536种,应该算不算很多。我们用js生成一下字典,并储存到textarea中。
<!DOCTYPE html>
<html>
<head>
<title></title>
<textarea id="textarea"></textarea>
</head>
<body>
</body>
<script type="text/javascript">
var cipher = 'trylowerandupper'
var dict = []
function crossdict(l,u){
var tmp1 = [].concat(dict);
if(tmp1.length){
for(var i,i=0;i<tmp1.length;i++){
tmp1[i] += l;
}
}
else{
tmp1 = [l];
}
var tmp2 =[].concat(dict);
if(tmp2.length){
for(var i,i=0;i<tmp2.length;i++){
tmp2[i] += u;
}
}
else{
tmp2 = [u];
}
dict = tmp1.concat(tmp2)
}
function makedict(){
for(var i,i=0;i<cipher.length;i++){
crossdict(cipher[i].toLowerCase(),cipher[i].toUpperCase());
}
var value = ''
for(var i=0;i<dict.length;i++){
value += dict[i] + '\n';
}
document.getElementById("textarea").value = value;
}
makedict();
</script>
</html>
随便找个浏览器运行一下,然后把textarea中的内容复制到新建的txt中,保存成字典。
接着就是跑字典了,意料之外的迅速呀,一下子就得到了压缩包的密码。
打开压缩包得到flag: