Buuoj re [[FlareOn4]login|CrackRTF|[WUSTCTF2020]level1|[GUET-CTF2019]re]

[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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值