js逆向之猿人学-反混淆刷题平台第十题

猿人学-反混淆刷题平台第十题

前言

这题应该是刷题平台中js逆向部分最难的一道题目了,而且它跟著名的某数有关系,做完这题后,你也可以说算是与某数有过接触了,本题需要破解的参数其实就是某数当中的MmEwMD,这里先说一下, 本题不会手把手每一步都讲的那么仔细,但是会带大家走一遍抠码的环节,有坑的地方呢就提及一下,至于有些地方为什么这样,又如何解决还是需要各位自己思考的,毕竟做题本身就是为了提高自己,如果什么都说了,都做了,那就失去了做题的意义了,好了话不多说,下面直接开始分析。

提示:这题打开开发者工具后会非常的卡,特别是电脑配置不高的,所以调试的时候请耐心并且多做记录,记住调试过和当前调试到的位置,如调试过程中卡主了,可以关掉网页重新打开,然后快速回到自己刚才调试的地方

网站链接:https://match.yuanrenxue.com/match/10

案例分析

这里进入到页面之后,打开开发者工具会出现一个debugger,直接Never pause here跳过即可。

加密参数:m在这里插入图片描述 定位加密参数位置

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0tO0Jm4-1648273014297)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220325183157519.png)]
点击第一张图圈起来的位置直接跳转到第二张图这里,直接如图所示打上断点,至于为什么这里打上断点,是因为这里就是加密的入口位置,接下来直接点击下一页,断点断住,如下图所示:在这里插入图片描述
这里很明显的发现f.open是有问题的,上图可以看到f= XMLHttpRequest,所以可以理解为XMLHttpRequest.open被重写了,至于XMLHttpRequest是什么这里就不作解释了,大家可以自行百度一下。接下来直接进入函数内部,并在下图所示位置打上断点:
在这里插入图片描述
释放断点,直接断住,然后将鼠标选中我下图中圈住的位置,出现如下图所示:
在这里插入图片描述
这里为了方便观察,我们直接在console面板中输出出来,然后我们发现每次输出的结果都是不一样的,这里其实就是m值生成之后拼接出来的请求数据的链接,这里直接验证下,将生成的链接在浏览器中打开,我们发现有数据出来了,如下图:
在这里插入图片描述
然后我们再次生成链接,会发现其后生成的所有链接都是失效的,所以很明显,生成m值的参数是一次性的, 使用过之后就会失效,不过这个不是我们的重点,我们只需要知道m值是在这个里面生成的就好了,直接跟进去。
在这里插入图片描述这里开始每一步自己都跟着走一遍,知道每一步都做了些什么。因为我自己走过了,所以这里我就不一步步走了,直接如下打上断点,开始我们第一个位置的分析在这里插入图片描述
直接从里往外开始分析

1 _yrx$Kn._yrx2ad -> '/api/match/10'
  _yrx$Kn._yrxAmM -> '?page=3'
_yrx$Kn._yrx2ad + _yrx$Kn._yrxAmM   ->  "api/match/10?page=3"
2
_yrx5XG  ->  encodeURIComponent   
_yrx5XG(_yrx$Kn._yrx2ad + _yrx$Kn._yrxAmM) ->  '%2Fapi%2Fmatch%2F10%3Fpage%3D3'
3
_yrxyHJ(_yrx5XG(_yrx$Kn._yrx2ad + _yrx$Kn._yrxAmM)) -> "/API/MATCH/10?PAGE=3"
4
_yrxWKg(_yrxyHJ(_yrx5XG(_yrx$Kn._yrx2ad + _yrx$Kn._yrxAmM)))
->[188, 160, 185, 86, 180, 233, 21, 217, 154, 162, 155, 131, 242, 179, 97, 20]

这里从一个开始分析,第一步将两个参数拼接,可以发现这个是url的一部分,然后经过encodeURIComponent()url进行编码,之后经过_yrx5XG函数处理后将url中的字母转为大写,最后在经过_yrxWKg生成一个16位数组,这个16位数组后面会参数生成m值的运算,到这里第一个参数已经出来了,接着说下面红框部分,这部分没啥好分析的,就是为了生成一个url,继续往下看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCnjbMv5-1648273014299)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220325211053930.png)]
这里很明显能看到m是在我圈出来的这个函数里面生成的,这是一个控制流,时间有限所以就不带大家走了,后面我会说一下这个控制流当中主要要注意的地方,你们自己一定要进去走一走,看一看里面都做了些什么,这一步生成m值之后就直接拼到上一步生成的url后面,最后就成了我们一开始看到的能请求到数据的链接了,在下面就是抠代码环节了,缺少补啥就好,之后也没啥好讲的了,下面就简单的带大家抠一下代码,然后再说一下要注意的坑,整理下最后的流程。

这里开始抠第一个地方,上面我们能看到拼接出来的url都是从_yrx$Kn这个对象里面取出来的,所以我们直接打印下这个对象里面有些什么,如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5qZ4md9P-1648273014299)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220325212429183.png)]
然后我们找下这个参数哪里生成的,就在这个函数没走几步的地方就生成了,如下所示:
在这里插入图片描述
这里为了减少大家的工作量,就直说了,这个对象的生成不需要去抠代码直接伪造一下就好了,如下图所示:
在这里插入图片描述
然后我们看到生成这个对象之前还有一些步骤,不过如果你单步调试过,你会发现上面的部分都可以不需要,直接开始抠如下部分就好
在这里插入图片描述
开始第一步,然后缺啥补啥就行了。
在这里插入图片描述
这里说下抠代码中的第一个注意点,我们可以看到下图这个地方报错了
在这里插入图片描述
搜索一下this._yrxa9O这个参数,发现总共就两个地方,直接抠过来就好,不过大家最好跟一下,看看这两个参数是不是一样的。
在这里插入图片描述
在这里插入图片描述
这里可以看出两个参数一样的,直接将这个函数抠过来就好了。抠完之后运行一下,发现还是报刚才那个错,为什么啊?不是抠过来就好了吗?这么说的人直接拖出去枪毙五分钟,为什么还不知道吗?你只是仅仅抠过来了,又没有执行过这个函数,不跟没抠一样吗?直接搜索当前的函数名,敲黑板,搜索的时候一定要从上往下看,这里直接定位到位置,如下所示:
在这里插入图片描述
直接抠过来之后继续运行,我们发现是另外的错误了,继续缺少补啥就好。好了经过一番努力的抠代码,我们报错终于回到了代码最开始的地方
在这里插入图片描述
先来看看生成的参数_yrxmEu和浏览器中的一不一样
在这里插入图片描述
在这里插入图片描述
很明显结果一致,拿不准的小伙伴可以多试几次,对比下。好了,经过了不懈的努力,我们终于完成了第一个参数,大家是不是很激动,终于完成了一半了(从上图看确实就两个地方),不过我要泼一盆冷水了,只想说你太年轻了,这个才只是刚刚开始,接下来还有最最最重要的m值生成的代码,话不多说带着刚才抠代码的激情我们继续吧!什么?激情被我的一盆冷水泼没了?那可不行啊,为了恢复大家的激情,我们再把第一步抠代码的环节重新来一遍?好了,还是不浪费时间了,直接继续吧。
在这里插入图片描述
这里我们抠完长达2900行左右的代码后,一运行发现报错了,这里直接回到浏览器,看下这个参数是undefined,直接换成undefined就好了,之后就又是缺啥补啥的操作了。
在这里插入图片描述
看到上图,抠到这个地方,运行这里报错了,然后我们没法直接跳转,因为这个参数不是一个函数,所以只能按前面走过的步骤,搜索一下,之后发现有20处,不过还好可以明显的定位到是下面这个地方
在这里插入图片描述
这里直接故技重施,整个函数抠出来,然后搜索函数名(再敲一次黑板,搜索后从上往下看结果),直接定位到位置
在这里插入图片描述
好了,把上图部分的代码抠完并且补齐之后,运行就会出现如下报错
在这里插入图片描述
有些小伙伴看到getElementsByTagName这个,第一反应肯定是补环境,只想说一句年轻真好,补环境那就补呗,补完之后你会发现其实并没什么卵用。我就直说了吧,当然切记,切记,自己一定要去走一遍,发现这个问题。这里呢算是本题的一个重点,呸…,其实根本算不上重点,这个报错的地方就是为了拿到初始页面中,meta标签中的content值,因为这里是定值所以直接拿过用好了(某数当中是个会变的值)。
在这里插入图片描述
在这里插入图片描述
直接如上图这样操作就好了,然后下面的这个函数用不上了,可以直接删掉了,接着继续抠代码。再次敲黑板,抠代码的时候,一定要注意代码执行顺序,别抠完代码往那顺手一放就以为好了,抠代码抠的是细节,一着不慎满盘皆输。继续,如下图所示:
在这里插入图片描述
这个只是给不懂怎么处理这个报错的同学看的,这里只需要在补一个cookie就好了,代码如下:

window.document = {
    
    cookie:""}

之后遇到下面的报错
在这里插入图片描述
遇到这种报错,先搜索一下,如果该参数有不在函数内部的,那么优先抠出来后运行试试,这里直接定位到下面的位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9i7DUB5O-1648273014305)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326105348233.png)]
这里给大家提个建议,如果是这种直接定义好的参数,那么可以考虑直接全部先抠先来,这样就省的后面一个个去找了,最后完成整个抠代码的环节后可以选择性保留或者去掉没用过的参数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRl07UyA-1648273014305)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326113456688.png)]
补到上图这个地方,发现报错了,这里还是之前说到的问题,这个函数只是抠过来了,并有执行,接着在搜索这个函数,直接定位到,然后接着缺啥补啥就好。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EdGghf3q-1648273014305)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326113633753.png)]
经过不懈的努力,终于抠完了代码,我们运行看一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVDqeQsW-1648273014306)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326114459948.png)]
这里直接出来结果了,出现结果是不是很激动呢,但是这个出来的结果明显是有问题的啊,先说下,这个问题呢就是本题要解决的第一个坑,首先结果是在_yrxBXT这个函数中生成的,那么出问题也肯定是在这个函数内部,所以接下来就是进入到函数中进行单步调试,单步调试之前确保传进这个函数的参数和浏览器的一致,这样才好对比出问题出在哪了,由于时间问题,就不带大家一步步更了,直接说下问题出在哪里了,至于出了什么问题就留给大家自行思考了。对于不想一步步分析的同学,直接在下面这个地方打上断点,问题就出在这个里面,再具体的位置就不给出了,毕竟是做题嘛,自己做出来印象才最深刻。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KXO4OaP-1648273014306)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326115844302.png)]
想想范围已经缩小了,那么为了节省一些比较懒的同学的时间,我再缩小点范围,问题下面这两个打断点的里面,并且都是因为同一个变量导致的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QmhzVeiE-1648273014306)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326120922523.png)]
当面这个问题解决完之后我们再运行一次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gg8df75w-1648273014307)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326121500779.png)]
发现这里出现了undefined,那这个地方肯定是不对的,然后我们找下为什么会出现这个,单步调试到后面你就会找到m值生成的地方,如下:
在这里插入图片描述
直接打上断点,然后来看下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fkcqv0ow-1648273014307)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326121810830.png)]
这里能看到_yrxK$4,这个参数的值是undefined,我们在浏览中看下这个值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7KckyoQh-1648273014307)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326121922063.png)]
这里这个值是个空,虽然从最终生成m值我们也能知道这个值就是个空,但是我们是抠代码的,那么就干脆把这个参数怎么成空的也给抠来,不想麻烦的直接给个空值,或者直接把这个参数删掉即可。建议各位同学尝试一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YnQxvAqV-1648273014307)(C:\Users\shiguang\Desktop\猿人学练习题第十题\img\image-20220326122220825.png)]
这里很明显_yrxK$4_yrxgAD()函数生成的,进去看看
在这里插入图片描述
这里能看到这个函数有两个地方有返回值,直接全抠下来就好
在这里插入图片描述
注意,抠下来的时候_yrxxIM函数是没有调用的。要把调用的地方也给抠下来
在这里插入图片描述
抠完之后运行,报错如下
在这里插入图片描述
这里我圈起来的部分没有用到,所以直接注释掉即可,当然也可以尝试给它补全,这里会涉及到补环境,有想简单练习下补环境的同学可以尝试下。
在这里插入图片描述
最后这里就生成成功了,接下来我就是试试能不能拿到结果了。
在这里插入图片描述
这里能看到已经能拿到正确结果了(一定要把上面那个坑给解决了,不然是拿不到结果的)。
整篇文章到这里差不多了,其实到这里如果是为了拿到这题的答案,那么这题就算是完成了,这题里面涉及到一个时间戳的问题,但是因为这个时间戳是有一定时效性的,所以在一段时间内是可以使用的,这也就是我为什么说只为了拿到这题答案的话,这题算是完成了,但是一旦时间戳失效,那么生成出来的参数还是不能用的,至于时间戳的位置,在分析上面那个坑的时候是可以看到的,解决这个时间戳的办法呢有两个,一个是临时性的,一个是一劳永逸的,临时性的方案可能有些人想到了,不过说实话不建议这么做,做题嘛只有完整的做完这题才算是完成了这题,单纯的拿到答案并不能说你解决了这题,所以大家努力,争取把最后一个时间戳的坑再给解决掉。
在这里插入图片描述
最后说一下拿这个时间戳的思路,第一种获取到上面这个页面的内容,直接找到代码的生成位置(也就是下图的位置),然后想办法从这个生成的代码里面拿出时间戳
在这里插入图片描述
另一种思考下这个时间戳哪里来的,上图中的代码又是如何生成的,想通这点你就可以直接自己生成这个代码,然后直接从代码中提取时间戳,我用的就是这一种方式。


欢迎关注公众号:【时光python之旅】 (在这里你能学到我的所见、所闻、所思、所学)

猜你喜欢

转载自blog.csdn.net/qq_43308242/article/details/123754554