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的值完美解密。
版权归原作者 开胃小菜344 所有, 如有侵权,请联系我们删除。