外包项目如何加密 ##源码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
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     Solana     5992 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 35ms UTC 01:54 PVG 09:54 LAX 18:54 JFK 21:54
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86