首先还是有个无限debugger的绕过,用hook的方法
想要抓取图片,前端可以看到链接,但是这个链接在直接请求主页之后返回的数据包中是没有的,浏览器展示的elements是css和js综合处理之后的结果,一番处理之后发现请求的数据包
找到发送请求的函数栈,在N.send(s.data ? s.data : null),处打上断点,找一个新的图片去访问,这里不知道为什么直接刷新网页,会断不下来,定位到上层函数
'\x73\x75\x63\x63\x65\x73\x73' 就是字符串'success',也就是ajax请求发送成功之后调用的函数,解密函数就在这里
1 | '\x73\x75\x63\x63\x65\x73\x73': function(_0xf3a52c) { |
sessionStorage函数是往本地存数据的,在下次访问的时候直接从本地加载,这个不用管,主要看loadData ,在loadData里下断点
断下来之后发现_0x247b9c是返回数据包里的data ,而这个变量只在_0x36995d = _0x66f3q(_0x4c3130, _0x247b9c)处被用到,猜测该处就是做解密处理的,进入到这个函数
发现_0x1739fa变量只在_0x14cbdb = _0x1739fa[_0xad1455(0xca)](_0x587991)[0x2 * -0x404 + 0x23d8 + 0x1 * -0x1bcf] 处被用到
单步运行到_0x14cbdb = _0x1739fa[_0xad1455(0xca)](_0x587991)[0x2 * -0x404 + 0x23d8 + 0x1 * -0x1bcf] 处,查看变量_0xad1455(0xca)就是字符串'split' ,而_0x1739fa是data,_0x587991是另一个字符串,0x2 * -0x404 + 0x23d8 + 0x1 * -0x1bcf是1,也就是把data分隔之后去某个部分赋值给_0x14cbdb
上面可以看到CryptoJS关键字,明显是CryptoJS解密的
也就是这里
1 | _0x1fa49a = _0x2fe947[_0xad1455(_0x140497._0x3f5f90)][_0xad1455(_0x140497._0x391976) + '\x70\x74'](_0x3957c4, _0x39ea15, { |
[_0xad1455(_0x140497._0x391976) + '\x70\x74' 就是字符串decrypt ,_0x3957c4是要解密的数据,_0x39ea15是key
稍微分析一下可以知道,加密方式是AES,mode是CBC,填充方式是PKCS7,而且数据是先进行hex解码(_0x2c9eda = _0x2fe947[_0xad1455(0xce)]['\x48\x65\x78']['\x70\x61\x72\x73\x65'](_0x14cbdb)),再进行base64编码(_0x3957c4 = _0x2fe947['\x65\x6e\x63'][_0xad1455(0xa6) + '\x34'][_0xad1455(_0x140497._0x492099) + _0xad1455(0x9c)](_0x2c9eda))
把动态调试的key和iv丢到解密里面去也能验证,这里key要用_0x39ea15.toString()去访问









