比较有意思的比赛,简单过了两关
整体逻辑
点一下种树按钮就可以种一棵树了,是通过某个接口实现的,在程序源码中可以找到JS的位置;
整体逻辑是,点一下按钮,带着用户的token请求一个链接(API),获得几个值,通过对获取到的值的运算,获得进一步的结果,带着结果请求另一个链接,就可以完成种树了;
关键在于获取到的值应该怎么运算,这需要请求JS代码,也就是图中箭头指的那一行;
第一步,可以先burp抓包看一下实现逻辑,顺便获取到自己的token
请求完之后,又抓到发送一条新请求;这个请求发完之后就完成了种树。
所以先看一下第一步请求到了什么,
三个字段,其中c相当于题号,关系着请求哪一个js;
a是要运算的值;
t相当于种树编号,不用运算;
JS代码
10000棵树之前,js是
1 | window.A274075A = async |
1W~10W
1 | window.A3C2EA99 = async |
10W~25W
开始麻烦了,最近太忙了,真是没有时间去解了
我承认,这东西上瘾,第二天的时候我忍不住把10W~25W解出来了
请求到是一串乱码,但是明显是base64加密的,解密后整理一下即可
1 | eval(atob( |
实现逻辑其实也挺清晰,把变量替换一下,得到:
1 | window[_0x23fc('0x0')] = function(x) { |
用python解一下:
1 | a = [606,246,190908] |
所以10W到25W整体的代码是:
1 | while(1): |
结果25W还是在100名左右,哈哈。
最后附上前10W的简单代码,哈哈,水平还是不够呀,溜了溜了,硬蹭进了前100名,肯定很快就被挤出去了
1 | import requests |
25W
这代码真是吐了,发誓不搞了
1 | {"c":"A593C8B8", |
1 | window.A593C8B8 = async(_) = >(($, _, __, ___, ____) = >{ |