吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 745|回复: 0
收起左侧

[其他原创] 解题领红包之八之解析(还没解全)

[复制链接]
w3812247 发表于 2023-1-29 13:31
1、访问https://2023challenge.52pojie.cn/
2、进入到黑页面,查看源码
image.png
一共有两个有用的字符串,先说第一个
01 1 001 1 001 1 01 1 0001 1 00001 01 1 001 1 1 001 1 0111 011 1 101100 1 1 0 10 1 011 0 01 0000 1 10000 001 1 01 1 0 011 0 00 10 011 0 010 100 1 1011 000 1 1 0 0 11 01111101==========
解析:
全都是数字0和1,应该是一串二进制,通过提示,字符串形如flag{*****},那么这串二进制里应该包含},通过查询,ascii中01111101就是},所以我把这串二进制用ascii进行了解析,得到了如下结果:
https://www.qqxiuzi.cn/bianma/ascii.htm
01100110→f
01101100→l
01100001→a
01100111→g
00110111→7
01111011→{
00110101→5
01100100→d
00110000→0
00110110→6
01100010→b
01100101→e
00110110→6
00110011→3
01111101→}
flag7{5d06be63}
3、解析第二个字符串
++++++++++[>++++++++++>++++++++++>+++++>++++++++++++<<<<-]>++.++++++.>---.<-----.>>-..>+++.<+++++.---.+.---.+++++++.<+++.+.>-.>++.
这个是brainfuck语言,及其小众,好难完全看不懂,但是网上有大神用python编了一个解释器
https://blog.csdn.net/WinterShiver/article/details/124850971
源码我也贴出来
[Python] 纯文本查看 复制代码
CONST_INF = int(1e7 + 7)


class Table:
    def __init__(self):
        self.register = [0, 0]
        self.ptr = 0

    def table_expand(self):
        if self.ptr == 0:
            self.ptr += len(self.register)
            self.register = [0] * len(self.register) + self.register
        elif self.ptr == len(self.register) - 1:
            self.register = self.register + [0] * len(self.register)
        else:
            pass

    def valid_check(self):
        assert self.ptr >= 0 and self.ptr < len(self.register)

    def ptr_l(self):
        self.table_expand()
        self.ptr -= 1
        self.valid_check()

    def ptr_r(self):
        self.table_expand()
        self.ptr += 1
        self.valid_check()

    def add1(self):
        self.valid_check()
        self.register[self.ptr] += 1

    def sub1(self):
        self.valid_check()
        self.register[self.ptr] -= 1

    def set(self, value):
        self.valid_check()
        self.register[self.ptr] = value

    def get(self):
        self.valid_check()
        return self.register[self.ptr]


class Env:
    def __init__(self):
        self.table = Table()

    def process(self, code, inp):
        num_ins, ptr_ins = 0, 0
        ptr_inp = 0
        outp = ""
        while ptr_ins < len(code):
            if code[ptr_ins] == '>':
                self.table.ptr_l()
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            elif code[ptr_ins] == '<':
                self.table.ptr_r()
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            elif code[ptr_ins] == '+':
                self.table.add1()
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            elif code[ptr_ins] == '-':
                self.table.sub1()
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            elif code[ptr_ins] == '.':
                outp += chr(self.table.get())
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            elif code[ptr_ins] == ',':
                if ptr_inp < len(inp):
                    self.table.set(ord(inp[ptr_inp]))
                    ptr_inp += 1
                else:
                    raise ValueError('Input exhausted')
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            elif code[ptr_ins] == '[':
                if self.table.get() == 0:
                    while ptr_ins < len(code) and code[ptr_ins] != ']':
                        num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            elif code[ptr_ins] == ']':
                if self.table.get() != 0:
                    while ptr_ins >= 0 and code[ptr_ins] != '[':
                        num_ins, ptr_ins = num_ins + 1, ptr_ins - 1
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            else:
                num_ins, ptr_ins = num_ins + 1, ptr_ins + 1
            assert num_ins < CONST_INF
        return outp


if __name__ == '__main__':
    interpreter = Env()

    # hello world
    hello_world_code = '>++++++++[ < +++++++++ > -] < . > ++++[ < +++++++ > -] < +.+++++++..+++.>>++++++[ < +++++++ > -] < ++.------------. > ++++++[ < +++++++++ > -] < +. < .+++.------.--------.>> > ++++[ < ++++++++ > -] < +.'
    hello_world_code='++++++++++[>++++++++++>++++++++++>+++++>++++++++++++<<<<-]>++.++++++.>---.<-----.>>-..>+++.<+++++.---.+.---.+++++++.<+++.+.>-.>++.'
    print(interpreter.process(hello_world_code, None))

    # toUpper
    toUpper_code = ', ----------[----------------------., ----------]'
    print(interpreter.process(toUpper_code, 'hello\n'))


运行结果如下:
flag11{63418de7}

4、根据网页源码的提示,dns可以获取到相应的提示,于是,我测试了2023challenge.52pojie.cn的A记录、CNAME记录、txt记录,
在windows cmd命令行中查询域名txt记录代码:
nslookup -qt=txt 2023challenge.52pojie.cn
结果如下:
_52pojie_2023_happy_new_year=flagB{substr(md5(uid+\"_happy_new_year_\"+floor(timestamp/600)),0,8)}
这个串很明显是js的写法,
uid是自己的uid,可以通过https://www.52pojie.cn/home.php?mod=space&do=profile查询,然后跟了一个字符串,然后是当前的时间戳除以600(这个数字取整)
以上3个串拼起来以后,使用md5进行加密,然后取得前8位,根据我的uid,我的计算结果如下:
flagB{36b4178d}


我自己只解析出来了这几个flag,感觉视频中开头的flag6得使用电话拨号去碰,还有就是视频的最后有一串模糊的对话应该也是。其他的我还没有找到。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表