V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
only0jac
V2EX  ›  程序员

外包项目如何加密 ##源码?

  •  
  •   only0jac · Jun 24, 2016 · 9029 views
    This topic created in 3596 days ago, the information mentioned may be changed or developed.

    做之前没说要源码,做完后要求要源码,除了”不给“这个方案,有什么办法能加密源码?或者不能直接使用或二次开发,老司机!

    43 replies    2016-06-25 22:14:54 +08:00
    Pandara
        1
    Pandara  
       Jun 24, 2016
    代码混淆咯
    ipconfiger
        2
    ipconfiger  
       Jun 24, 2016
    你应该自信的给老板说, 以我代码的混乱程度, 丢给他们谅他们也看不明白....... 自带代码混淆特技功能随时开启
    annielong
        3
    annielong  
       Jun 24, 2016
    既然是要源码,不给和加密源码的方案一个样,真想增加难度就用代码压缩,
    jugelizi
        4
    jugelizi  
       Jun 24, 2016
    我猜是 php 项目
    plqws
        5
    plqws  
       Jun 24, 2016
    啥外包还不能给源代码…
    qqmishi
        6
    qqmishi  
       Jun 24, 2016 via Android
    变量名改为拼音首字母缩写。
    多用全局变量。
    宏满天飞。

    说实话,你看看重构和代码整洁之道然后反着来就好了。

    要源码就不给他们维护,多简单,给多少钱办多少事,源码维护二选一。

    如果是因为双方前期没沟通好导致了楼主对要求的误解的话,请忽略我上面的回答。
    learnshare
        7
    learnshare  
       Jun 24, 2016   ❤️ 1
    协议中还是要写明白,是不是要源码的。
    luili
        8
    luili  
       Jun 24, 2016
    @plqws 可以的 我司有个项目走的外包 100w 源码混淆 不给开发文档 也就是说 要二次开发必须找他们
    pelloz
        9
    pelloz  
       Jun 24, 2016
    混一堆不会被调用也没什么实际功能的几千上万行的函数和类...然后代码混淆,在没有没有开发文档的情况下谁也看不懂.
    rekulas
        10
    rekulas  
       Jun 24, 2016
    如果是 php 可以用这个 https://study.congcong.us/t/287240

    如果是其他语言可以考虑自己写个。。。
    mhtt
        11
    mhtt  
       Jun 24, 2016 via iPhone
    与其抓破头皮搞这事,不如让一个口才好的商务和他们谈,再要一份代码费,当然如果合同中没有表明代码该属于对方的话,其实代码脱离了商务运作就啥都不是!
    @luili 你们遇到的这种的很恶心,数目这么大,对方没什么背景的话,你们可以直接找个律师,和他们搞合同,搞死对方。
    designer
        12
    designer  
       Jun 24, 2016
    各位,工程师。 HTML 简单的加密方案有没有!
    allenx
        13
    allenx  
       Jun 24, 2016
    代码混淆吧
    dixyes
        14
    dixyes  
       Jun 24, 2016 via Android   ❤️ 3
    卦象做函数名
    奇门做变量名
    你们体会下:
    int 震(){
    int 生=1;
    int 杜=3;
    return 乾(生+杜);
    }
    yjxjn
        15
    yjxjn  
       Jun 24, 2016
    讲真,看项目大小,项目大的话,要是百万行的项目,无所谓啊,只要你公司信誉不差,还会找你们的,因为读代码比写代码更难,再就是文档稍微写简略点,基本没几个人有很大耐心看下去的。
    XianZaiZhuCe
        16
    XianZaiZhuCe  
       Jun 24, 2016 via iPhone
    不给源码,如何部署?托管在你们这?
    luili
        17
    luili  
       Jun 24, 2016
    @mhtt 估计是要么公司不在乎这点钱,要么就是当时招采的人 sb 。。。
    Felldeadbird
        18
    Felldeadbird  
       Jun 24, 2016 via iPhone
    说真的加密代码的外包公司也够坑的。做完这笔人家不会再找你做单子的。
    lslqtz
        19
    lslqtz  
       Jun 24, 2016
    @dixyes 会玩,哈哈哈哈。。
    qnnnnez
        20
    qnnnnez  
       Jun 24, 2016
    owt5008137
        21
    owt5008137  
       Jun 24, 2016 via Android
    如果项目小,人家自己再写一遍也无所谓。没啥好保密的,如果项目大,给他们源码不给文档。没有你的技术支持他敢用?修 BUG 或者新需求会搞死他的
    pynix
        22
    pynix  
       Jun 24, 2016
    自带代码混淆技能。。。
    qnnnnez
        23
    qnnnnez  
       Jun 24, 2016 via Android
    SlipStupig
        24
    SlipStupig  
       Jun 24, 2016
    可以采用以下方法去做(不过代价很高)
    1.代码乱序:函数中间可以采用反复回调方式执行,函数名全部随机命名
    2.代码膨胀:将条件判断语句进行膨胀,比如 if a == 3 ,变成 if a == 1 : pass elseif a a -2 : a -= 0 elseif a ==3: do, 重载操作符号,将类拆分成多个类,各种集成,对类成员调用只能进行回调,代码中随机嵌入各种无意义指令和变量
    3.压缩和加密:先将代码编码转换为 UTF16 、 UTF7 或者用 url 编码,反正任意一种编码方式将代码块进行 AES 随机加密(需要自己定义解密函数),然后把代码用变异压缩算法去压缩(解压函数需要自己写)

    如果这么做生产的代码解密都要解半天,各种垃圾代码严重影响效率,最重要的是外包不都是签了协议的么,你这么做不违约?
    only0jac
        25
    only0jac  
    OP
       Jun 25, 2016 via Android
    @Pandara 请教怎么个混淆法?混淆了还怎么编译?


    @annielong 代码压缩, ide 一格式化岂不是一点用没有


    @jugelizi .net
    @luili 很纳闷源码混淆了还能编译通过么


    @XianZaiZhuCe 编译型
    @Felldeadbird 主要是前期没说要代码,我们也没打算给代码
    @SlipStupig 没说给代码,不违约的,谢谢,加密后是不是不能运行了?
    typcn
        26
    typcn  
       Jun 25, 2016
    @only0jac .net 的话,很简单,你下载一个混淆加密,代码保护工具,把你的二进制保护,比如 SA
    然后,你再下载一个反编译工具,把这代码反编译回来
    techme
        27
    techme  
       Jun 25, 2016
    写个独立的加密器,把项目用到的配置文件加密起来
    zzzvvvxxxd
        28
    zzzvvvxxxd  
       Jun 25, 2016
    那么,一汽大众可以买一辆法拉利,要求再来一份引擎和车身的设计图纸吗?
    如果要,这可比产品和产品后期维护贵多了哦~

    要钱
    不要加密
    ADMlN
        29
    ADMlN  
       Jun 25, 2016 via Android
    咱向来只用机器码写程序,你用十六进制编辑器打开可执行文件即可获得源码。
    msg7086
        30
    msg7086  
       Jun 25, 2016
    @zzzvvvxxxd 如果一汽大众向法拉利外包设计了一辆车,那么

    是的,必须提供引擎和车身的设计图纸。

    这是看你到底是购买的产品(Buy)还是外包的产品(Outsource)。

    比如我要买一个 Windows ,那是$149.99 ,但是我要把操作系统的制造外包给一个公司,那可能就是$49,000,000.99 了。前者你有使用权,后者你有著作权。这是两回事。
    df4VW
        31
    df4VW  
       Jun 25, 2016
    外包项目还有不给源码的?
    zetaoouyang
        32
    zetaoouyang  
       Jun 25, 2016
    最好的建议:要源码,什么价位, 不要源码是什么价位,把条件谈清楚,写在合同中
    SlipStupig
        33
    SlipStupig  
       Jun 25, 2016
    @only0jac 如果是.net 这种编译型,需要在编译过程中间做个解密就行,如果有条件自己可以做 LLVM IR 环节进行混淆
    xuwenmang
        34
    xuwenmang  
       Jun 25, 2016
    定制软件还有不给源码的?
    zaishanfeng
        35
    zaishanfeng  
       Jun 25, 2016 via Android
    这样做, 找几种不同的混淆方法, 每种方法混淆一部分代码, 这样就算他们破解了一种还有另一种 哈哈
    gccdchen
        36
    gccdchen  
       Jun 25, 2016
    @pynix 我的技能还是被动的..
    Felldeadbird
        37
    Felldeadbird  
       Jun 25, 2016
    在回复一次,如果要加密的话,就自己保留一份源码。然后把程序中的变量,函数等全部混淆。除了这部之外,接着就去实行加密。
    例如 PHP 则进行扩展加密。 这样基本可以限制死大部分了。。
    最后不论如何,我觉得做外包如果靠加密来维持 售后的话,做得不长久。。。
    only0jac
        38
    only0jac  
    OP
       Jun 25, 2016 via Android
    @zaishanfeng 混淆后还能直接运行么
    raincious
        39
    raincious  
       Jun 25, 2016
    @Felldeadbird

    为什么要加密?其实核心业务可以写成 C 扩展,然后交付扩展就行了,这样还能提升运行速度。
    EPr2hh6LADQWqRVH
        40
    EPr2hh6LADQWqRVH  
       Jun 25, 2016
    敝帚自珍
    kidult
        41
    kidult  
       Jun 25, 2016
    合同去哪了

    如果没有合同的话,当我没说
    jeffery9
        42
    jeffery9  
       Jun 25, 2016
    鄙视一下,貌似自己写的代码有多牛逼是的, github 上公开的代码多的是 //、 就是拿掉代码,没有相关的文档,想要掌握还是很有难度的 //除非你的代码本身就没有啥价值。。。 哈哈
    qiaobeier
        43
    qiaobeier  
       Jun 25, 2016
    建立良好的合作互利关系->收足预付->完善的合同
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5099 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 121ms · UTC 05:47 · PVG 13:47 · LAX 22:47 · JFK 01:47
    ♥ Do have faith in what you're doing.