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

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

  •  
  •   only0jac · 2016-06-24 17:00:43 +08:00 · 8135 次点击
    这是一个创建于 2860 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    如果是其他语言可以考虑自己写个。。。
    mhtt
        11
    mhtt  
       2016-06-24 19:04:34 +08:00 via iPhone
    与其抓破头皮搞这事,不如让一个口才好的商务和他们谈,再要一份代码费,当然如果合同中没有表明代码该属于对方的话,其实代码脱离了商务运作就啥都不是!
    @luili 你们遇到的这种的很恶心,数目这么大,对方没什么背景的话,你们可以直接找个律师,和他们搞合同,搞死对方。
    designer
        12
    designer  
       2016-06-24 19:29:03 +08:00
    各位,工程师。 HTML 简单的加密方案有没有!
    allenx
        13
    allenx  
       2016-06-24 19:30:31 +08:00
    代码混淆吧
    dixyes
        14
    dixyes  
       2016-06-24 20:16:37 +08:00 via Android   ❤️ 3
    卦象做函数名
    奇门做变量名
    你们体会下:
    int 震(){
    int 生=1;
    int 杜=3;
    return 乾(生+杜);
    }
    yjxjn
        15
    yjxjn  
       2016-06-24 20:32:02 +08:00
    讲真,看项目大小,项目大的话,要是百万行的项目,无所谓啊,只要你公司信誉不差,还会找你们的,因为读代码比写代码更难,再就是文档稍微写简略点,基本没几个人有很大耐心看下去的。
    XianZaiZhuCe
        16
    XianZaiZhuCe  
       2016-06-24 20:43:24 +08:00 via iPhone
    不给源码,如何部署?托管在你们这?
    luili
        17
    luili  
       2016-06-24 21:03:45 +08:00
    @mhtt 估计是要么公司不在乎这点钱,要么就是当时招采的人 sb 。。。
    Felldeadbird
        18
    Felldeadbird  
       2016-06-24 21:18:55 +08:00 via iPhone
    说真的加密代码的外包公司也够坑的。做完这笔人家不会再找你做单子的。
    lslqtz
        19
    lslqtz  
       2016-06-24 21:23:49 +08:00
    @dixyes 会玩,哈哈哈哈。。
    qnnnnez
        20
    qnnnnez  
       2016-06-24 22:23:03 +08:00
    owt5008137
        21
    owt5008137  
       2016-06-24 22:30:52 +08:00 via Android
    如果项目小,人家自己再写一遍也无所谓。没啥好保密的,如果项目大,给他们源码不给文档。没有你的技术支持他敢用?修 BUG 或者新需求会搞死他的
    pynix
        22
    pynix  
       2016-06-24 22:59:04 +08:00
    自带代码混淆技能。。。
    qnnnnez
        23
    qnnnnez  
       2016-06-24 23:15:56 +08:00 via Android
    SlipStupig
        24
    SlipStupig  
       2016-06-24 23:24:01 +08:00
    可以采用以下方法去做(不过代价很高)
    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
       2016-06-25 00:32:48 +08:00 via Android
    @Pandara 请教怎么个混淆法?混淆了还怎么编译?


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


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


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

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

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

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

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

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

    如果没有合同的话,当我没说
    jeffery9
        42
    jeffery9  
       2016-06-25 12:49:10 +08:00
    鄙视一下,貌似自己写的代码有多牛逼是的, github 上公开的代码多的是 //、 就是拿掉代码,没有相关的文档,想要掌握还是很有难度的 //除非你的代码本身就没有啥价值。。。 哈哈
    qiaobeier
        43
    qiaobeier  
       2016-06-25 22:14:54 +08:00
    建立良好的合作互利关系->收足预付->完善的合同
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3295 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:58 · PVG 21:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.