第二届猿人学web比赛第一题浅记

发布时间 2023-06-19 23:52:57作者: 是四不是十
上个月的猿人学逆向比赛终于参加了一次,本着嫖一件文化衫的目的与做出第一题的目标,开始了比赛。过程是艰苦的,结果还是满意的,文化衫嫖到了,现在记录一下第一题的过程。(基于补环境)

链接地址:https://match2023.yuanrenxue.cn/topic/1

1、网站分析:

照常F12看发包的请求:

对比多个请求发现变化的加密参数为token与now。话不多说直接开整

2、加密参数分析

老办法先全局搜索,在第一个js文件中就能找到token加密点

哇哦,这么简单,AES后的md5加密。断住验证下。

可以看到网页上加密值与标准库加密值不一致,魔改了加密算法。果然没有这么简单。接下来直接分析js文件吧

3、加密参数逆向

查看js开头与结构发现为webpack,但是又比常见的webpack多了一层

用我的半吊子js知识解释就是,自执行函数主入口是0x2,调用的时候会提前加载它的依赖模块,例如0x2的依赖就是0xc。执行完之后就会将token的值计算出来,之后发送ajax请求。

我们将js代码中的ajax请求删除,将函数定义为全局,然后固定d(页数),e(时间戳)与图中一致,用来测试

如下图类似:

可以看到有返回值了,与ad89a4a42dcf791951274db0fec65768不一致,大致原因为进行了环境判断,修改了算法。

有经验的可能直接全局搜索常见的global、location、 navigation等,本人比较笨,是断住加密点进行单步调试的。

单步到此处发现问题,有一个location的环境检测,对比后发现浏览器中的返回值也是有区别:

题目中的返回值为true

本地直接将此处替换,Q = p(Q, R, S, P, L, 0x12, k[0x3b]),再次重试,打印token值,与比赛题目结果一致。

4、pycharm改写

直接将刚才chrome执行的正确函数pycharm执行

按照提示补充环境

此类直接在浏览器中打上断点进行分析改写,此处对比后能直接改为

经过改写或者删除补充的环境大概为:

但是此时结果还是不一致,上下文进行关键字搜索,发现最后的点

删除了window导致结果不一直,进行改写,执行,结果一致

结尾:之后可能会用扣代码的方式重新实现一遍,可能吧,之后再说吧。

代码获取方式还是跟以前一样,公众号:码字的秃猴,发送:比赛题1,获取