python爬虫js逆向-问财的cookie(Hexin-V)

今天我们来爬取问财网站的信息:
在这个网站输入时间+跌停/涨停,可以查看当天的股票数据
在这里插入图片描述
在这里插入图片描述
今天我们的目标就是,拿到这些数据:
关键在于:有一个v的加密参数
在这里插入图片描述



1. 分析:

因为这个参数在cookie中,我们可以使用hook的方式来定位加密函数:

hook——>cookie:

//在get/set cookie 的时候进去该hook代码:
(function (){
    var temp = "";
    Object.defineProperty(document, "cookie", {
        get: function(){
            debugger;
            return temp
        },
        set: function(v){
            debugger;
            temp = v;
            return v
        }
    })
}());

在这里插入图片描述
断进来之后:查看调用栈
下一步,直到发现:c就是cookie的值
在这里插入图片描述
看代码,发现c里的 t 是重点:(第二个参数)
在这里插入图片描述
进入下一个调用栈:
在这里插入图片描述
找到入口函数rt.update(),进入:
运行的是o():
在这里插入图片描述

function O() {
                S[R]++,
                S[p] = Jn.serverTimeNow(),
                S[d] = Jn.timeNow(),
                S[B] = Vn,
                S[I] = nt.getMouseMove(),
                S[y] = nt.getMouseClick(),
                S[_] = nt.getMouseWhell(),
                S[C] = nt.getKeyDown(),
                S[E] = nt.getClickPos().x,
                S[A] = nt.getClickPos().y;
                var n = S.toBuffer();   # <———这里
                return zn.encode(n)
            }
            n[e[57]] = P;
 
 function D() {
            return O()
            }

2.补环境:

今天我们采取补环境的方式实现逆向。


思路:

我们可以看到:O函数中对S进行了运算
而S在前面也有添加元素,故应该扣下整个闭包代码:

在这里插入图片描述
在这里插入图片描述

猜测一下执行过程:
// 大概率是
// rt.Init()
// rt.update()  => 我们要的cookie

观察代码也发现,在最后的自运行函数中,调用了rt.Init()
在这里插入图片描述



使用思路应该是:
扣下该自运行函数:先实现运行n[“Init”] = P,然后n[“update”] = D
但是var t过于长,难以补充环境 ——>尝试扣下更多代码
我们需要的 t 是一个超大数组:
在这里插入图片描述
思路:先复制该js的头尾,实现实参:
在这里插入图片描述
再把r = e = a = n;r = e = a = n;具体的赋值扣下来:
在这里插入图片描述
其中缺少Wn,at,ot:补全
在这里插入图片描述
补全后,注释调用代码,看看环境是否补齐:发现缺document、window
在这里插入图片描述

//尝试:
window = global;
document = {};

在这里插入图片描述
补环境完毕


放开注释代码后:这是因为rt定义在闭包里——>放到全局就可以了
在这里插入图片描述
在这里插入图片描述
运行发现:
发现缺qn
在这里插入图片描述
在这里插入图片描述
进入后:注意观察 虽然是进来在 l(r)
但qn是大函数返回的值+() ——> l ()
直接扣下全部代码


运行继续报错:
在这里插入图片描述
在这里插入图片描述
s是Date, TOKEN_SERVER_TIME经搜索是存在的,函数走后面
记得把TOKEN_SERVER_TIME补进环境
在这里插入图片描述
摸清楚执行逻辑后:
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

function M() {
                var n = Qn.getCookie(Fn) || Zn.get(jn);
                if (n && n[s[111]] == parseInt(c[221], e[93])) {
                    var t = zn.decode(n);
                    if (t && (S.decodeBuffer(t),
                    S[l] != s[2]))
                        return
                }
                S[l] = Jn.random()
            }

逻辑;Fn是’v’,jn是"hexin-v" ————>这两应该是同时出现的!
如果用户第一次访问,Jn.random()
如果是第n次访问,有cookie,那么就有n
直接简化:
在这里插入图片描述进入Jn:发现是随机 ——>直接定死
在这里插入图片描述
在这里插入图片描述


运行:缺Vn,Un:
在这里插入图片描述


运行:
在这里插入图片描述
这里是取值,在浏览器运行看看是什么:
在这里插入图片描述
在这里插入图片描述
同理解决函数O():
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


运行:
在这里插入图片描述进入zn:老规矩 ——>这玩意应该是一坨,复制整个zn
在这里插入图片描述


运行:
在这里插入图片描述
进入发现:et 是无效代码
在这里插入图片描述
直接:
在这里插入图片描述




终于搞定:
在这里插入图片描述



  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

akkkk0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值