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

请问微信 openid 可以伪造吗

  •  
  •   litaomn · 2020-09-30 12:25:28 +08:00 · 15073 次点击
    这是一个创建于 1547 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一些二维码活码限制了一个微信只能扫固定某一个二维码,猜测微信访问网页的时候生成一个 openid,这个 openid 跟二维码图片绑定。下次再扫描还是拿到同一张二维码。设想如果通过 hook 方式来伪造 openid 的话,是否可以突破这种限制呢?
    34 条回复    2020-10-09 10:09:39 +08:00
    ThisQ
        1
    ThisQ  
       2020-09-30 12:30:15 +08:00
    我觉得没戏,openid 是服务器针对不同的公众号来生成不同的 id 的,如果给改掉之后应该就找不到对应的关系了。
    noe132
        2
    noe132  
       2020-09-30 12:31:14 +08:00 via Android
    理论上同一个用户,不同应用获取到对该用户的 openid 不保证一致
    wxsm
        3
    wxsm  
       2020-09-30 12:31:39 +08:00
    一个 openid 是对应一个用户的,wx 通过它能知道你是谁,伪造的 openid 要怎么跟用户对应上呢?
    QUIOA
        4
    QUIOA  
       2020-09-30 12:31:55 +08:00 via Android
    是不是想搞刷赞刷票呀
    Rekkles
        5
    Rekkles  
       2020-09-30 12:33:21 +08:00   ❤️ 1
    如果这都可以那腾讯可以倒闭了。
    reus
        6
    reus  
       2020-09-30 12:34:33 +08:00
    用汗毛想都知道不可以
    litaomn
        7
    litaomn  
    OP
       2020-09-30 12:38:49 +08:00
    @QUIOA 不是刷票,是想获取活码后台对应所有的二维码,现在只能通过买小号来解决问题,小号价格贵封得快,扛不住啊
    kop1989
        8
    kop1989  
       2020-09-30 12:39:26 +08:00   ❤️ 1
    可以伪造,只要绕过二次跳转获取 code 》拿到 openID 的逻辑即可。

    但按照你的描述,“某 openID 只能扫固定的某个二维码”。说明其系统中有 openid 与二维码链接的对应关系验证。也就是说你瞎填一个是不行的。必须得是符合其其他二维码对应关系的 openID 才行。

    然后基本上就无解了。因为无感获取其他人的 openID 需要其在其的微信浏览器中获取一次性 code,附加 appid 与 appsecret 才能获取到。第三方技术服务的 appsecret 你是 100%拿不到的。

    完结。
    zhiyzellda
        9
    zhiyzellda  
       2020-09-30 12:40:28 +08:00 via Android
    查了一下什么是 hook,我想说,这个关键要看是微信本地判断或是服务器端判断,服务器判断的话,你没有人家服务器的 root 密码,怎么 hook ?
    他可能直接把 openid 传给服务器进行登记。根本不存本地。
    litaomn
        10
    litaomn  
    OP
       2020-09-30 12:47:21 +08:00
    @kop1989 网页通过 snsapi_base 获取 openid,第三方应该不知道这个 openid 是不是合法的,获取到 openid 后,将 openid 随意改造一下,是否就可以突破呢
    kop1989
        11
    kop1989  
       2020-09-30 12:58:17 +08:00
    @litaomn #10 确实可以改造 /替换,就诸如我说的。
    但是第一,openID 不连续,第二,根据你的业务描述,openID 与二维码有关联关系。
    所以除非暴力穷举所有 openID,否则做不到你说的“拿到所有二维码”这种结果。
    kop1989
        12
    kop1989  
       2020-09-30 12:59:51 +08:00
    @litaomn #10 换句话说,其实聊到业务破解,就跟 openID 无关了,你完全可以通过直接爬接口灌参数的方式拿到二维码 。
    yushiro
        13
    yushiro  
       2020-09-30 13:07:31 +08:00 via iPhone
    请看微信的文档,只要按照文档来,你是不可能拿到 openid 的,与 web 端无关。
    lucifelx
        14
    lucifelx  
       2020-09-30 13:25:12 +08:00 via Android
    openid 泄露与被伪造都没有任何影响,因为后端是向微信服务索要的 openid,只要客户端换取 accesstoken 的过程能保证安全,那么后端取到的 openid 必然是正确的。(大概这个意思,有段时间不做 wx 开发了)
    litaomn
        15
    litaomn  
    OP
       2020-09-30 13:36:03 +08:00
    感谢各位大佬解答,死了这条心了
    d5
        16
    d5  
       2020-09-30 13:59:56 +08:00
    openid 无法伪造,但是有些场景分析包,可以提供仿冒的 openid
    KingPL
        17
    KingPL  
       2020-09-30 14:24:20 +08:00
    正常 只是 code 传到后台,后台校验拿到 openid 再返回一个 sessionId 到前端完成绑定,openid 不会放到前端...
    keepeye
        18
    keepeye  
       2020-09-30 14:30:48 +08:00
    不行
    masker
        19
    masker  
       2020-09-30 14:41:53 +08:00 via Android   ❤️ 2
    哇!那微信钱包的钱不也可以自己加 0 了?
    linuxvalue
        20
    linuxvalue  
       2020-09-30 15:46:43 +08:00
    想多了
    killergun
        21
    killergun  
       2020-09-30 16:27:24 +08:00
    这要是能伪造,微信程序员可以下岗了
    quan01994
        22
    quan01994  
       2020-09-30 16:29:49 +08:00
    不能伪造,但是你可以获取啊,你可以网上买一波微信号,用于获取 openId 。
    levon
        23
    levon  
       2020-09-30 16:46:27 +08:00 via iPhone
    能不能伪造跟你写的程序有关
    annielong
        24
    annielong  
       2020-09-30 18:02:52 +08:00
    看程序了,获取 openid 这个是没法伪造的,但是第三方程序不一定会验证这个是否合法,
    newmlp
        25
    newmlp  
       2020-09-30 18:09:31 +08:00
    去看看微信开发文档就知道了
    yepinf
        26
    yepinf  
       2020-09-30 19:01:01 +08:00 via Android
    @kop1989 请教下,如何模拟微信浏览器取跳转的 code 参数
    EminemW
        27
    EminemW  
       2020-09-30 20:31:50 +08:00
    openid 是微信提供一个 token 给后端,后端在通过这个 token 与 appid 向微信服务器请求拿到 openid 。所以你破解方向不应该是 openid,
    kop1989
        28
    kop1989  
       2020-09-30 21:47:22 +08:00   ❤️ 1
    @yepinf #26 不需要获取 code,因为 lz 的最终目的是编造非本机主的 openID 。说白了就是绕过 openID 获取机制而已。和 hack 微信的 openID 获取机制其实无关。
    ebony0319
        29
    ebony0319  
       2020-09-30 23:09:29 +08:00 via Android
    理论上不行,但是我见过黑产突然一下子(一两秒)一个地址多出十多万微信刷票,不知道怎么弄的。
    zhiyzellda
        30
    zhiyzellda  
       2020-10-01 08:22:23 +08:00 via Android
    @ebony0319 他自己就是內部員工吧,內鬼搞得。或者是內部人在黑市裡出售了工具。黑市用了 Tor,所以鵝厂高層也不知道是誰。
    xuanbg
        31
    xuanbg  
       2020-10-01 10:23:49 +08:00
    虽然一个用户有多个 openId,但这些 id 是和公共号一一对应的。你伪造的上哪里去对应?对不上就拿不到用户身份,就没法通过验证。
    xuanbg
        32
    xuanbg  
       2020-10-01 10:26:04 +08:00
    @ebony0319 这种大多是群控搞的,就是有几万台设备,一个设备上有若干账号,然后通过群控工具一下子给你投票。
    eudore
        33
    eudore  
       2020-10-01 13:51:31 +08:00
    可以伪造 openid,前提是你可以破解 hmac 的非对称加密。
    ESeanZ
        34
    ESeanZ  
       2020-10-09 10:09:39 +08:00
    自己写一个微信服务不就好了吗?切图仔一个 想着自己手动写一个获取 openid 的服务(open_weixin_qq_com/connect/oauth2) 路由器吧域名解析到自己服务器上应该就可以了吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4365 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:06 · PVG 12:06 · LAX 20:06 · JFK 23:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.