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

看到最近 2 天讨论最多的前端加密方式防止逆向,分享一下有意思的东西

  •  
  •   hsuehly · 2023-08-22 11:40:14 +08:00 · 5497 次点击
    这是一个创建于 460 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端如何做加密,解密才不能破解呢,这里发现了两个有意思的网站 网站 A: aHR0cHM6Ly95YW5ndHUudG9wLw== 网站 B:aHR0cHM6Ly9qeC5qc29ucGxheWVyLmNvbS9wbGF5ZXIvP3VybD1odHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDBjdDIzMGgxL2owMDQ2NGJveDJkLmh0bWw= 大家感兴趣的可以看一下,他们是如何做的,这里只做技术交流,不涉及其他

    41 条回复    2023-08-23 20:41:08 +08:00
    mokiki
        1
    mokiki  
       2023-08-22 11:50:29 +08:00
    T1DkuLrku4DkuYjopoHovaznoIHlkaLvvJ8K6L+Z5piv5Li65LuA5LmI5ZGi77yfCuWIsOW6leaYr+S4uuS6huS7gOS5iOWRou+8nw==
    AoEiuV020JP
        2
    AoEiuV020JP  
       2023-08-22 11:51:03 +08:00
    不直接说一下吗, 是有什么亮点?视频资源站,应该都差不多吧,
    uibobo
        3
    uibobo  
       2023-08-22 11:51:57 +08:00
    这玩意个解密有啥关系
    picone
        4
    picone  
       2023-08-22 11:54:14 +08:00
    我也来分享一个,尝试逆向太难了。https://www.nftsniper.club/
    - 通过 timer 触发 debug ,通过代理 js 去掉了
    - 所有函数和字符串都有编码表,动态拼接起来,和你发的第二个有点类似,不过更复杂一些
    hsuehly
        5
    hsuehly  
    OP
       2023-08-22 11:57:33 +08:00
    @AoEiuV020JP 两个都用了 wasm
    horizon
        6
    horizon  
       2023-08-22 12:07:08 +08:00
    wasm 能被逆向吗
    enpitsulin
        7
    enpitsulin  
       2023-08-22 12:13:59 +08:00
    不过看起来你这两个链接中的 wasm 都是提供弹幕功能的库罢了

    其实有一点就是如果使用 wasm 写通用逻辑完全可以 dump 找到 js 调用方直接去调,作为一个通用平台,提供 wasm 相当于提供了个库😂

    当然把业务逻辑完全写在 wasm 那就基本没得搞了,但是可能代价有点大
    32uKHwVJ179qCmPj
        8
    32uKHwVJ179qCmPj  
       2023-08-22 12:20:10 +08:00
    wasm 又不是不能逆向
    tool2d
        9
    tool2d  
       2023-08-22 12:43:15 +08:00
    第一个网站随便下断点调试,没看到什么亮点。

    第二个网站 m3u8 获取做了鉴权机制,把 header,refer 什么都加上就可以了。
    Binwalker
        10
    Binwalker  
       2023-08-22 12:50:56 +08:00
    机器码都能逆向,前端那套当然更可以
    hsuehly
        11
    hsuehly  
    OP
       2023-08-22 13:04:56 +08:00 via iPhone
    @tool2d 你仔细看一下其实第一个是最难的
    hsuehly
        12
    hsuehly  
    OP
       2023-08-22 13:05:59 +08:00 via iPhone
    @enpitsulin 两个加解密的逻辑都在 wasm 里 wasm 没有提供弹幕功能,只做加解密相关
    tool2d
        13
    tool2d  
       2023-08-22 13:14:30 +08:00
    @hsuehliuyang 第一个就是普通的 mp4 视频啊,我看的连 m3u8 都没加入。写个 JS 插件注入到页面,获取 mp4 url 就可以了。
    ljrdxs
        14
    ljrdxs  
       2023-08-22 13:19:23 +08:00 via Android
    看了本站“关于”,没说不能发链接。为何用 base64 编码?
    tool2d
        15
    tool2d  
       2023-08-22 13:24:07 +08:00
    哦,第一个电视剧腾讯源是 mp4 。普通的动画片是 m3u8 切片,但是放在阿里云上的,随便下。还不如第二个是自己的服务器,有鉴权机制。
    tool2d
        16
    tool2d  
       2023-08-22 13:29:24 +08:00
    这种视频网站有个通病,就是再怎么加密,一定会有获取 m3u8 这个步骤。

    如果获取的是明文 m3u8 ,必定会被浏览器给捕获,也会被带过滤器的浏览器插件给捕获,这是 100%可以复现的。

    有那种二进制加密 m3u8 ,取回来内存解密,但是这种极少见。
    fzdwx
        17
    fzdwx  
       2023-08-22 13:32:52 +08:00
    老哥你分享的第二个网站太棒了
    hsuehly
        18
    hsuehly  
    OP
       2023-08-22 13:33:16 +08:00 via iPhone
    @tool2d 我给你单独抽出来吧 https://jx.yangtu.top/?url= 主流视频站的地址
    hsuehly
        19
    hsuehly  
    OP
       2023-08-22 13:38:44 +08:00 via iPhone
    @ljrdxs 如果连 base64 编码都不知道,那我感觉他也不清楚网站的特殊之处,为了过滤一部分吧
    tool2d
        20
    tool2d  
       2023-08-22 13:43:31 +08:00
    @hsuehliuyang 也许我们侧重点不一样,我是觉得自己插件能提取出任意的 m3u8 地址,直接本地播放。

    你可能需要研究 m3u8 地址是如何拼接出来的,如何调用他们的 API 。

    我不是做视频站的,对 API 不太关心。只要能下载视频切片,能本地看视频就可以了。
    fason1995
        21
    fason1995  
       2023-08-22 13:47:33 +08:00
    哈哈 第二个网址不错 除了资源不太全 没啥问题
    otakustay
        22
    otakustay  
       2023-08-22 13:47:43 +08:00
    如果我要 CSRF ,你加密是 wasm 我拿着你的 wasm 用就行了
    如果我要看加密前的内容,只要找到你调用 wasm 的地方打断点就行了
    所以这个解决了什么问题呢?
    kkk9
        23
    kkk9  
       2023-08-22 14:09:00 +08:00
    没看出来有什么挑战性
    zzNucker
        24
    zzNucker  
       2023-08-22 14:11:37 +08:00
    这种就别发了

    想挑战自己第一去搞谷歌的 recaptcha ,第二去搞淘宝的反爬
    danbai
        25
    danbai  
       2023-08-22 14:17:49 +08:00
    52 上这种破解 wasm 很多
    hsuehly
        26
    hsuehly  
    OP
       2023-08-22 14:18:58 +08:00 via iPhone
    @otakustay 你可以拿着 wasm 运行一下,你就知道了
    ljrdxs
        27
    ljrdxs  
       2023-08-22 14:20:41 +08:00
    @hsuehliuyang 光凭编码我也看不出。只是 base64 用的最多罢了。
    janus77
        28
    janus77  
       2023-08-22 14:30:21 +08:00
    我只知道一个比较大的就是微信读书的 web 页面 https://weread.qq.com/ 反正这个没看到人破解
    learningman
        29
    learningman  
       2023-08-22 15:24:26 +08:00
    wasm 总要导出函数,直接拿着导出函数用不就完事了,管他内部怎么处理的
    learningman
        30
    learningman  
       2023-08-22 15:25:56 +08:00
    (func $env.syscall/js.valueSet (;0;) (import "env" "syscall/js.valueSet") (param i32 i32 i32 i32 i32))
    (func $env.syscall/js.valuePrepareString (;1;) (import "env" "syscall/js.valuePrepareString") (param i32 i32 i32))
    (func $env.syscall/js.valueLoadString (;2;) (import "env" "syscall/js.valueLoadString") (param i32 i32 i32 i32 i32))
    (func $env.syscall/js.valueLength (;3;) (import "env" "syscall/js.valueLength") (param i32 i32) (result i32))
    (func $env.syscall/js.valueIndex (;4;) (import "env" "syscall/js.valueIndex") (param i32 i32 i32 i32))
    (func $env.syscall/js.valueGet (;5;) (import "env" "syscall/js.valueGet") (param i32 i32 i32 i32 i32))
    (func $env.syscall/js.valueCall (;6;) (import "env" "syscall/js.valueCall") (param i32 i32 i32 i32 i32 i32 i32 i32))
    (func $env.syscall/js.stringVal (;7;) (import "env" "syscall/js.stringVal") (param i32 i32 i32 i32))
    (func $env.syscall/js.finalizeRef (;8;) (import "env" "syscall/js.finalizeRef") (param i32 i32))
    (func $env.runtime.ticks (;9;) (import "env" "runtime.ticks") (result f64))
    (func $wasi_snapshot_preview1.fd_write (;10;) (import "wasi_snapshot_preview1" "fd_write") (param i32 i32 i32 i32) (result i32))
    (func $wasi_snapshot_preview1.random_get (;11;) (import "wasi_snapshot_preview1" "random_get") (param i32 i32) (result i32))
    hsuehly
        31
    hsuehly  
    OP
       2023-08-22 15:38:39 +08:00 via iPhone
    @learningman 内部有检测,你可以拿着运行一下
    tool2d
        32
    tool2d  
       2023-08-22 16:03:10 +08:00
    一个视频网站,m3u8 没加密,切片没加密,我也不知道楼主想要破解什么信息。
    bigha
        33
    bigha  
       2023-08-22 17:49:49 +08:00
    第一个网站 已经搞定了

    https://www.v2ex.com/t/967442
    hsuehly
        34
    hsuehly  
    OP
       2023-08-22 18:41:01 +08:00
    @tool2d 接口呀
    hsuehly
        35
    hsuehly  
    OP
       2023-08-22 18:41:15 +08:00
    @bigha 大佬,大佬
    kuanat
        36
    kuanat  
       2023-08-22 19:42:02 +08:00
    连 js 混淆都不做,根本没有想要防的意思。它这个业务,侵权就不说了,偷流量、滥用 cdn 真是熟练。
    hsuehly
        37
    hsuehly  
    OP
       2023-08-22 20:07:13 +08:00 via iPhone
    @kuanat 有没有可能人家比较自信,连 debugger 都没😂
    kuanat
        38
    kuanat  
       2023-08-22 20:37:41 +08:00 via Android
    @hsuehliuyang 这和有没有自信没关系啊。

    前段混淆无非就是防君子、小人和机器人。第一个网站的业务,显然不是防君子防机器人
    kuanat
        39
    kuanat  
       2023-08-22 20:41:53 +08:00 via Android
    @hsuehliuyang 这和有没有自信没关系啊。

    前段混淆无非就是防君子、小人和机器人。第一个网站的业务,显然不是防君子防机器人,防小人也用不着,因为没有一点东西是自己的。

    但是你看它用伪造的 png 头假装图片跑视频流,然后用某站的缓存漏洞托管自己的播放列表文件,这种手段水平,想加个 js 混淆太容易了。

    它真想藏的大概不是 url 而是流量。
    hsuehly
        40
    hsuehly  
    OP
       2023-08-22 20:48:08 +08:00 via iPhone
    @kuanat 是的就网站首页是他自己的😂
    cleveryun
        41
    cleveryun  
       2023-08-23 20:41:08 +08:00 via Android
    @kuanat 我去,学习了,还能这样操作
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:20 · PVG 09:20 · LAX 17:20 · JFK 20:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.