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()