1.rsa
首先下载好文件后将pub.key文件后缀改成txt
然后百度查到公尺解析
分解N的网站,得到p,q
再用工具RSA Tool2 by Te!就能获取到 d=81176168860169991027846870170527607562179635470395365333547868786951080991441
最后上脚本求flag:
import rsa
e= 65537
n= 86934482296048119190666062003494800588905656017203025617216654058378322103517
p= 285960468890451637935629440372639283459
q= 304008741604601924494328155975272418463
d= 81176168860169991027846870170527607562179635470395365333547868786951080991441
key = rsa.PrivateKey(n,e,d,q,p)
with open("C:\\Users\\MIKEWYW\\Desktop\\flagenc.txt","rb") as f:
f = f.read()
print(rsa.decrypt(f,key))
最后flag为flag{decrypt_256}
2.[FlareOn4]login
下载好附件后打开是一个网页,需要输入flag,F12查看源代码
找到主要的部分
document.getElementById("prompt").onclick = function () {
var flag = document.getElementById("flag").value;
var rotFlag = flag.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);});
if ("PyvragFvqrYbtvafNerRnfl@syner-ba.pbz" == rotFlag) {
alert("Correct flag!");
} else {
alert("Incorrect flag, rot again");
}
}
看到关键的一条加密:
String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
分开成三部分进行分析:
1:设res1 = c <= “Z” ? 90 : 122
每次传入一个字母,看看是大写还是小写,并且对应z的ascii码。
2:设res2 = c.charCodeAt(0) + 13
将当前字符的ascii值加13
3: res1 >= res2 ? res2 : res2 - 26
最后看看加完的值是不是大于当前的Z,如果是的话就减26,否则输出+13后的结果,也就是res2
那么就可以反过来了。-13之后小于当前字符对应的A的时候,就+26,否则就直接-13
脚本:
enc = 'PyvragFvqrYbtvafNerRnfl@syner-ba.pbz'
flag = ''
for i in enc:
if ord(i) >= 65 and ord(i) <= 90:
if ord(i) - 13 < 65 :
flag += chr(ord(i) + 13)
else:
flag += chr(ord(i) - 13)
elif ord(i) >= 97 and ord(i) <= 122:
if ord(i) - 13 < 97 :
flag += chr(ord(i) + 13)
else:
flag += chr(ord(i) - 13)
else:
flag += i
print(flag)
最后flag为flag{ClientSideLoginsAreEasy@flare-on.com}
3.CrackRTF
首先下载好查壳
无壳
F5反编译找到主函数
分析主函数
可知密码长度为6位
其中这个atoi这个函数
看大佬的wp是将字符串转化成整形的,并且转化为整形后的数要大于100000
这个就是将@DBApp连接到6位密码之后
然后进入sub_40100A函数
进行哈希加密
代码中的0x8004
是标识符
并且是sha1的加密算法
所以我们可以用python中的hashlib模块把前六位密码爆破出来(100001-999999)
脚本如下
import hashlib
string='@DBApp'
for i in range(100000,999999):
flag=str(i)+string
x = hashlib.sha1(flag.encode("utf8"))
y = x.hexdigest()
if "6e32d0943418c2c33385bc35a1470250dd8923a9" == y:
print(flag)
break
爆破最终为123321@DBApp
然后继续第二部分
第二部分也是6位,后面部分太难,自己实力太菜
4.[WUSTCTF2020]level1
首先查壳
无壳
找到主函数,F5反编译查看伪代码
将输出的数字存在了另一个文件中,output中就是最后输出的数字
a = [198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000]
for i in range(19):
if ((i+1) & 1):
print(chr(a[i] >> (i+1)),end="")
else:
print (chr(a[i] // (i+1)),end="")
输出得到ctf2020{d9-dE6-20c},改成flag
最终flag为flag{d9-dE6-20c}
5.[GUET-CTF2019]re
查壳
需要脱壳
找到主函数后
打开sub_4009AE函数
其中缺少a1[6]的值
以及a1[17]和a1[16]需要换一下位置
当a1[0]-a1[31],满足上面函数中的条件就得到最终flag,否则返回0
脚本如下:
a = []`
a.append(166163712 // 1629056)
a.append(731332800 // 6771600)
a.append(357245568 // 3682944)
a.append(1074393000 // 10431000)
a.append(489211344 // 3977328)
a.append(518971936 // 5138336)
a.append(406741500 // 7532250)
a.append(294236496 // 5551632)
a.append(177305856 // 3409728)
a.append(650683500 // 13013670)
a.append(298351053 // 6088797)
a.append(386348487 // 7884663)
a.append(438258597 // 8944053)
a.append(249527520 // 5198490)
a.append(445362764 // 4544518)
a.append(981182160 // 10115280)
a.append(174988800 // 3645600)
a.append(493042704 // 9667504)
a.append(257493600 // 5364450)
a.append(767478780 // 13464540)
a.append(312840624 // 5488432)
a.append(1404511500 // 14479500)
a.append(316139670 // 6451830)
a.append(619005024 // 6252576)
a.append(372641472 // 7763364)
a.append(373693320 // 7327320)
a.append(498266640 // 8741520)
a.append(452465676 // 8871876)
a.append(208422720 // 4086720)
a.append(515592000 // 9374400)
a.append(719890500 // 5759124)
flag = ""
for x in a:
flag = flag + chr(x)
print(flag)
但是还缺少a1[6]的值,需要我们爆破,也可以一个一个的试,最终a1[6]的值是1
所以最后的flag为
flag{e165421110ba03099a1c039337}