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

有没有 Java 代码混淆工具,不是混淆 jar 包,是混淆代码!

  •  
  •   paranoiagu · 2017-01-10 23:10:19 +08:00 · 12747 次点击
    这是一个创建于 2851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    客户要求提供源代码,实在没办法了,能不能混淆源代码,编译不影响,运行不影响,但是就是美观方面差点。

    求工具。
    35 条回复    2018-11-19 18:16:47 +08:00
    Monstercat
        1
    Monstercat  
       2017-01-10 23:13:11 +08:00
    Proguard+JD
    Valyrian
        2
    Valyrian  
       2017-01-10 23:13:13 +08:00   ❤️ 2
    客户看了你给混淆了再问你要不混淆的代码怎么办?
    可以考虑多要点钱。。
    paranoiagu
        3
    paranoiagu  
    OP
       2017-01-10 23:13:53 +08:00 via Android
    @Valyrian 不给,关键就是不能给阿
    paranoiagu
        4
    paranoiagu  
    OP
       2017-01-10 23:14:21 +08:00 via Android
    @Monstercat 关键还能编译过吗?
    rockyou12
        5
    rockyou12  
       2017-01-10 23:20:09 +08:00
    看来是最开始没谈好坑爹了吧(σ-`д・´)
    wdlth
        6
    wdlth  
       2017-01-10 23:29:48 +08:00
    如果原来没谈好,现在你混淆了对你也没好处,客户可以此为把柄来坑你,毕竟你不能说混淆后的代码是开发时的源代码……
    ihuotui
        7
    ihuotui  
       2017-01-11 00:40:20 +08:00 via iPhone
    java 注定不行,从 class 规定就确定了可以反编译
    slixurd
        8
    slixurd  
       2017-01-11 00:55:36 +08:00   ❤️ 2
    那你就发个反编译后的代码给客户就好了= =......
    wmhx
        9
    wmhx  
       2017-01-11 00:57:43 +08:00
    简单点,关键点给整成一个复杂的内部类, 这样可以编译运行,但反编译出来的代码会有少量的语法错误,
    hellojinjie
        10
    hellojinjie  
       2017-01-11 08:38:49 +08:00 via Android
    自己写这一个变量替换工具啊,把变量都提换成 a b c d
    mritd
        11
    mritd  
       2017-01-11 08:56:10 +08:00 via iPhone   ❤️ 3
    混希手段还是有的……不要说从 class 就注定了不能混希……我只是提供个思路,也是前两天反编译别人代码看到的,所有类名变量名全部替换成超长的 0O0O000OO0O000O 这种玩意……其他还有 1I1II1I 这种玩意……我成功反编译……然后就看傻了
    wyntergreg
        12
    wyntergreg  
       2017-01-11 08:58:48 +08:00
    注释全删了, JS 混淆一下就行了
    depress
        13
    depress  
       2017-01-11 09:21:39 +08:00   ❤️ 2
    ①注释全删
    ②类名、方法名、变量名写的乱七八糟
    ③每个类里弄 N 多个没用的方法,在有用的方法里偶尔调用一下没用的方法,实际上调用那行什么意义都没有
    ④如果后续不用维护了,把方法都合并,一个方法四五千行
    混淆不了还不能恶心人么~
    814084764
        14
    814084764  
       2017-01-11 09:30:56 +08:00
    @mritd 我之前看别人混淆后的代码,全是 _ 这个玩意。。。长短还不一样。。妈蛋!
    顺便问一下,哪里可以修改 proguard 的混淆的字母?
    scnace
        15
    scnace  
       2017-01-11 09:42:29 +08:00 via Android
    我记得逼乎上有一个 怎样编写不可维护代码 的问答 楼主可以去看看啊(逃
    baoguok
        16
    baoguok  
       2017-01-11 09:59:00 +08:00
    给就是了,代码不值钱。

    合同没约定代码版权问题,那就只能给
    leloext
        17
    leloext  
       2017-01-11 10:01:57 +08:00
    @hellojinjie proguard 就可以做到这个的
    Chrisplus
        18
    Chrisplus  
       2017-01-11 10:26:16 +08:00
    手动使用 proguard shrink & obfuscate
    AlisaDestiny
        19
    AlisaDestiny  
       2017-01-11 10:52:08 +08:00
    @mritd 哈哈。这 TM 谁想出来的。真是高。 abc 还将就着能分清楚变量。要是 0O 这玩意。看的真是头疼。
    mritd
        20
    mritd  
       2017-01-11 11:43:55 +08:00 via iPhone
    @AlisaDestiny 不是头疼的问题……是根本没法看
    mritd
        21
    mritd  
       2017-01-11 11:44:44 +08:00 via iPhone
    @814084764 是不是 tcpxxxx 😂😂😂
    yidinghe
        22
    yidinghe  
       2017-01-11 11:52:22 +08:00 via Android
    用重构,类名手工改成 A,B,C,D,E ,包名也这样改,方法名、参数名、变量名也是。
    Adia
        23
    Adia  
       2017-01-11 12:58:30 +08:00
    Proguard 啊
    Bairrfhoinn
        24
    Bairrfhoinn  
       2017-01-11 13:40:11 +08:00
    @mritd @depress 厉害,真是好方法。:doge:
    liuzhen
        26
    liuzhen  
       2017-01-11 13:47:15 +08:00
    @liuzhen 未亲测,楼主试过后可以写下测试结果
    nicevar
        27
    nicevar  
       2017-01-11 14:12:19 +08:00
    谈判问题啊,用技术来解决怎么行
    zgqq
        28
    zgqq  
       2017-01-11 14:26:19 +08:00
    @ihuotui 反编译有个毛用?全部都 a,b,c,d 你看得懂?
    chilaoqi
        29
    chilaoqi  
       2017-01-11 14:28:04 +08:00
    本来自己写的就自带混淆。。。。
    yutian2211
        30
    yutian2211  
       2017-01-11 16:30:06 +08:00
    hmmm....关注一下
    正常给客户之后,你就不要想拿到尾款了
    814084764
        31
    814084764  
       2017-01-11 17:19:38 +08:00
    @mritd 不是。。哈哈
    paranoiagu
        32
    paranoiagu  
    OP
       2017-01-11 21:24:39 +08:00 via Android
    谢谢各位。
    imnpc
        33
    imnpc  
       2017-01-12 13:24:15 +08:00
    一般建议 O0 或者 ILil 各种混淆即可
    bk201
        34
    bk201  
       2017-01-12 16:17:15 +08:00
    反编译后的代码一般都很恶心,然后对变量做个批量替换就可以了。
    virbox
        35
    virbox  
       2018-11-19 18:16:47 +08:00
    VirboxProtector Standalone 加壳工具可对代码加密的技术有:代码混淆、代码虚拟化、代码加密。

    代码混淆:利用花指令和代码非等价变形等技术,将程序的代码,转换成一种功能上等价,但是难于阅读和理解的代码,可充分干扰静态分析。

    虚拟化:将指令编译为虚拟代码,放在指定虚拟机中运行,目前对指令有一定的格式要求,有的函数可能不能被保护。

    代码加密:将代码块作为数据,用许可加密函数存储,程序执行到该函数时验证许可并解密,内存中不会暴露完整的代码块,目前有的函数不可添加到保护中。


    Virbox Protector Standalone 将被保护的程序代码转换为虚拟机代码,程序运行时,虚拟机将模拟程序执行,进入和离开虚拟机都有高级代码混淆。虚拟机配合代码混淆可以达到很好的保护效果,尤其是开发者的私有逻辑。高级混淆利用花指令和代码非等价变形等技术,将程序的代码,转换成一种功能上等价,但是难于阅读和理解的代码,可充分干扰静态分析。应用程序的解压缩含有动态密码,让一切自动脱壳工具失效,有效的阻止.Net 、PE 程序的直接反编译。

    使用 Virbox Protector Standalone 时,选择被保护的函数列表,添加需要保护的函数,可以使用性能分析功能,对程序进行分析,并选择重要的函数来保护。

    性能分析:点击性能分析按钮,运行需要保护的程序,执行正常的业务操作,程序中各个函数模块调用的次数实时显示在列表中。如果当前分析的程序位为 DLL 程序,则需要选择启动主程序,主程序启动的工作目录为主程序所在目录。目前仅支持 Windows 的 exe 程序或 DLL 库。

    可保护的函数列表:展示了需要保护程序的所有的函数模块,托管代码程序和非托管代码程序有细微的差别。

    试用地址:shell.virbox.com
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3623 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:29 · PVG 18:29 · LAX 03:29 · JFK 06:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.