逆向案例十九——请求头参数加密,某企查

网址:百度安全验证

查找企业的相关信息。找到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函数即可。 

 

怎么导出呢?导出后,应该传入什么值呢? 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习各种软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值