2020 DJBCTF RE wp

1.anniu

吐槽:浓浓一股杂项的味道,妈的,用xspy和resource har加ida死活搜不到回调函数,淦

下一个灰色按钮克星,直接把灰色的按钮点亮,直接点击就可以出了,软件下载链接:http://xiazai.zol.com.cn/detail/15/147895.shtml

 

2. Matara Okina

这题直接反编译进去,习惯性的看manifest文件,看下主活动在哪

 

 好家伙,果然里面藏东西呢,有些很概念,开发没用到,这里涉及到了launchMode,这个是活动的启动模式,链接如下:

 https://blog.csdn.net/sinat_14849739/article/details/78072401

大概是这样的,这种2对应的singTop模式,栈顶复用,也就是意味着,当flagactivity要再次跳转到flagactivity时,很可能并不会生成新的实例,而是

仅仅更改下内容,有点ajax的味道,具体看博客吧,说的比我详细多了2333,然后就是下面的intent-filter标签,这个schem标签其实就是Android可以通过

输入自定义的url启动activity,学习链接: https://juejin.cn/post/6844903506822840328#heading-1

接着看下源码:

 

 

 

 发现好家伙,发现真正的问题是secret这个参数所对应的内容是需要逆向出来的,python直接一把梭,跑出来

res="@lgvjocWzihodmXov[EWO"
print(len(res))
flag1=""
flag2=""
for i in range(int((len(res)+1)/2)):
    flag1+=chr((ord(res[i])^(i+1))&0xff)
    flag2+=chr((ord(res[len(res)-i-1])^(i+1))&0xff)
print(flag1)
print(flag2[::-1])
print(flag1+flag2[::-1])

注意中间的cc是错误的,因为源码中,中间因为两次异或相同的数字,所以是没变的,其实cc是h字母,拼接上去就好了

剩下就是调用这个url,跳转到这个activity,flag就出来了,这里就不多叙述了。

3.e

这题比较简单,动调就出来了,算是我最早写出来的题了。

4.A maze in 

 

 这里y4师傅深搜的思路是真的强,发现自己的算法好垃圾啊,放下表哥的exp,膜

import sys

sys.setrecursionlimit(100000)
mkey = [
    0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01,
    0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01,
    0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00,
    0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
    0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01,
    0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01,
    0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00,
    0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01,
    0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00,
    0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01,
    0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00,
    0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
    0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
    0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00,
    0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00,
    0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00,
    0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01,
    0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01,
    0x01, 0x00, 0x01, 0x00
]
road = []
flag = 0


def smaze(row, col, n):
    global flag
    global road
    if row == 7 and col == 4:
        flag = 1
    if flag == 1:
        if len(road)==34:
            print("".join(road))
        return 1
    if mkey[32 * row + col * 4 + 0] == 1 and n != 'D':
        if row > 0:
            road.append('U')
            smaze(row - 1, col, 'U')
    if mkey[32 * row + col * 4 + 1] == 1 and n != 'U':
        if row < 7:
            road.append('D')
            smaze(row + 1, col, 'D')
    if mkey[32 * row + col * 4 + 2] == 1 and n != 'R':
        if col > 0:
            road.append('L')
            smaze(row, col-1, 'L')
    if mkey[32 * row + col * 4 + 3] == 1 and n != 'L':
        if col < 7:
            road.append('R')
            smaze(row, col+1, 'R')
    if len(road) != 0:
        road.pop()

    def go():
        ans = "@lgvjocWzihodmXov[EWO"
        se = [0] * len(ans)
        for i in range((len(ans) + 1) // 2):
            k = i + 1
            j = len(ans) - 1 - i
            se[j] = ord(ans[j]) ^ k
            se[i] = ord(ans[i]) ^ k

        ff = [chr(i) for i in se]
        print(ff)
        print(''.join(ff))
if __name__ == '__main__':
    smaze(0,3,'0')
    go() 

 

posted @ 2021-01-25 23:52  YenKoc  阅读(132)  评论(0编辑  收藏  举报