V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
anai1943
V2EX  ›  JavaScript

js 反调试 怎么实现?

  •  2
     
  •   anai1943 · 2017-03-18 18:17:47 +08:00 · 8560 次点击
    这是一个创建于 2814 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目中用到了一些 xml 文件, xml 文件都是通过工具加密的,再用前端 js 解密回来使用, xml 里面都是一些样式代码,如果被解密,辛苦写的样式就被人盗用了。

    此加密方法有个缺陷,通过 F12 调试前端 js 的解密函数,可以打印出来解密后的 xml 。

    我用过类似 npm code-protect 这种工具来加密 js 文件,发现只是混淆了一些变量名而已,网上有实现 js 反调试的,具体效果见下图,通过什么方法可以实现这种效果呢?

    111222.png
    第 1 条附言  ·  2017-03-18 20:39:53 +08:00
    看到很多朋友留言了,多谢。

    可能前面需求没说清楚,不是实现 js 代码加密,是要阻止用浏览器调试工具调试,例如:使用 chrome 或者别的浏览器,格式化 js 文件后,设置一个断点,正常情况下,代码会执行到这个断点,你可以查看变量的值什么的,如果实现反调试,能否实现像截图中那样,破坏调试流程。

    @ftpgxm 你提供的方法应该就是正解了,我测试下。谢谢!
    用这种手段也属于无奈,辛苦写的皮肤经常被盗用。如果能实现反调试,可以阻止大部分的菜鸟级别的盗用者了。
    30 条回复    2017-03-20 18:27:45 +08:00
    xqin
        1
    xqin  
       2017-03-18 18:28:02 +08:00
    看图猜代码?
    hcwhan
        2
    hcwhan  
       2017-03-18 18:56:28 +08:00
    样式这种不是需要被人看到 怎么加密
    hcwhan
        3
    hcwhan  
       2017-03-18 18:56:55 +08:00
    直接查看最后的样式属性 不就行了
    zzNucker
        4
    zzNucker  
       2017-03-18 19:02:57 +08:00
    你发图没用,
    地址呢?
    ChefIsAwesome
        5
    ChefIsAwesome  
       2017-03-18 19:03:27 +08:00   ❤️ 2
    右上角最后一个按钮是停用所有 breakpoints ,直接就破了这东西了。
    anai1943
        6
    anai1943  
    OP
       2017-03-18 19:05:10 +08:00
    @hcwhan 样式不是 css 写的,是用 action script 写的。如果加密得当,客户端是看不到 xml 里面的样式源码的。
    anai1943
        7
    anai1943  
    OP
       2017-03-18 19:07:10 +08:00
    @zzNucker 这个。。没地址啊,写出来这个功能的哥们,做成收费的了,只能买他的软件,才能加密 js ,没有提供加密后的 js 预览地址。
    qqpkat2
        8
    qqpkat2  
       2017-03-18 19:17:33 +08:00
    js 加密就是延长解密时间而已
    百度和 QQ 的密码加密都能研究出来,你就别想了
    anai1943
        9
    anai1943  
    OP
       2017-03-18 19:20:39 +08:00
    @qqpkat2 js 代码被解密没关系的,只想达到这样的效果就可以了,用户在浏览器里面用调试工具设置断点的时候,实现截图里面的效果。
    des
        10
    des  
       2017-03-18 19:31:46 +08:00
    找到了这个,估计说的也是这个。
    各位可以试一试,不过由于那个图片加载不出来,所以一堆 error ,不用管
    未加密版的: http://jsfiddle.net/JScrambler/GaeLD/
    加密版的: http://jsfiddle.net/JScrambler/5ujp3/
    Kilerd
        11
    Kilerd  
       2017-03-18 19:57:57 +08:00
    前端的东西还想加密???
    anai1943
        12
    anai1943  
    OP
       2017-03-18 20:29:47 +08:00
    @des 这个很早之前注册过, JScrambler : https://jscrambler.com/,是商业版的,收费的。你发的 demo 翻墙可以看到图片的。我去试试,以前注册过没怎么研究。
    anai1943
        13
    anai1943  
    OP
       2017-03-18 20:30:50 +08:00
    @Kilerd 不是加密,是反调试。。在浏览器里面用调试工具设置断点的时候,实现截图里面的效果。
    ftpgxm
        14
    ftpgxm  
       2017-03-18 20:32:48 +08:00   ❤️ 3
    反调试一个方法就是利用递归次数过多调试工具会抛出异常,旁门左道,前端再怎么设防依旧是运行在客户端的~

    Demo: https://jsfiddle.net/ftpgxm/t4ux8xp4/
    ftpgxm
        15
    ftpgxm  
       2017-03-18 20:45:01 +08:00
    anai1943
        16
    anai1943  
    OP
       2017-03-18 21:03:44 +08:00
    @ftpgxm 恩 测试可用。。感谢!
    hanguofu
        17
    hanguofu  
       2017-03-18 21:15:35 +08:00
    学习了, V2EX 高手就是多:)
    imswing
        18
    imswing  
       2017-03-19 00:13:09 +08:00 via Android
    Mark 一下
    moyang
        19
    moyang  
       2017-03-19 06:15:06 +08:00
    @ftpgxm 看了 jsfiddle ,不明白。 chrome 没办法可靠感知 console 是不是打开,怎么能做到“一旦打开调试工具就抛异常”?
    beginor
        20
    beginor  
       2017-03-19 10:12:16 +08:00 via Android
    编译成 Web Assembly 吧
    usedname
        21
    usedname  
       2017-03-19 10:43:30 +08:00 via iPad
    你把代码写的足够烂人家就不会调试你了
    des
        22
    des  
       2017-03-19 10:49:58 +08:00
    @ftpgxm chrome 打不打开调试工具一样会抛异常, edge 倒是可以,没装 firefox 不知道
    ftpgxm
        23
    ftpgxm  
       2017-03-19 12:29:42 +08:00
    @des
    @moyang
    异常应该说是 JS 抛出的,调试工具只是能直观看到,上面表述有误,抱歉。
    try cache 为了保证了后续代码能正常执行,同时打开调试工具能进入断点。
    macleek
        24
    macleek  
       2017-03-19 12:42:01 +08:00
    以前在一个不能点投诉的微信页面见到过这种用法。。。
    sagaxu
        25
    sagaxu  
       2017-03-19 15:44:35 +08:00
    firefox 里深层次递归没用,还是可以调试
    bombless
        26
    bombless  
       2017-03-19 16:11:06 +08:00 via Android
    微信网页版的那个加密好像不错,那些 json 中的字符串都被转换过,都不知道怎么转换回来好, 233
    momocraft
        27
    momocraft  
       2017-03-19 19:52:56 +08:00
    @ftpgxm 如果把瀏覽器 "拋出異常時自動斷點" 的功能關掉, 這個方法還好用嗎?
    rannnn
        28
    rannnn  
       2017-03-20 08:33:05 +08:00
    @moyang debugger statement 只有在 console 打开的情况下才有用。写那么复杂其实就是循环 500 次
    moyang
        29
    moyang  
       2017-03-20 11:00:45 +08:00 via Android
    @rannnn debugger 语句只有开 console 才有用,这是对的。但是递归循环这一块就是不开 console 也会有。所以重点就是不开 console 会递归但没有异常,开了 console 就会有异常?没发现这样的现象啊

    还不如在所有语句中间插入数百 debugger 语句,也能干扰调试
    rannnn
        30
    rannnn  
       2017-03-20 18:27:45 +08:00
    @moyang 我觉得那个递归没啥意义,直接循环就完了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   917 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:54 · PVG 04:54 · LAX 12:54 · JFK 15:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.