[FlareOn4]login
分析其中的html文件
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");
}
}
在其js脚本中,对输入进行了转换
简单分析一下js代码
replace函数
是将flag中的a~z和A~Z的字母根据自己的规则转换
fromCharCode函数
是根据ASCII码转换为字符
charCodeAt函数
返回该字符的ASCII编码
整体逻辑是,输入一个字母,判断它加13是否小于字母边界(z或Z),小于则返回加13后的值,大于则返回减13的值。
因此,编写脚本对其进行逆向
v12 = "PyvragFvqrYbtvafNerRnfl@syner-ba.pbz"
flag=''
for i in v12:
if 65<=ord(i)<=90:
if (ord(i)-13)<65:
flag +=chr(ord(i)+13)
else:
flag +=chr((ord(i)-13))
elif 97<=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{ClientSideLoginsAreEasy@flare-on.com}
CrackRTF
32位pe
丢入ida进行分析
其中的主程序大概是要输入两个6位的密钥,第一个密钥需要经历sub_400100A的函数,进入函数内部进行分析
由函数名中存在的hash可以推测出其主要进行了哈希的处理,这里优先查看是否具有一些标识类字符,例如0x8004u,可知其为sha1哈希算法,经爆破100000-999999的6位整数加字符串‘@DBApp’与主函数中strcmp的字符串可以得到第一个密钥为123321
继续分析第二个密钥,其首先与destination进行了拼接,组成了18位的字符串,然后经过sub_401019的函数,进入函数内部分析可以发现其与第一个密钥处理函数类似,通过搜索标识符确定其为md5算法的哈希,但是未给出相应的密钥范围,因此无法通过之前的爆破方式获取第二个密钥。
继续观察主函数代码,可以发现还有一个函数sub_40100F,进入查看逻辑
通过查看相关逻辑可以明确其为调用资源的函数,可以通过ResourceHacker软件查看exe文件的相关资源,函数通过lpBuffer存储AAA资源,与18位字符串进行一个sub_401005的函数,查看sub_401005函数进一步进行分析。
其主要逻辑是将资源的每一位与18位字符串循环进行异或操作,然后写入rtf文件中。因此,我们只需要获取rtf文件的前六位以及资源的前六位进行异或操作,就可以获得18位字符串的前六位字符,也就是第二个密钥。
查看普通的rtf文件,得知其前6位为固定值,因此可以通过异或操作获得第二个密钥~!3a@0
string=b'{\\rtf1'
resour=b'\x05\x7d\x41\x15\x26\x01'
key=''
for i in range(6):
key+=chr(string[i]^resour[i])
print(key)
将两个密钥输入exe文件中可以获得最后在文件dbapp.rtf
中的flag
flag{N0_M0re_Free_Bugs}
[WUSTCTF2020]level1
直接拖到ida中
__readfsqword(0x28u)
:通常用于alarm函数,防止调试
函数逻辑是读取一个flag文件,对其19个字符进行变换,其中第奇数次出现的字符左移当前数次位,第偶数次出现的字符乘以当前次数,因此编写python脚本对output文件中的数字进行逆转变换。
with open('output.txt','r') as f:
data=f.read()
temp=''
num=[]
for i in range(len(data)):
temp+=data[i]
if data[i]=='\n':
num.append(int(temp))
temp=''
flag=''
for i in range(1,20):
if (i & 1) !=0:
flag+=chr(num[i-1]>>i)
else:
flag+=chr(num[i-1]//i)
print(flag)
flag{d9-dE6-20c}
[GUET-CTF2019]re
使用exeinfo发现其包含upx壳
使用upx脱壳
再放入ida中进行分析
遇到这种比较多的函数,并且没有英文提示,就挨个点击各个函数找出攻击点
在sub_400E28中可以找到flag关键词,因此可以进一步寻找具体flag,进入sub_4009AE函数可以看到一系列除法,简单进行几个运算可知其a1即为flag,算出全部即可,其中a6为0~9爆破值,为1
flag{e165421110ba03099a1c039337}