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

2016-06-24 17:00:43 +08:00
 only0jac

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

8420 次点击
所在节点    程序员
43 条回复
owt5008137
2016-06-24 22:30:52 +08:00
如果项目小,人家自己再写一遍也无所谓。没啥好保密的,如果项目大,给他们源码不给文档。没有你的技术支持他敢用?修 BUG 或者新需求会搞死他的
pynix
2016-06-24 22:59:04 +08:00
自带代码混淆技能。。。
qnnnnez
2016-06-24 23:15:56 +08:00
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
2016-06-25 00:32:48 +08:00
@Pandara 请教怎么个混淆法?混淆了还怎么编译?


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


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


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

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

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

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/288083

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX