上个月的猿人学逆向比赛终于参加了一次,本着嫖一件文化衫的目的与做出第一题的目标,开始了比赛。过程是艰苦的,结果还是满意的,文化衫嫖到了,现在记录一下第一题的过程。(基于补环境)
链接地址: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,获取
标签:web,加密,猿人,js,改写,token,题浅记,一致,比赛 From: https://www.cnblogs.com/FlowerNotGiveYou/p/17492527.html