V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
paranoiagu
V2EX  ›  Java

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

  •  
  •   paranoiagu · Jan 10, 2017 · 13596 views
    This topic created in 3394 days ago, the information mentioned may be changed or developed.
    客户要求提供源代码,实在没办法了,能不能混淆源代码,编译不影响,运行不影响,但是就是美观方面差点。

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

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

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

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

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


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

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

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

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

    试用地址:shell.virbox.com
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3007 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 15:13 · PVG 23:13 · LAX 08:13 · JFK 11:13
    ♥ Do have faith in what you're doing.