JS逆向实战11——某金属集团动态cookie加密
本文作者:ZiCh
本文链接:https://www.cnblogs.com/zichliang/p/17138431.html
版权声明:未经作者允许严禁转载
声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
目标网站
aHR0cDovL3d3dy50bm1nLmNvbS5jbi9pbmZvcm1hdGlvbi9pbmZvX3h3enguYXNweD9jbGFzc2lkPTMx
分析
此网站根据cookie加密 如cookie无效则返回 412 有点像某数。
根据抓包分析 可知 这个
Cookie: ASP.NET_SessionId=irftqluvfywztp3nhmfqsgab; ASP.NET_SessionId_NS_Sig=oenCV6mdwHx26gTo; eFKuN5wtW89D006=K7vHE8llNk_GHoH63eOhtYf6Tr3vg0boafQPv9qOVyQRtO6M6rtkgWprfZrRt11Vr_OchRw__wmXgj2B9B70eMsA6XWIrwQ4BmwLUu23eXBog
这些cookie 是我们所传的参数。
定位函数入口
根据hook 确定 cookie加密的未知
然后我们一步一步追栈进入
这部分就是函数入口,我们在控制调用函数看看
由此可见 这就是cookie生成的入口了
耐心扣代码
本文来自:来自: https://www.cnblogs.com/zichliang/
我们找到了cookie生成的位置 接下来就是慢慢扣代码了
函数R
所以我们可以改写一下
var R$aZ = 'eFKuN5wtW89D006' var R$jZ = "K" var R$ma = R$lA(); // 32位随机数 var R$jy = R$jn(); // 16位随机数 var R$fX = R$ke(); // 43位随机数 var R$gQ = R$jZ + R$jP(R$jy["concat"](R$jt(R$fX, R$ma)));
接下里就是扣这三个数组随机数了
R$lA()
故:
R
aT() === cookey
RmJ[R aT()] =====> 暂时写死
所以我们进行一波改造变成了这个样子
function R$lA(uPar) { var cookieKey = "d3Fp9SIt7Xa7EdBHlw5uDQW2jRkeN2Tnvq2FthXwclV" return R$kC(cookieKey)["slice"](0, 32); }
然后我们来扣这个 R$kC
这个函数
这个函数很简单。
直接硬扣一路跟 缺啥补啥 把一些变量改掉就行了。
R$jn();
然后我们来追 R$jn()
这个函数
由于这个函数和上文讲到的R$lA
差不多,只不过调用的是R$mJ
的另一个参数blackBlock
所以同理 这个随机数也是一样的。
代码如下
function R$jn(uPar) { var blackBlock = "PbyLU52HFtMw3AWBwhJWFG" return R$kC(blackBlock)["slice"](0, 16); }
R$ke();
然后我们扣这个函数
这里有个坑
在扣R$lr();这个函数的时候,我们会发现很多selenium webdriver
这种情况要伪装的参数太多了,而且往里面越扣就越多,索性我们直接写死写成个定值
反正也只是一大堆环境检测。
其他顺着慢慢扣就好了。
执行JS
本文来自:来自: https://www.cnblogs.com/zichliang/
然后我们执行我们的JS
发现可以运行。
我们放到Python中运行,发现还是不行。
解决服务器动态生成问题。
那肯定是我们刚刚写的定值不对。唯一值得怀疑的点 就是那个"cookieKey"还有"blackBlock"
但是这两个值怎么追栈都找不到,
所以我们反复hook
会发现有有些值可能是服务器生成的。
所以我们只要找到这个函数入口函数即可。
实验多次,我们找到了这个函数。
然后我们只要把这个cookieKey 和 blackBlock提取出来即可。
我们后续只需要
用正则把这个值提取出来就能正常爬取了。
那如何提取呢?
只要我们把 R$lA | R$jn
这两个函数调用即可
function get_ck(uPar) { var R$aZ = 'eFKuN5wtW89D006' var R$jZ = "K" var R$ma = R$lA(uPar); // 32位随机数 var R$jy = R$jn(uPar); // 16位随机数 var R$fX = R$ke(); // 43位随机数 var R$gQ = R$jZ + R$jP(R$jy["concat"](R$jt(R$fX, R$ma))); return { 'eFKuN5wtW89D006': R$gQ } } console.log(get_ck(R$gL()))
运行验证
可以正常运行~~
本文作者:ZiCh
本文链接:https://www.cnblogs.com/zichliang/p/17138431.html
版权声明:未经作者允许严禁转载
作者博客:https://www.cnblogs.com/zichliang
本文地址:https://www.cnblogs.com/zichliang/p/17138431.html
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~