网址:百度安全验证
查找企业的相关信息。找到xhr包,可以找到数据,但是请求头中有ymg_ssr参数的加密
现在进行ymg_ssr参数加密,直接搜索,找到加密的js文件和加密位置,打上断点。
发现t就是加密的参数,那么t是怎么来的,它是函数的参数传的值,向上跟栈分析。
打印函数和参数,发现a2是加密参数,a8未定义,那么主要是g2函数的作用。
继续往上跟栈分析,发现a2和a8都进行了定义
a2 = JSON[b('0xe')](a2);
a8('\x31\x37\x32\x31\x30\x34\x31\x35\x30\x34\x30\x30\x33\x5f' + ae + '\x5f' + eg(a2, a0, a1))
打印一下,这些可能是有用的。:
主要分析g2函数,进入g2函数,打上断点,不出意料,这个应该是加密函数,先整体复制,再缺什么补什么!
复制打印,发现缺少eA对象
进入eA对象并复制。
发现eA中的b没有定义。
进一步去找b,并复制
发现b中的a没有定义
发现a是一个对象,打印并复制object
然后又发现eA函数中的ex没定义,回去找,ex也是一个对象,复制object
发现g2函数中的fu没有定义
找到fu并复制
这次是fT没有被定义,网上看fT是空列表。
接着是fs,这些都在g2上面呢,逐个复制即可
但是,接下来会遇到这样的情况,a3.on不是一个函数,这说明一个个去扣代码,不太现实。
g2函数所在的是一个大函数里面的自执行函数的内容。
复制这个自执行函数,改写我们的代码,把除了a和b定义外的全删掉,因为这些是在这个自执行函数内部的。再写window=global
然后就发现,g2未定义,还记得如何处理自执行函数吗?(他这个最后括号里的函数是空的)外部声明一个变量,去导出内部函数,然后补JSDOM环境,模拟浏览器环境。固定的补浏览器代码:
var jsdom = require('jsdom')
var { JSDOM } = jsdom;
var dom = new JSDOM(`<!DOCTYPE html><html lang="cn"><head></head><body></body></html>`);
window = dom.window
document=window.document
navigator=window.navigator
现在没有报错了,只要导出g2函数即可。
怎么导出呢?导出后,应该传入什么值呢?