V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ggp1ot2
V2EX  ›  程序员

爬虫里面的 Session ID 可以构造吗?

  •  
  •   ggp1ot2 · 2023-04-18 15:19:51 +08:00 · 1405 次点击
    这是一个创建于 585 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    想自动化某个手机 APP 点击报名的步骤。就是每天到时间点几个按钮。

    使用 Charles 抓包点击时的数据传输,成功找到报名的 API ,就是一个 post 请求。直接复制请求可以实现我的需求

    问题

    关键是,post 过去的有一个参数是 session id ,几分钟就失效,类似这样

    identityauth2: {"SessionID":"f2c07xxxxxxxxxxxxxxxxxx",
    "Str_Signature":"d73115f6205xxxxxxxxxxxxxxxxxxxxxxx",
    "Str_TimeStamp":"2023-04-18 10:14:25"}"
    

    导致我无法将程序部署在服务器上定时运行。

    看起来是一堆无规律的字符串,感觉是通过什么规则生成的,且是对应的,搜了下好像是某种鉴权的方式?

    想问下,这个字典,可以人工的去模拟构造吗?

    是否可以通过某种方式,在发送我这个请求之前,先请求什么,来获得有效的 session id ?

    我的想法是,是不是可以模拟登陆来获取?但是登陆也是手机接收验证码登陆,好像更麻烦了?

    14 条回复    2023-04-18 19:11:42 +08:00
    hefish
        1
    hefish  
       2023-04-18 15:23:37 +08:00
    再抓包看看,是不是有保活 sessionid 的操作。
    hex2en
        2
    hex2en  
       2023-04-18 15:25:07 +08:00
    sessionID 是服务端生成的,随机的,用来鉴权你是什么用户。
    一般是登录时获取 sessionid
    ggp1ot2
        3
    ggp1ot2  
    OP
       2023-04-18 15:25:07 +08:00
    对了,还有 cookie ,貌似能顶很久,就是这个 sessionID 有点搞不定
    ggp1ot2
        4
    ggp1ot2  
    OP
       2023-04-18 15:26:04 +08:00
    @hex2en #2 那为啥好好的。我不动,APP 没有显示注销掉线,只是 sessionid 变了?
    iyiluo
        5
    iyiluo  
       2023-04-18 15:28:49 +08:00
    反编译查 app 的认证逻辑,不过这已经是灰色地带了
    ggp1ot2
        6
    ggp1ot2  
    OP
       2023-04-18 15:29:05 +08:00
    @hefish #1 手机 APP 登陆的话,只要不主动退出登陆,每次打开 APP 都是登陆的状态,是不是意味着会有一个 sessionID 是长期有效的?因为如果要经常抓包获取去更新,就有点麻烦了
    ospider
        7
    ospider  
       2023-04-18 15:29:14 +08:00
    这你就得逆向 app 了,不过看样子你对 session 的机制也不是完全了解,可能得多花点时间……
    ggp1ot2
        8
    ggp1ot2  
    OP
       2023-04-18 15:29:32 +08:00
    @iyiluo #5 谢谢,不过 IOS APP 反编译好像有点复杂?
    hugedeffing
        9
    hugedeffing  
       2023-04-18 15:31:01 +08:00
    简单说下 SessionID 生成原理,一般是服务端生成的随机数。
    举个例子,我是服务端,我生成一个随机数发给你,我存储在我的服务端,下发给你客户端。你客户端需要带这个随机数跟我交互,我会做一个对比。一般一次交互就是依赖这个唯一的 seesionID 。

    所以,你获取有效的 session ID 的方式,一般就是保持活跃(以延长对话时间),或者重新构造第一次创建的 sessionId 。
    ggp1ot2
        10
    ggp1ot2  
    OP
       2023-04-18 15:33:23 +08:00
    @ospider #7 如果一定要做逆向的话,可能就不考虑了哈哈,投入的时间成本可能就很多了
    ggp1ot2
        11
    ggp1ot2  
    OP
       2023-04-18 15:34:49 +08:00
    @hugedeffing #9 [保持活跃] 的意思是,比如我发现两分钟就过期,我就 30s 发送一次请求?以保持 id 是一直有效的?

    这样代码上很简单,但是有点担心被探测到然后被 ban 了
    yulgang
        12
    yulgang  
       2023-04-18 15:37:48 +08:00
    在请求之前可能请求服务端更新了这个 id 。

    我前两天用按键精灵搞了一个,找图,找色还行效率挺高。。。
    Juszoe
        13
    Juszoe  
       2023-04-18 19:09:21 +08:00
    很常见的字段,没什么标准,不同的程序员有不同的做法,只能靠反编译分析
    k9982874
        14
    k9982874  
       2023-04-18 19:11:42 +08:00 via Android
    看看登录流程有没有 refresh_token
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2662 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:45 · PVG 19:45 · LAX 03:45 · JFK 06:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.