本文主要是介绍猿人学第5题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
猿人学第5题
- 分析请求
- 加密参数
- 分析cookie里的两个加密参数
- 分析密钥
- 分析url里的两个加密参数
- 扣代码
本文仅供大家学习
- 1 分析请求
- 2 加密参数
- 3 扣代码
分析请求
这是题目,要求是热度最高的前五名的和。按F12,看看请求的包
我请求了两页,请求参数只有两个,m和f
从这里看不出啥东西,题目提示cookie只保存50s,那肯定是cookie里加密了
,多次请求发现cookie里有两个值加密了,一个是m值,还有一个
是RM4hZBv0dDon443M
把两次的url和cookie拿出来分析
url:https://match.yuanrenxue.com/api/match/5?m=1647409778035&f=1647409777000
//url
//下面是cookie,只拿了加密部分的参数
cookie:
m=9c69e65879573f20085d7a2771a87a41;
RM4hZBv0dDon443M=0+F9b7iseRE50ASrEbzE1RVCHX8I9iwkMYl4v8yXmT25uSL7v5sZO8Tx4XsMGnX6WU5sckvCyre6WXlxyC89Ey+IDowTvIxSX6Hc0PuCNue1UZCigkJVi9GUdQ0HyTfV/mCLCcFnkfFJ2eiV1oHHXTo0IrZf8Sf6GsYKXZGZIaZ0jn/gJgfIxiQQAQ3l6/Mo80bW3HzI+MvuoEgkgzUQcMG0A5c1qEm45Ki2XSV2fmk=
url: https://match.yuanrenxue.com/api/match/5?m=1647409932219&f=1647409931000
//url
//下面是cookie,只拿了加密部分的参数
cookie:m=81618ecb71d36db642ec4f95076fb7c1; RM4hZBv0dDon443M=BSypJaqxtyJ7yRDTjWMxnrnuZa8S7apgFyan/e7GgJyQy01Nd2TIQQe9+QWaThPoaedwulWcjYn8sCBkbIRROcWH3zxVTOIXJ9iaekAN1KT3hprQaewfaAsLUDf7AL4tMS80JrVwwswA8MBsCfuD+eGhkQtV2+MoGWUV7WrSwwZch9c7pJQeSP7vSVaPMo7WWzzdRcwdf/BaISCkSDN5MzNvz+d2urG1w/01OSHDx08=
cookie设置一般是加载的时候,我们可以发现,在打开F12的时候有一段嘲讽的话,这里面有猫腻。
加密参数
上面找到了4个参数,url里两个类似时间戳的m和f,还有cookie里的两个加密参数m和RM4hZBv0dDon443M
分析cookie里的两个加密参数
进入VM里面,会发现是一大段混淆,也和题目说的一样,应该就是这里进行加密,试试搜索RM4hZBv0dDon443M,
一个都没有,试试m的话太多了,试试m=
好,找到了RM4hZBv0dDon443M,它是使用字符串拼接来的,下断点,cookie赋值要重新刷新,刷新一下
这里就是RM4hZBv0dDon443M生成的地方,进去这里断点断住之后不会立即给它赋值,跳过几次就有值了
控制台输出_0x4e96b4是window
继续找到它是怎么来的,搜索这个’_$’
一目了然,RM4hZBv0dDon443M就是AES的ECB加密出来的,那么找明文和密钥
这种模式的加密,第一个参数就是明文,后面接着是密钥,最后是一些配置
明文是一个数组toString()来的,密钥是window里的【‘_qF’】,
接着找这个明文数组怎么来的,
搜索这个数组,都打上断点,
五次添加,第3次添加后会打印两句话,但第4的内容已经有了,而且它加密的地方在最后一次是变化的,这里是一个天坑,慢慢找
_$Wa = _0x12eaf3();
_0x3d0f3f[_$Fe] = 'm=' + _0x474032(_$Wa) + ';\x20path=/';
_0x4e96b4['_$pr']['push'](_0x474032(_$Wa));
这个方法添加的字符串,每次都是加密的,_0x474032这个方法就是加密方法了,这个方法慢慢扣
一个一个扣就行,
分析密钥
直接搜索找到密钥,打断点,刷新,放开断点,控制台输出_0x4e96b4[‘_$is’],
_0x4e96b4['btoa'](_0x4e96b4['_$is'])['slice'](0x0, 0x10)
这个就是密钥了,将_0x4e96b4[‘_$is’]的结果使用base64编码一下,在取它的前16位
分析url里的两个加密参数
打开网页
m就是加密密钥的那段_0x4e96b4['_ i s ′ ] , f 是 w i n d o w . is'],f是window. is′],f是window._zw[23],
_$Wa = _0x12eaf3();
f = _$Wa;
f是最开始的时间戳,就是为了计时的,50秒cookie失效
扣代码
这里提几个小坑,大坑自己填
_0x4e96b4[_$UH[0x260]][_$UH[0x8]]['DONE']
分析大坑的时候,可以hook看它是的结果和明文
//hook代码
(function(){var kk_0x474032 = _0x474032;_0x474032 = function(e) {var kkk = kk_0x474032(e);console.log("明文:", e,"加密:",kkk );console.log("_0x4e96b4['_$6_']:" + _0x4e96b4['_$6_'])console.log("_0x4e96b4['_$tT']:" + _0x4e96b4['_$tT'])console.log("_0x4e96b4['_$Jy']:" + _0x4e96b4['_$Jy'])return kkk;}
})()
大坑就是
_0x4e96b4['_$6_']
_0x4e96b4['_$tT']
_0x4e96b4['_$Jy']
这几个的值会变,大胆猜测后面怎么变得
这篇关于猿人学第5题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!