0


猿人学-第一题

F12进去

可以看见数据都是get请求得到的,观察它们之间的网址,m就是加密参数

跟栈进去

看见debugger,设置条件断点为false,就直接过了

定位到这个js,在request下打上断点

随便跳转到一页,让它重新发一次请求,发现在断点处断住了,

发现这个_0x5d83a3['\x6d']就是m的值,看看代码,混淆了

在自己家里解混淆,再回去看看参数

这里有一个oo0o0的方法,跟进去看看

进去后发现是一段html,而且还不能在浏览器上格式化,那就用在线格式化工具(HTML格式化 、HTML压缩- 站长工具),去格式化

新建一个页面,将格式化的代码放到代码段里面,这下好看多了,ok

这里看见了刚刚跟进来的方法,把他扣下来

就这样ok了,

在最下面发现这两行代码,

最后一个return ' ',是方法oo0o0返回的,eval是一个执行方法

那65行代码一定是执行了什么,那我们要将这行代码给弄清楚,这行代码还是被混淆了,我们要一步步拆开它,再还原它,

按下F12,在控制台调用方法,执行一下代码,发现报错,

(在这之前我们根据解混淆好的js代码改写一下这里的,其实就是给oo0o0方法一个参数)

根据我自己调试,我们直接把这个for循环给注销,不会影响到后面的代码

我们再执行一下,发现J 没有被定义

我猜测可能是作用域问题,那直接再定义J这里下断点

然后单步跟进去

在把eval里混淆的代码还原,发现可以了,那把eval这行全部还原

ok,这句代码还原成了eval(atob(window['b']).replace('mwqqppz'," '1642957211000' "))

这里的1642957211000是一个时间戳,也就是我们之前传进来的参数

atob是一种解码的方式,eval是一种执行语句,那window['b']应该就是加密的方法了

我们回到做题的页面,在控制台输出window['b']

发现它就是加密方法,我们要看的方法到底是怎么加密的,再打开一个新页面,把这个方法复制到代码段里格式化,发现了最后一行代码window.f = hex_md5(mwqqppz)

ok,现在非常清楚了window.f是使用了MD5加密,那我们看看参数,mwqqppz,这个参数是不是再那看见过,再eval执行语句里就有这个mwqqppz

我们将它还原了eval(atob(window['b']).replace('mwqqppz', "'1642952342000'"));

replace是一个替换的方法,这下我们可以理解这断eval语句了

将mwqqppz的值替换成一个时间戳,然后将mwqqppz当作参数给window['b']里的方法去调用

所以window.f = hex_md5(mwqqppz)的参数就是一个时间戳,还记得吗?,最开始oo0o0方法里

我们是根据解混淆后的js代码改写了一下参数,让oo0o0执行,那这个参数是不是就是这个被替换的值,我们试一下,

我们在window['b']方法的基础上调用,可以看见和网址上的加密参数m相同,

ok,加密m的值完美解密。

标签: javascript

本文转载自: https://blog.csdn.net/a1980054932/article/details/122644132
版权归原作者 开胃小菜344 所有, 如有侵权,请联系我们删除。

“猿人学-第一题”的评论:

还没有评论