搜索
bottom↓
回复: 89

有时碰到不想给但又不得不给源代码的情况,如何加密源代码

[复制链接]

出0入0汤圆

发表于 2009-3-21 23:07:17 | 显示全部楼层 |阅读模式
有时碰到一些情况,不想给但又不得不给源代码,如何加密源代码

我曾经看到有人发过一个软件,可以对整个目录的文件进行操作,删除所有注释,好像还可以把变量的名字换成没有意义的符号,可惜没存下来

大伙有啥招?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-3-21 23:13:21 | 显示全部楼层
建立LIB文件.

出0入0汤圆

发表于 2009-3-21 23:17:44 | 显示全部楼层
我的做法~核心支持库BSP做成Lib方式来调用
对方只能获得业务层代码和系统大部分驱动代码

出0入0汤圆

发表于 2009-3-21 23:18:18 | 显示全部楼层
给了源代码又加密,那和不给什么区别?
既然对方要源代码,你们事先应该商量好的
给个LIB文件的话不算源码吧

出0入0汤圆

发表于 2009-3-21 23:23:23 | 显示全部楼层
如果是我的话,把代码整理好,好让客户好好欣赏。同时可以体现自己是否写出可读性好的代码。常数用define,状态变量用enum,设置数据用struct.等等。当然如果是经过长时间付出才能得到的算法应该用LIB,如稳定的PID算法,滚动码算法等等。

出0入0汤圆

发表于 2009-3-22 00:00:04 | 显示全部楼层
这估计算是诚信问题了,无语啊!

出0入0汤圆

发表于 2009-3-22 00:28:22 | 显示全部楼层
我也想问这个问题,针对avr单片机,比如项目中,射频驱动部分代码由我们写,为了保密怎么提供代码给客户?ICC好像可以用 .LIB,GCC可以吗?就算提供 .LIB 文件,也还是牵涉到加密问题。

出0入0汤圆

发表于 2009-3-22 00:45:39 | 显示全部楼层
合同或协议规定要给源代码的话,不应该加密

出0入0汤圆

发表于 2009-3-22 00:48:08 | 显示全部楼层
GCC当然可以。

绝大部分代码公开,少部分代码做成库,TI的Zigbee协议栈就是这么做的。

可以到TI网站免费下载Zigbee协议栈源码,这个源码大部分(估计大概%90以上)都是可以直接看到源代码,
但是还有少部分是库文件(估计不到%10),看不到代码。

出0入663汤圆

发表于 2009-3-22 01:01:12 | 显示全部楼层
人家要求给源代码,应该是希望有自己编译目标文件的能力,这样是没可能加密的,就算只给hex,人家一样可以反汇编。单片机那一百几十K的ROM,汇编也不会很难读的。只有烧到片上锁上熔丝位再给客户,才能保一时平安。人家要是真想破你,花点钱还是能搞的。

这世界上不存在不能不给的情况吧,除非客户拿枪指着你。谈的时候人家要求给,你不想给可以说我不做。谈定了又不想给,太不厚道了吧。所以,既然合同要求给,就把源代码写得漂漂亮亮给人家吧,至少让人家看到你有这能力,以后有新case可能还会合作的。

出0入162汤圆

发表于 2009-3-22 12:03:56 | 显示全部楼层
同意楼上的观点

如果项目合同上说要给源代码,你就给他源代码吧。
加密、删除注释,这叫那回事啊,好像缺乏诚信哦。

委托方拿了你完整的源代码,很多时候是为了安全。
想想,如果他手里没有源代码,那天你要有个意外,他的产品算黄了(没办法改进了)。
即便他手里有源代码,以后的改进一般还是会找你的,他自己找人看懂源代码还不如找你呢。
即便以后人家不找你了也没关系,源代码产权是他的。


现在的代码一般都不是啥高新技术、国防机密吧。

我们开发产品自己原创的算法有多少??还不是借用其他人的经验、代码进行组合,工作量就在如何组合、调试排错。
别高看了自己的源代码,这又算啥呢?

想起10几年前念大学,图书馆情报室里计算机杂志有用的文章经常被撕掉。这些文章讲的就是一些技巧,其实一看就会,也不用撕下来。为啥要撕呢,这帮人就想自己知道这些技巧防止别人知道。多么狭隘啊!


既然合同规定了交源代码,那么就痛快些吧。
把源码整理的清清楚楚,补足注释让接受的人能够看懂,这是职业道德。这样做会让你在业界有个好口碑,找你干活的人也会很多的。

一句话:别高看了自己的源代码

如果是我即使合同没规定,我也给源代码。
他自己看懂能改最好,省得小问题以后还要我维护

出0入0汤圆

发表于 2009-3-22 12:50:30 | 显示全部楼层
这是一个不可调和的矛盾

出0入0汤圆

发表于 2009-3-22 12:58:41 | 显示全部楼层
忽略了一个问题:应不应该给?

提供一把菜刀,拿来干什么自己掂量:GOOGLE一下  javascript 混淆器,我想应该有支持C的。
头像被屏蔽

出0入0汤圆

发表于 2009-3-22 13:55:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入22汤圆

发表于 2009-3-22 14:13:08 | 显示全部楼层
楼上正解,通常为客户开发都只有两种状态,要么完不给,要么全部给,这个在事前都是谈好的。

出0入50汤圆

发表于 2009-3-22 15:07:05 | 显示全部楼层
呵呵,可以把独创性的关键部分打包成Lib。

我有个很铁的死党最近就碰上这种麻烦事儿,以前给人开发的一款产品,人家现在卖得好了,许诺的提成倒是一分没给,却要源程序了,我那个死党又是个很老实的人,差点就上当了,好在当初没有做协议约定,而那个老板说话中的语气也颇有【10楼】 AWEN2000的:一句话:别高看了自己的源代码 ,再加上我也给另外一个客户做类似的产品,卖得比他还火,那老板知道我们的关系,言语中还怀疑我朋友是否从中搞什么猫腻,把我朋友彻底惹毛了,现在全部断了关系。

不要太小看自己的程序,通用产品是不怎么样,但是小行业里,就不一样了,你有自己的特长,还是需要自我保护的。

出0入296汤圆

发表于 2009-3-22 15:27:05 | 显示全部楼层
写成火星文好了……哈哈哈哈~
我最新设计的代码构架(还未公布),可以做到让阅读者在缺乏文档的情况下基本一头雾水……
当然,未来你自己读这个程序的时候,可能也是一头雾水……
头像被屏蔽

出0入0汤圆

发表于 2009-3-22 15:33:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-3-22 15:34:30 | 显示全部楼层
注释也不用删除,要不以后自己改也费劲,建议写成二进制格式,比如。

db 0x22  //关闭看门狗
db 0x33
db 0x44 //开中断
db 0x55

出0入0汤圆

发表于 2009-3-22 15:48:25 | 显示全部楼层
不如多用点像0O1l这样组合,不让人崩溃是不行的了。

出0入0汤圆

发表于 2009-3-22 16:05:51 | 显示全部楼层
写代码就是要清晰。

自己看的方便,别人也看的方便。

个人喜欢用库。
给源代码可以分成实际工程和库工程。

另外,源程序按不同功能分成多个程序,每个源程序都加一个头文件,另外,有必要把源程序放在不同的目录。

这样做,程序结构清晰,功能模块容易删减,自己维护起来也方便。

出0入0汤圆

发表于 2009-3-22 16:11:13 | 显示全部楼层
我来提个办法:
    如果是51系列CPU,把BIN(或HEX)文件反汇编,然后把反汇编得到的汇编文件给对方,反正他可以再次汇编,得到HEX,也能在其基础上改进.只要合同上未规定是C代码还是ASM的情况下,这不算违反合同吧?

出0入162汤圆

发表于 2009-3-22 16:19:06 | 显示全部楼层
问题是开发合同时你答应给源码的

要是看重自己的代码,签合同时就说清楚:不给源码 给全部源码 给部分源码。


开发产品还是一口价比较好,谈提成很麻烦的。
不是老板不舒服就是开发者不舒服,还是一口价好。
要是我是老板,找人做项目。他可以开高价开发费这可以理解。要是对方要求以后的产品提成,我谈都不会和他谈。
大部分产品是否能赚钱,技术所占的比例不大的,关键是市场、资金、关系。。。。

老板进行市场调研发现某个产品比较好,提出技术需求交给技术人员开发。
开发者忙活一阵就万事大吉了,老板还在煎熬呢。是赚大钱还是赔个底朝天,这些都要老板费心思操作的。
开发者不承担大的风险而事后要分利益,基本上老板是不会舒服的。绝大多数技术不是不可重复实现的。等赚了钱,老板一定会想办法踢开开发者的,解密也好重新开发也好。
即便提成很低,老板一般也会另想办法的。因为提成方式等于掐着他的脖子,那天开发者心态不平衡了或者出点意外,老板就麻烦了。
所以提成方式基本上是拿不长的。当然如果你的技术有站的住的专利或者技术非常难别人很难做出来就另当别论了。

如果老板要求以提成方式支付开发费基本是在忽悠。


不要把自己的源代码太当回事,不是说随意把自己的源代码散布,只是按合同要求交给项目委托方。项目委托方是不会随意散布源代码的,因为是他花钱买的。
既然答应了给源代码,那么自己心里已经给源代码出价了,价格合适为啥不卖?

出0入0汤圆

发表于 2009-3-22 17:50:09 | 显示全部楼层
去掉注释,我以前上传了一个。
一般来讲上百K的东东去掉注释有没有相关文档很难上手的

必要的时候把函数名,宏,结构什么的批量改成无意的的名字。

最后把宏给去掉。

代码书写方式再混沌化。

这样就很难看懂的。

一般是去掉注释就可以了。

阿莫说的对,签合同的时候讲好怎么就怎么。我一般会说去掉注释。

出0入0汤圆

发表于 2009-3-22 17:52:19 | 显示全部楼层
不知全部使用DB定义算不算源码?^_^,那就全部DB定义吧,等效于二进制。

出0入162汤圆

发表于 2009-3-22 18:10:04 | 显示全部楼层
to 23楼

去掉注释算啥源代码,等于没给。这么说给人感觉不好,干脆说部分代码是库形式给,主程序及其他连接代码给源代码

如果说要给源代码就给全的,如果不想给那就别给或者声明部分代码以库形式给。

电子这个圈子很小的,树立个好口碑很重要。
既然合同里说的多少金额给源代码,你还弄点小九九就不对了。
原则应当是:给源代码可以,对方要出得起价钱。如果出得起价钱,可以给完整注释的源代码。
如果对方满足我的要求,我还小九九,是不是不够诚信啊。以后还咋在这个圈子混。毕竟现在做电子的人太多了,水平好的人不再少数。
缺了我们地球照样转的。

出0入0汤圆

发表于 2009-3-22 19:59:17 | 显示全部楼层
提供代码,是为了提供一种更好合作的方式。比如两部分分开做需要两个MCU,但是如果做底层一方能够提供驱动代码,那么也许用一片MCU就可以了,这也是一种节约成本的方式。当然提供代码的一方有必要对自己的代码进行保护,所以才有LZ这个问题。我想LZ的本意也是这样的。如果是合同要求给出代码的,我相信做技术的人应该不会有那么多狭隘的心眼,不然真不合适做技术。以前给别人做目,都是先提供HEX,只要钱清了后,代码绝对豪无保留的提供。

   目前我们使用周立功的模块,他们的底层驱动代码都是完整的提供给我们的,他们不怕代码泄漏,当然这也只是有一定的实力后,才有的气魄。

出0入0汤圆

 楼主| 发表于 2009-3-22 20:02:35 | 显示全部楼层
看来这个帖子还挺吸引人的啊,这种情况当老板的最痛恨了,哈哈

要看清楚了,是“有时候”  关键是防小人,如何对付各种情况,从大伙的回复可以看出大家心中自有杆称

1.删除注释 2.宏定义取消 3.函数变量名改用无意义的字母 ,用库也是一种某些时候的变通方案

出0入0汤圆

 楼主| 发表于 2009-3-22 20:07:48 | 显示全部楼层
找了几把12楼的说的菜刀,相当的强大啊,拉出来给大伙溜溜

***************************************
Javascript流程混淆器JSCFO介绍

实现功能如下:
1、可同时对多个文件进行操作。
2、格式化代码。
3、合并文件。
4、变量名混淆(选择变量名混淆后会随机在if、for、while、dowhile中插入混淆用的判断)。
5、流程混淆。可选择打乱流程时进行分块的行数。(由于Javascript中没有goto,所以打乱代码后用for或while配合if或switch保证代码执行顺序。for或while和if或switch的配合有一定随机性,较难被找到规律。此功能会造成代码增大,不过没有办法)
6、字符串混淆。(目前方法较简单,后期考虑用压缩替代混淆)
7、数字混淆。(用数学表达式替代常数)
8、压缩。(简单的方法,Pack2的那种)
9、格式化和混淆时自动修正结尾没有加分号的情况。
10、修改正则表达式的写法,避免所有代码在同一行时发生错误。

出0入0汤圆

 楼主| 发表于 2009-3-22 20:11:06 | 显示全部楼层
http://hi.baidu.com/jeftom/blog/item/cabaca13aabd7624dd540198.html

淆前的代码:
PS:
之前版本有用Themida加壳,发现很多朋友用ESET,故不用Themida,已更新。请想试用的朋友放心,绝无病毒。
至于有人说我不放源码的问题,这个似乎没有规定吧。我这个还只是给大家试用,并没有说要收钱干啥的。所以对源码有意见的请自己保留吧
准备开始新版本的工作,旧版本暂停下载。

var x = 0;
var z = false;

function Test()
{
    for(var i=0; i<x; i++)
     {
        if(z)
         {
            var s = "Today's date is: ";
            
            var d = new Date();
             s += (d.getMonth() + 1) + "/";            //Get month
             s += d.getDate() + "/";                   //Get day
             s += d.getYear();

             alert(i+ ":" + s);
         }
     }
}

x = 10;
z = true;
Test();
混淆后的代码(未压缩):

var $_A, x, z, $_E;
function Test()
{
    for(var i = ((0x36 * 0x0) + 0x0); i < x; i++)
     {
        if(z)
         {
            var s, d, $_D;

             $_D = 0;
            for(var $_D = 5; $_D >= 0; $_D--)
             {
                if($_D == ((0x22 * 0x3) - 0x66))
                 {
                     alert((i + $_A("%3B")) + s);
                 }
                if($_D == ((0x4f * 0x3) - 0xec))
                 {
                     s += d.getYear();
                 }
                if($_D == ((0x3 * 0x3) - 0x4))
                 {
                     s = $_A("e%C3%D3%C5%DA%A0%9A%93%84%C5%D5%D9%85%89%DC%ADZ");
                 }
                if($_D == ((0x42 * 0x7) - 0x1cc))
                 {
                     s += (d.getDate() + $_A("0"));
                 }
                if($_D == ((0x26 * 0x2) - 0x49))
                 {
                     s += ((d.getMonth() + ((0x8 * 0x2) - 0xf)) + $_A("0"));
                 }
                if($_D == ((0x1d * 0x7) - 0xc7))
                 {
                     d = new Date();
                 }
             }
         }
     }
}
$_A = function ($_B)
{
    var $_C;
     $_B = unescape($_B);
     $_C = String.fromCharCode($_B.charCodeAt(0) - $_B.length);
    for(var i = 1; i < $_B.length; i++)
     {
         $_C += String.fromCharCode($_B.charCodeAt(i) - $_C.charCodeAt(i - 1));
     }
    return $_C;
};

$_E = 5;
while($_E > 0)
{
     $_E--;
    if($_E == ((0x3a * 0x7) - 0x193))
     {
         z = false;
     }
    if($_E == ((0x30 * 0x0) + 0x1))
     {
         z = true;
     }
    if($_E == ((0x0 * 0x2) + 0x0))
     {
         Test();
     }
    if($_E == ((0x1e * 0x3) - 0x56))
     {
         x = ((0x27 * 0x5) - 0xc3);
     }
    if($_E == ((0x26 * 0x2) - 0x4a))
     {
         x = ((0x55 * 0x1) - 0x4b);
     }
}

目前的流程混淆利用while或for配合if或switch控制打乱后代码的正常执行顺序,希望有朋友能提出更好的建议。字符串的加密也让人感到头疼。
混淆后的代码较原有代码增大不少,主要原因是针对每一行代码都进行了打乱并且没有进行压缩处理。进行压缩处理之后,还是可以接受的。

后期目标如下:
1、支持包含<Script language="javascript"></script>标记的文件。(暂定为此标记)
2、用压缩算法替代现在那个简单的字符串混淆方法。
3、尝试寻找新的流程混淆方法。
4、考虑是否加入函数名混淆。(个人目前认为函数名混淆的意义不大)
5、加入混淆排除选项。
6、考察是否有更高效的压缩算法,以替代Pack2目前的方法。

******************

混淆后的代码较原有代码增大不少,这个在单片机来说有时候很难接受啊

出0入0汤圆

 楼主| 发表于 2009-3-22 20:19:29 | 显示全部楼层
Javascript代码混淆综合解决方案-Javascript在线混淆器(2006-10-29 11:26:36)   分类:Java教程
http://blog.sina.com.cn/s/blog_493cbd30010007or.html
  
文章来源:javascriptOnlineObfuscator">http://www.BizStruct.cn/JavascriptOnlineObfuscator


Javascript 代码混淆的目的

Javascript 是一种解释执行的脚本语言,主要应用于 Web 领域的客户端的浏览器中;由于 Javascript 解释执行的特性,代码必须明文下载到客户端,并且可以很容易的进行调试,使得 Javascript 代码的保护非常困难;

不同的人对 Javascript 代码的保护有不同的看法;有的人辛苦努力的代码,却可以被竞争对手轻易获得,他们就非常希望能有保护 Javascript 代码的方案,但现有的方案可能无法满足他们的要求;很多人认为 Javascript 语言很简单,Javascript 代码没有保护的价值,可能是他们的代码确实简单,或者他们并不了解 Javascript 语言强大的功能;还有的人认为现在都开源了,还保护代码干什么,当然开源的人是值得敬佩的,但对别人的代码的开源要求,却不是合理的。

为了提高用户的体验,出现了 Web 2.0 技术,并随着 AJAX 和富界面技术的发展,Javascript 在 Web 应用上的重要性越来越高,Javascript 代码的复杂性、功能和技术含量也越来越高,对Javascript 代码保护的需要也越来越迫切。

Javascript 在线混淆器的目的是为 Javascript 代码保护的需求,提供一种全新的综合解决方案,包括编码规则和免费的在线混淆器。



混淆和加密的区别

很多人将这两者混在一起讨论,实际上两者的目的有一定的区别,采取的手段也有很大的不同。加密主要是为了防止未经授权的使用,对这种情况即使破解了加密,也只能非法使用,并不一定能获得软件的代码逻辑;但对于脚本来说,防止对代码进行访问的措施,也属于加密,对这种情况,破解了加密,就获得了代码;而混淆是在无法阻止他人获取代码的情况下,采取的保护代码的逻辑不被他人理解的措施;对于混淆的代码,他人很难理解,无法进行修改和重新应用;
对于生成机器码的语言,比如 C 语言,只需要考虑未经授权的访问,几乎不需考虑代码的保护;因为对编译后的软件,只能反汇编为汇编语言代码,几乎无法分析出代码的逻辑。
对于生成中间代码的语言,比如 Java 和 C#,即需要考虑未经授权的访问,又需考虑代码的保护;;因为对编译后的软件,可以很容易的反编译为较高级的语言,从而了解到代码中的逻辑,并较容易的破解加密。而混淆后,即难于理解代码的逻辑,也不易找到加密点所在。
对于脚本语言,比如 Javascript,只能混淆,难以加密;因为脚本都是明文存在的,很容易调试的,通过跟踪可以较容易的破解上面两种目的的加密。但是混淆后的代码是难于理解代码的逻辑的。

我们只涉及到对 Javascript 脚本进行混淆,而不涉及加密;对于涉及到 Javascript 的系统的加密,我们建议不要将加密点放在 Javascript 脚本内,而是放在服务端的编译程序内,因为编译程序的加密可以采用更多的保护方式,加密的强度也更高。

我们首先要分析 Javascript 语言和混淆相关的特点,和现有的混淆产品的不足,然后再提出我们对 Javascript 代码混淆的解决方案,最后是我们的 Javascript 在线混淆器。


Javascript 语言和混淆相关的特性

Javascript 是一种解释执行的脚本语言,相对编译类型的语言有很多自身的特性,而其中一些特性会对代码混淆带来很大的困难。

无法定义类的属性和方法的名称是否需要被混淆

Javascript 是一种基于原型的语言,没有严格的类型定义。在自定义的类中,对于需要外部访问的属性和方法,不能进行混淆;对于内部访问的属性和方法,需要进行混淆;但Javascript 语言本身,无法对属性和方法进行这样的区分。为此我们要寻找一种变通的机制来识别属性和方法的名称是否需要混淆。

存在大量的系统定义的核心的和客户端的方法和属性不能被混淆

Javascript 语言本身定义了大量的核心的类、方法和属性;浏览器中也定义了大量的客户端的类、方法和属性;这些类、方法和属性都不能够被混淆,然而这些类、方法和属性的数量太大,无法通过枚举来避免混淆;为此我们需要寻找一种方法来标识这些类、属性和方法。

无法定义全局变量是否需要被混淆

全局变量是 window 对象的属性,局部变量是函数对象的属性;所有的局部变量都是可以和应该被混淆的,而全局变量有的需要混淆,有的不能混淆;但全局变量和局部变量的表现形式是一样的,难以区分;而且全局变量本身更无法定义是否需要被混淆。为此我们要找到一种方法来区分不能混淆的全局变量,和需要混淆的全局变量及局部变量。

Javascript 语言的这些特点,都对代码的混淆带来了很大的困难,如果不解决这几个问题,Javascript 代码的混淆就缺少实用的价值。



现有 Javascript 混淆产品的问题

当我们需要混淆 Javascipt 代码的时候,首先考察了市面上现有的产品,和一些论坛里对混淆的思路,但这些产品和思路都不能满足我们的要求。

有一个商品化的 Javascript 混淆产品,采用了和一种 C# 混淆工具相似的混淆方式,分析了代码里所有的标识符,对一些系统预设的标识符不混淆,对其他的进行混淆,同时提供用户对标识符的混淆进行选择和配置;这个产品的功能很多很复杂,但有一个很大的问题,就是预设的标识符有限,对于代码中用到的大量的系统定义的属性和方法,会进行混淆,为此需要自己手工配置,避免对这些属性和方法的混淆,这对于大型的系统几乎是一个不可能完成的任务。

有一些论坛里也讨论到混淆的思路,包括一些示例,这些思路更多的是改变标识符的表现形式,有的是用编码字符串的关联数组替换属性,比如将 xx.dd 替换为 xx["\x64\x64"];更复杂的是把 "\x64\x64" 之类保存到字符串数组,然后调用字符串数组作为关联数组的下标;这种思路可以避免上面的问题,但有一个更大的问题,就是混淆是可逆的,被混淆的标识符仅仅是被转换成了16进制的形式,可以很容易的恢复。

正是现有产品的不足,促使我们不得不研究自己的解决方案。我们的解决方案也是经过了几个版本,一开始的版本要复杂的多,花费了很大的工作量,但结果并不理想;几经修改才找到现有的解决方案;虽然开始的大量工作,最后几乎都废弃了,但没有前面的工作,也就没有后面的结果;所以即使您可能会认为我们的方案简单,那也只是我们努力的结果,而不是过程;而且简单的东西,往往是有效的。


Javascript 代码混淆综合解决方案

通过前面对 Javascript 的特性和相关混淆产品的分析,使我们认识到如果仅仅是在混淆器上下功夫是不够的;因为 Javascript 语言本身对混淆的功能有很大的限制,无法解决。为此我们设计了一个综合的解决方案,就是 Javascript 在线混淆器规则,只要是按照规则编写的 Javascipt 代码,都能使用 Javascript 在线混淆器混淆进行混淆。

Javascript 在线混淆器的规则并不复杂,但能够解决 Javascript 语言本身的特性和其他混淆产品遇到的问题。

规则一、所有用 window 约束的类、变量和函数都不混淆,其他的类、变量和函数都混淆。

全局的类、变量和函数本身都是 window 的属性,用不用 window 约束,从逻辑的角度是一样的。但我们可以借用 window 的约束来区分对全局的类、变量和函数是否需要进行混淆。

用 window 的约束必须是前后一致的,不但包括类、变量和函数的定义,也包括类、变量和函数的调用。

局部的类、变量和函数,因为没有 window 约束,所以都是混淆的。


类型 混淆 不混淆
类定义 function Class1(){...} window.Class1 = function(){...}
函数定义 function Method1(){...} window.Method1 = function(){...}
变量定义 var Param1 = 1; window.Param1 = 1;
生成类的实例 var object1 = new Class1(); var object1 = new window.Class1();
函数调用 Method1(); window.Method1()
变量引用 var newParam = Param1; var newParam = window.Param1;

规则二、所有以小写字符开头的属性和方法都不混淆,以其他字母开头的属性和方法都混淆,用 window 约束的属性和方法应用规则一。

JavaScript 核心和客户端中有大量的系统定义的方法和属性不能被混淆,而这些方法和属性绝大多数都是以小写字母开始的,本规则保证了系统定义的方法和属性不被混淆。在 Javascript 客户端中仅有极少数的系统定义的以大写字符起始的方法和属性,对于这种情况,可以采用关联数组的方式避免被混淆,比如 object1["Method1"]();此方法也适用于第三方控件中可能会有的以大写字符起始的方法和属性的情况。

此规则也使我们可以在自定义的类中标识方法和属性是否被混淆,对于需要外部调用不能混淆的方法和属性,采用小写字母起始,对于内部的方法和属性,采用其他字母起始。


类型 混淆 不混淆
类方法定义 Class1.Method1 = function(){...} Class1.method1 = function(){...}
Class1["Method1"] = function(){...}
对象方法定义 Class1.prototype.Method1 = function(){...} Class1.prototype.method1 = function(){...}
Class1.prototype["Method1"] = function(){...}
类属性定义 Class1.Prop1 = 1; Class1.prop1 = 1;
Class1["Prop1"] = 1;
对象属性定义 object1.Prop1 = 1; object1.prop1 = 1;
object1["Prop1"] = 1;
类方法调用 Class1.Method1(); Class1.method1 ();
Class1["Method1"]();
对象方法调用 object1.Method1(); object1.method1 ();
object1["Method1"]();

Javascript 在线混淆器的核心规则就是以上两点,另外还有几点说明。

标识符的混淆采用 Hash 算法,不可逆

Hash 算法是不可逆的,所以不能根据混淆后的标识符,来直接推出混淆前的标识符;但 Hash 算法依赖于 .Net 系统的实现,大多数的时候,.Net 的 Hash 算法是不变的,就是同一个标识符的混淆结果是一样的;如果能够枚举足够多的标识符,仍然可能根据相同的混淆结果,知道混淆前的标识符。

如何调用混淆后的类、方法和属性

对于混淆代码的内部调用,只要采用相同的规则,要么都混淆,要么都不混淆,就能正确的调用。

对于混淆代码的外部调用,可以有两种方式,一种是不混淆,代码内部采用不混淆的规则,外部采用不混淆的可理解的标识符调用;另一种是混淆,代码内部采用混淆的规则,外部也采用混淆后的不可理解的标识符调用,但此方式依赖于 .Net Hash 算法的实现,在不同版本的 .Net 实现中的 Hash 算法有可能不同,以至混淆后的标识符不一致,从而导致重新混淆后,需要替换原来混淆的标识符。

为何有“清除空格,保留分号后的回车”的选项

Javascript 语法要求全局函数的结尾必须有分号或回车,如果遗漏了分号,而又清除了所有的回车,总是提示第一行缺少分号,无法定位错误所在;采用本选项可以有助于寻找缺少的分号的位置。

以下 Javascript 语言的保留字不混淆

break, case, catch, continue, debugger, default, delete, do, else, false, finally, for, function, if, in, instanceof, new, null, return, switch, this, throw, true, try, typeof, var, while, with

混淆器预定义了一些 window 的属性和方法

Javascript 核心类和函数是不能被混淆的,他们实质上都是 window 的属性和方法,按照规则应该用 window 约束,以避免被混淆;但对于 Object、Array、Date、ActiveXObject 等核心类,混淆器已经预定义不会混淆,不需要再用 window 约束。对于 alert 等 window 常用的方法和 document 等 window 常用的客户端属性,也有预定义。其他需要预定义的类和方法,我们会逐步添加;没有预定义的全局类和函数,如果不能混淆,必须用 window 约束。

以下全局的类、变量和方法不混淆

ActiveXObject, alert, Array, Boolean, Date , document, Math, Number, Object, RegExp, String, windowJavascript

在线混淆器,请访问 http://www.BizStruct.cn/JavascriptOnlineObfuscator/JavascriptOnlineObfuscator.aspx

***************************************

这个已经上升到理论层面了,成为一门学问了

出0入162汤圆

发表于 2009-3-22 20:31:02 | 显示全部楼层
关键部分给个库其他部分注释消息,别人也没法说啥。

你要真想小九九,也不用改变量名。

把注释写清楚,但是注释是错的误导性的。书写格式乱写,他慢慢看吧

出0入0汤圆

发表于 2009-3-23 02:31:56 | 显示全部楼层
to 25 楼。

呵呵,看怎么理解。

我写得一般很规范,一般都用匈牙利命名法,自己加注释的都很少。

接口通信注释这个是不能省的。

库能和源代码比吗,这肯定是没得比的。

我刚开始就说了,你同意就同意,不同意那就再谈,谈不上欺骗。

出0入0汤圆

发表于 2009-3-23 08:56:24 | 显示全部楼层
同意9楼10楼的看法,给了别人有问题的代码(只能编译、看不懂或者很难看懂,要源码干啥?)那不是毁了自己的一世英名嘛,以后还有合作机会?

出0入0汤圆

发表于 2009-3-23 09:22:19 | 显示全部楼层
我同意正常顺利的整理完整,可读性高的源代码交给合作方。完全同意10楼的说法。非常反对13楼的做法,主要是反对威胁性的做法,你要让人家信任服帖的交给你,首先应该做得大方,理解,然后再调和,而不是威胁。要是我,我不会和这样的人合作!!,总想着自己得不到,就要搞死人家,真正的大型企业家不会这么做的,你想搞死人家,到头来会引起敌意的人搞死你!

出0入0汤圆

发表于 2009-3-23 09:48:27 | 显示全部楼层
合同怎么说的就怎么做。如果按照这种心态根本就不可能做好。
说好把源代码给人家,就一定做到,不要想别的歪脑筋。告诉你人家合作方并不傻!其实这也是一个人的诚信问题。
要不就不要写明给源代码,不要欺骗别人。
我如果答应给人家源代码就完整的给别人。真的以为自己做的东西非常高级吗?这些东西每个人都可以做,其实每个人只要投入精力都可以做出来。给了源代码,别人以后修改起来就相对方便些。但是对于一个稍微大点的程序,如果另外找一个人来做,就是看着源代码也要花费很长时间。并且程序结构也不是一时半回能够完全理解的。
    再说了,如果真的费这么多精力做这些,反而真的会出力不讨好。如果我是合作方,以后我绝对不再用这种人,而且我也会告诉我的朋友以后小心这种人。这是一种诚信。就是外行拿过这类修改过的源代码也能知道动过手脚。
     不要强迫别人做什么,其实这种改变源代码的内心都有个想法就是让合作方不能自己开发,想以后还找你。但是如果换位思考呢?是你呢?你会不会还找原来的开发者?就是因为急的时候,再次找你,其实心里已经下定决心有机会不再用你!何必呢,非要断自己的路子!

出0入0汤圆

发表于 2009-3-23 10:02:15 | 显示全部楼层
还是靠合同的
在合同没有声明全源码的情况下,俺是Lib+业务代码
客户如果确实要Lib层代码,这会涉及核心驱动和算法,尤其是加密验证部分,费用将很高,他要是愿意也无妨

出0入0汤圆

 楼主| 发表于 2009-3-23 14:09:58 | 显示全部楼层
实在是不明白怎么这么多人看不起自己源代码,毫不客气的说,很多情况下,拱手送人的源代码就是将饭碗拱手相送

以为给了优秀源代码,业务就会源源不断吗?那就是BC,功能实现了,要源代码干甚?就是随时准备踢开你

对方搞到真正易读的源代码,绝对不会第二次找你,因为他可以找到更便宜的开发工人,除非你的价格非常贱

某些情况下当然可以给出优秀源代码,但你认为有多少情况下可以毫无保留呢?

看到上面几个老板对付你的手法吗?很道貌昂然吧?什么诚信,人品,信用?你认为这些很管用?

面对现实,这个世界本来就是弱肉强食,商业如战场,一切讲究实力而已,别扯道德来遮羞;

技术人员大都太天真,真是很令人痛心,玩技术的也要学会保护自己,就是因为很多技术一点就破,所以搞技术的永远玩不过搞管理的;

出0入0汤圆

发表于 2009-3-23 14:34:04 | 显示全部楼层
楼上没错,一般不轻易把核心的东西给别人,除非是很简单的小东西

出0入50汤圆

发表于 2009-3-23 15:09:24 | 显示全部楼层
赞同38楼的观点。

做技术,很傻很天真的心态要不得,自己都不知道保护自己了,还指望合同,法律,老板来保护你?dream!
头像被屏蔽

出0入0汤圆

发表于 2009-3-23 15:55:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

出0入0汤圆

发表于 2009-3-23 16:17:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入54汤圆

发表于 2009-3-23 16:42:23 | 显示全部楼层
阿莫,可否说说,如果提供原代码,和不提供,价格差距多大?
以及后续技术支持,价格差距多大?
很多老板都很忌讳你拿提成,哪怕是纯利润的1%,他也会觉得不爽,一定要所有的都自己掌握,呵
所以我觉得还是一次买断比较好。免得后面大家都扯不清

出0入663汤圆

发表于 2009-3-23 17:09:11 | 显示全部楼层
【38楼】 robinyuan

就算你只给hex,反汇编逆向工程你以为很难吗?中国还缺少干这事的人吗?
所以我说了除非芯片是你烧好给客户的,否则就算你不给源代码也保护不了什么的。

当然,源代码倒不是一定给的,这都是和客户协商好的,带源代码价钱一定不一样,这已经是对自己的保护了。人家给了对应的价钱,就应该给清晰的代码,甚至算法。觉得是无价宝的就自己留着源代码,让客户找别人去吧。
头像被屏蔽

出0入0汤圆

发表于 2009-3-23 17:19:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入162汤圆

发表于 2009-3-23 20:20:47 | 显示全部楼层
to 38楼
实在是不明白怎么这么多人看不起自己源代码,毫不客气的说,很多情况下,拱手送人的源代码就是将饭碗拱手相送

以为给了优秀源代码,业务就会源源不断吗?那就是BC,功能实现了,要源代码干甚?就是随时准备踢开你

对方搞到真正易读的源代码,绝对不会第二次找你,因为他可以找到更便宜的开发工人,除非你的价格非常贱

某些情况下当然可以给出优秀源代码,但你认为有多少情况下可以毫无保留呢?

看到上面几个老板对付你的手法吗?很道貌昂然吧?什么诚信,人品,信用?你认为这些很管用?

面对现实,这个世界本来就是弱肉强食,商业如战场,一切讲究实力而已,别扯道德来遮羞;

技术人员大都太天真,真是很令人痛心,玩技术的也要学会保护自己,就是因为很多技术一点就破,所以搞技术的永远玩不过搞管理的;
----------------------------------------------------------------------------------------------

每个人都有对自己代码价值的一个衡量,如果对方要代码,那么你出个你心里价位即可。
如果你提了你心理的价位,对方也愿意付,你还在代码可读性上弄点小九九是很不道德的!
如果你很看重你的代码,认为这是你的饭碗,那么你完全可以一口拒绝或者出个天价。
如果双方就源代码达成协议,对方也履行协议了,你还在玩玩花样无疑是一种欺骗。
老板未必都是坏的!

接项目之前就应当做好第二次不找你的打算。
如果就源代码达成协议,你的价钱就是对方一次性买断你的技术。一次性买断你的技术,你就不指望他再找你了,因为你已经收了他下次找你的价钱。如果你不希望对方一次性买断你的技术,你完全拒绝提供源代码。
如果他拿了你的源代码,下次他找到更廉价的工人,那么只能说明你的报价是大大超过社会平均价钱的。


源代码从来不是技术人员的饭碗,真正的饭碗在你的大脑里,你的经验你的能力,这一点人家是学不去。
我从来认为技术人员就是和建筑工人一样是出卖劳动力的,无非是高级一点、薪水高一点而已。我不是老板,我也是个技术人员。
编代码、画板子其实是整个产业链比较底层的一层,这一层有一大把人可以替代。
如果一个技术人员觉得自己的代码给了别人,自己的饭碗就砸了,呵呵可能就是穷的只剩代码了。
写代码人是永远拿不到太高的薪水的、是发不了财的,因为完全在实现他人的构思、想法而已。
真正值钱的思路、构思一个好点子。
能够做到技术高层拿股份拿高薪往往不是技术高手。这些人能力在于:提出一个好的技术构思,将方案分解成一个个简单的任务,安排人员实现这些任务,对项目出现的问题进行协商解决及进程控制。。。。。。。。。

人家都把任务分解了,下面的人只是按照吩咐用写代码实现而已,何以铁饭碗??

以前我们的技术总监是华为出来的,在华为也是个小头目。他说华为招人,底层写代码的人从来都是找中不溜秋的人。水平太低太高人都不要的。水平太低,质量无法保证;水平太高用不上。水平太高往往喜欢玩技巧,而这是开发产品的大忌。规范的成熟的实现代码即可,用不着太高水平的

真正的技术在于系统设计、项目管理。
所以别眼红老板拿了你的技术赚了大钱,点子是他出的,你无非是实现他的想法而已,仅此而已。你不实现有人实现,这年月离了谁地球照样转。
所以,我们技术人员对自己应该有个清醒认识。

出0入0汤圆

发表于 2009-3-23 20:24:40 | 显示全部楼层
呵呵,不要那么激动。我的意思没有什么恶意而已,只是说,不要老想着怎么弄死别人!!如果真的技术方违反了合同,你可以用合同来说条件!而不要说什么过激的语句,就算你有报复心,也不要在大众的眼下来表演。本人已经不喜欢找项目了,只喜欢把我现有的技术卖掉,比如PID自整定技术,当然比利尔达上面那个方案好多了,他们只卖机器码,我是源代码和电路都一起出售。另加一套成品。后面的什么服务,我一概不包!信得过就要,信不过就拉到!

出0入0汤圆

发表于 2009-3-23 21:14:20 | 显示全部楼层
又要吵架了,哎

其实也没什么,说白了,就一个合同的问题

合同同意给就给,没有同意给就不给

守信用就成

出0入0汤圆

发表于 2009-3-23 21:34:07 | 显示全部楼层
我们不加密,而且连同三套板子实物所有文件一起给,50W

出0入0汤圆

发表于 2009-3-23 21:59:24 | 显示全部楼层
有时候人犯贱 九头牛都拉不回啊

出0入0汤圆

发表于 2009-3-23 22:10:03 | 显示全部楼层
都说按照合同为准,扯那么远也没作用嘛~

很简单的,比方说

提供授权,我方刷写,每Copy,100米
提供固件Hex,对方可以自由刷写,但不得发布,收5W米
提供全部源码,对方可以修改但不得发布,30W米
提供全部源码,对方可以二次发布,50W米

等对方自己决定就了事

出0入0汤圆

发表于 2009-3-23 22:50:56 | 显示全部楼层
技术人员太把技术当回事了,而望望一个产品中最不值钱的部分就是技术了,而且就是那种一个人就可以搞定的技术, 很多人拿着那几行代码当宝贝了

当时开发写合同的时候是怎么讲的就怎么办,我最痛恨的就是耍猫腻的

多花点心思在提高可靠上面,多花点心思在成本控制上,比花心思在这方面强多了, 自己单干开发信誉才是最主要的,给公司开发,是本职工作

出0入0汤圆

发表于 2009-3-23 22:56:44 | 显示全部楼层
不知道大家有没注意到老板们对工程师的提薪要求时会说:现在满街是工程师,但对媒体又说:想找个工程师很难,为什么这么矛盾?这就是商人的虚伪,双面性。利用工程师沉溺于技术不黯世事的弱点,欺骗他们,如果你不能为他创造价值的话,你跪地求他他也不留你,留你的话,就是你对他还有用。 连你自己都没有正确认识自己的价值,还能空想这世界有伯乐吗?谁比你自己更了解自己?  

*********************************

操 太tmd的正确了

出0入0汤圆

发表于 2009-3-24 09:36:02 | 显示全部楼层
人不知而不愠,不亦君子乎。
头像被屏蔽

出0入0汤圆

发表于 2009-3-24 09:49:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-3-24 11:20:47 | 显示全部楼层
看来这问题好热啊!不过中国有句话,“温饱而知礼仪,道德丧于穷困之地,穷山恶水出刁民”,也不是说穷的都是刁民,而是很多政策和环境问题,上有老下有小,诚心做人,饿死家人,出身农民的知识分子可有好多纯朴的,诚信不可置疑,可却受小人算尽,也只能说是能力问题了,心中再大的气度有什么用,太诚信,是老板很多都看不起你,就因为诚信失去自己的工作,看着家里亲人生病没钱医,(填饱肚子这年代不喜欢说),医院还是黑的,也可以说这是个人能力问题,只能去照着达尔文“物竞天择适者生存'原则生存咯,只能说社会小人不少,弱肉强食,这也只有富人才可君子为人,穷人只能保持君子这份心却难做到

出0入0汤圆

 楼主| 发表于 2009-3-24 21:14:28 | 显示全部楼层
讨论的很热烈,盈者见盈,姿者见姿啊
废话少说,开始上菜

********************************************************************

一个删除程序中所有注释语句的程序 - [ 软件]

http://tigerwang202.blogbus.com/logs/34368037.html



以下的一个小程序用以删除C语言编写的源程序中的所有注释语句,包括//和/*。程序能够正确处理引号的字符串与字符常量。参考“The C Programing Language”中的练习1-23。程序在Linux上实现,通过MinGW在Windows上重新编译。

使用方法:delcom.exe <input.c >output.c

input.c :输入文件  output.c :输出文件。通过< >实现输入输出重定向。

用途~呵呵 大家都知道的~

下载地址:http://tigerwang202.blogbus.com/files/12330641670.rar

一个删除程序中所有注释语句的程序ourdev_427701.rar(文件大小:6K) (原文件名:一个删除程序中所有注释语句的程序.rar)

出0入0汤圆

 楼主| 发表于 2009-3-24 21:45:40 | 显示全部楼层
批量删除注释的程序.rarourdev_427715.rar(文件大小:70K) (原文件名:批量删除注释的程序.rar)

http://www.laogu.com/ssw_1285.htm
  
程序名称: 批量删除注释的程序(支持汇编和C,C++)


功能说明: ● 本软件能批量删除代码中的注释。自动识别C代码和汇编代码。 ● 支持扩展名: *.c, *.cpp, *.h, *.asm, *.dt, *.inc ● 前三种按照C语言规范进行处理,后三种按汇编语言规范进行处理 ● 支持子目录,全自动处理,"5秒"搞定注意事项: ■ 不支持超过64K的文件,如有超过64K的文件将忽略处理; ■ 本软件直接处理目标文件,使用前请做好备份; ■ 将不用的文件尽量删除,这样可以缩短扫描时间;

出0入0汤圆

 楼主| 发表于 2009-3-24 22:36:35 | 显示全部楼层
辩证法与放屁(转)2007-09-13 08:46
http://hi.baidu.com/thinker2009/blog/item/80f032d972c315ea38012f77.html
上课时,我放了一个屁——很普通的屁。既不很臭,当然也绝对不香。
  可怕的是,教授正在讲辩证法。
  “请你自己对这个屁作一下判断,”教授说,“它好还是不好?”
  我只得说:“不好。”
  “错了,”教授说,“任何事物都有矛盾组成,有它不好的一面,肯定有它好的一面。”
  “那么说它好也不对了?”我问。
  “当然。”教授说。
  “它既好又不好。”
  “错了。你只看到矛盾双方对立斗争的一面,没有看到他们统一的一面。”
  我只好认真看待这个严肃的问题,仔细想了想说:“这个屁既好又不好,但不
  好的一面是主要的,处于主导地位。”
  “错了。你是用静止的观点看问题。矛盾的双方会相互转换,今天处于主导地位一面,明天一定处于次要地位。”
  “你是说明天全人类会为了我的这个屁欢呼雀跃吗?”
  “不尽如此,但不能否认这种发展趋势”
  我愣了好大一会儿,只得硬着头皮说:“我的屁既好又不好,既不好又好。今天可能不好,明天一定会好。今天可能很好,明天也许会不好。”
  教授听得直摇头,说:“这是彻底的怀疑论,不是辩证法的观点。”
  就这样,仅仅因为放了一个屁,我就成了一个怀疑论者。
  教授接着讲课:“辩证法的威力不仅在于能够轻而易举地驳斥任何观点,而且他能够轻易地为任何观点找到理论根据。”
  “可是我的屁就没有任何根据。”我抗议道。
  “那是因为你没有找到,其实很简单,它是你肚子里矛盾双方对立统一的必然结果。”
  我哑口无言。
  教授说:“下面我们不谈屁,谈一个更复杂的问题:一个西瓜,一粒芝麻,无论你怎样选择,都有理论基础。”
  我赶紧说:“我要捡起西瓜,丢了芝麻。”
  “很好。”教授说,“你抓住了主要矛盾,也就是说,你抓住了解决问题的关键。”
  “那我就捡起芝麻,丢掉西瓜。”
  “先有量变,才能达到质变。你解决问题的顺序十分正确。”
  “我既要西瓜,又要芝麻。”
  “即抓住主要矛盾,又不放过次要矛盾。你是用全面的眼光看问题。”
  “我既要砸烂西瓜,又要踩碎芝麻。”
  “很好,你是用发展的眼光看问题。新事物就是对旧事物的否定。一切旧的事物必然灭亡。旧事物的灭亡是新事物产生的前提。”
  “我既要吃掉西瓜,又要砸烂西瓜。既要捡起芝麻,又要踩碎芝麻。可是,只有一个西瓜,一粒芝麻,怎么办?”
  “你这才算对辩证法入了门,重要的是:矛盾的双方不仅对立,而且有它统一的一面。你吃掉西瓜当然有它合理的一面,但你要砸烂西瓜,也并非不合理。只有将二者统一,才能进入更高层次的斗争。”
  我张口结舌,目瞪口呆:“可是,你并没有解决我的问题。”
  教授笑着说:“辩证法不解决任何问题,它的用途在于首先把人变成傻瓜——如果还有人不是傻瓜的话。”
  “你是说‘首先’?”我问。
  “是对,然后再从傻瓜飞跃到学者。”教授开始整理讲义,“关于辩证法为什么不解决问题,如何把人变成傻瓜,以及怎样实现从傻瓜到学者的飞跃,这是下一节课的内容。”
  教授一蹦一跳,走出教室。
  第二堂课:
  教授说:“下面我们讲一下辩证法的用途。我们要举一个更加复杂的例子:如何看待中国传统文化?”
  我说:“那一定要用辩证的观点。”
  “对。我们有许多大牌的辩证法学者,他们会充分利用辩证法的三大规律,理论联系实际,旁征博引,纵横捭阖。下笔万言,紧绕主体。最后给你得出一个结论:要取其精华,去其糟粕——你佩服不佩服?”
  “是啊。辩证法不是很有用吗?”
  “以前我也这样认为。直到我见到一只丧家的野狗——它改变了我的看法。”
  “野狗?”我莫名其妙。
  “是的。我家屋后有个垃圾堆,有一天来了一只丧家的野狗。它对其他东西看也不看,‘喀哧’一口,咬住一块骨头。”
  “这毫不奇怪,所有的狗都会这样。”我说。
  “不错。问题是对于狗来说,这块骨头就是‘精华’,垃圾堆里除了骨头以外,还有砖头,铁块,破水桶等等糟粕,他为什么只要骨头这个精华呢?他怎么知道取其精华,去其糟粕?难道它已经充分理解了大牌学者们的论述了吗?”
  “好像不会。”
  “肯定不会,所以说大牌学者们通过精确的论述,得到的精妙结论,其实是连一只丧家的野狗早就知道的东西。既然如此,我们为什么还要为他们喝彩,对他们崇拜呢?”
  “是啊,为什么?”
  “唯一的解释就是:辩证法已经成功地把你变成了一个傻瓜。”
  “我明白了。”
  “你明白以后一定要问:你说的没用。取其精华,去其糟粕谁都知道。问题是什么是精华,什么是糟粕。”
  “对,看他怎么说。”
  “你难不倒他,他又会充分利用辩证法的三大规律,理论联系实际,旁征博引,纵横捭阖。下笔万言,紧绕主体。最后给你得出一个结论:具体问题,具体分析。高明不高明?“
  “是有道理。”
  “可是我认为:这不仅是无聊,无用的问题,已经近于无赖了。”
  “这怎么说?”
  “难道世界上有人会‘具体问题,抽象分析’吗?那只丧家的野狗,来到垃圾堆前,难道会象亚里斯多德一样,先把各种东西分门别类,搞清其内涵和外延,再通过归纳演绎,最后确定它是吃砖头还是吃骨头吗?这可能吗?”
  “不可能。那样的话,他连吃砖头都有可能。”
  “对,孺子可教。没有人会‘具体问题,抽象分析’,‘具体问题,具体分析’这句话,等于没说。不过辩证法学者倒是喜欢用抽象的方法,分析具体问题。因为辩证法是放之四海而皆准的普遍真理。所以如果你看到一只吃砖头的狗,千万不能小视,它可能是一个著名学者。”
  教授又收拾好讲义,说:“辩证法的根本在于使用‘全面的,发展的,联系的’观点看问题。象所有的谎言一样,这话听起来很显真理。下一节课讲辩证法的渊源,以及它和形而上学的关系。”
  第三堂课:
  “迄今为止,人类用三种方法研究这个世界。”教授毫不客气,单刀直入,“第一种是‘屠夫式’,大部分科学家都是这种方式。他们把世界割裂成极小的部分进行分析研究。研究生物的并不研究全部生物,有的只研究动物;研究动物的也不研究全部动物,有的只研究哺乳动物;研究哺乳动物的,有的只研究猴子;研究猴子的有的只研究猴子的尾巴。他们眼中只见树木,不见森林,是极其片面的观点。”
  “不是辩证法的观点。”我说。
  “对,”教授接着说,“不仅如此,他们还尽量割裂研究对象与其他事物的联系,在尽量不受干扰的情况下,看看他到底是什么样子。科学家花费大量金钱建造实验室,而不在大街上做实验,主要原因就在于此。现在有些实验还要搞到太空里去做,连空气引力都要隔绝,可见,为了割裂事物之间的关系,这些科学家是不择手段的。”
  我说:“与辩证法的观点相反。”
  “有说对了,但仍然不止于此,他们还不管一只猴子过去怎样,将来如何,只管拿来一刀宰掉,看看它肚子里都是什么东西。他们用的是彻底的静止观点。”
  “非常野蛮,而且十分笨拙。”我说。
  “所以我把它叫做‘屠夫式’。但这是我们一切科学知识的基础和来源。没有这些人,也就没有任何科学。他们应该得到应有的尊重——他们的人格,才智和他们使用的方法,都应该得到尊重。”
  “有谁不尊重他们吗?”
  “有很多,你可能就是一个。”
  “此话怎讲?”
  “他们用的是孤立,静止,片面的方法,这种方法有一个名称,你们中学老师教过你们吗?”
  “叫形而上学,可那是个贬义词呀?”
  “是的,就叫形而上学,这就是过去全部的科学家,现在大部分科学家使用的方法。”
  “那为什么它是一个贬义词呢?”
  “因为它和辩证法不相容,而且针锋相对。有些人不仅自以为是正确的,而且断定其他人都是错的。奇怪的是,辩证法整天讲什么对立统一,形而上学来和辩证法对立,他却不肯同一,而是对形而上学采取一棍子打死的态度。”
  “我明白了。”
  “使用第二种方法的也是科学家,我称之为‘强盗式’,这种科学家更重要。
  他们什么也不干,坐等形而上学的科学家研究出比较确切的成果,在此基础上综合升华。千千万万的科学家研究了万万千千的动物,植物,微生物以后,达尔文拿来一综合,就提出了进化论。“
  “这活倒很轻松。”
  “一点也不轻松,而且需要更高的聪明才智和更加宽阔的视野。爱因斯坦是其中最出色的一位。他的视野非常开阔,甚至研究过辩证法。但是他说辩证法对他的研究没有任何帮助。”
  “辩证法到底是干什么的呢?”
  “研究世界的第三种方法就是辩证法的方法,我称之为‘上帝式’的方法。
  也就是我们下一节课的内容。“
  最后一课:
  “我被开除了,”教授说,“今天上最后一课。请先提问。”
  我说:“有的同学说,你的观点有点偏激。”
  “他说对了,我不仅偏激,而且有错误。上一节课我就故意设置了一个常识性的错误,但是你们并没有给我提出来。现在我不得不把最重要的东西教给你们:没有谁是全部正确的,最多只是正确了一部分。如果世界是那只大象,我们就是那一群摸象的瞎子。我们想知道大象的样子,但是我们谁也不可能把这只大象摸完。我所有的瞎子加在一起也不可能,如果你的一生只能摸完大象的尾巴,你一定要认真去摸。如果你确信自己完全了解了这支尾巴,你一定要坚持自己的观点。
  不要听见别人说大象像柱子或者象扇子就轻易改变自己的观点。偏激并不可怕,可怕的是听风就是雨,毫无自己的主见。如果你坚持的错了,没什么大不了,一定有更聪明的瞎子给你指出错误。科学就是这样在成千上万的错误中提取一个真理的学问。但是如果你对了,却没有坚持,世界就失去了一次前进的机会。
  “另外你要随时记住:无论你是对是错,你只是了解大象的一小部分。要听听别的瞎子怎么说。不能轻信,也不能不信。你别无选择,只有使用你的理性,它也许有许多不足,但却是你唯一可以信赖的东西。一个人的理性十分有限,许多人的理性却威力巨大。如果你不知道许多人的理性在那里,那么我告诉你——那就是科学。科学也有不足,以后一定要被突破。不过那需要许许多多比爱因斯坦更聪明的人,肯定不是你我。
  “理性,批判和宽容,就是我所说的最重要的东西。”
  这次我没有提问,也没有其他人提问。
  “言归正传,继续谈辩证法。”教授只好自己接着说,“辩证法也是个瞎子,但是他不摸象。”
  “他不想了解大象吗?”我问。
  “他当然想了解大象,但是他认为摸象没有用,或者说作用不大。他认为大象在到处乱跑,还在不断地从小变大,而且与他周围的森林,地球,甚至太阳系,银河系有无限多的联系,用‘孤立,静止,片面’的形而上学观点徒劳无功,只有使用‘全面,发展,联系’的辩证法观点,才能搞清大象的样子。”
  “可是他连象都不摸,怎么全面,发展,联系呢?”
  “我不知道,鬼也不知道,只有上帝知道。所以我把它称为‘上帝式’的方法。辩证法最初在中国流行,伏羲八卦,阴阳五行,孔子的”过犹不及“,老子的”反者道之动“,《易经》”一阴一阳谓之道“,《黄帝内经》”内外调和,邪不能侵“统统都是辩证法。西方只有亚里斯多德提出过辩证法的雏形,既不全面,也不具体。恩格斯说他阐述了辩证法的基本原理,我不知道从何说起。不过这无关紧要,现代意义上的辩证法是从黑格尔开始的,这一点恩格斯和我,以及其他任何人,都不会有任何意见。”
  “你只说恩格斯,怎么不提马克思?”
  “马克思和辩证法关系不大。”
  “辩证唯物主义不是不是马克思主义的灵魂吗?”
  “我不同意这个观点,马克思早期写过一篇《神圣家族》,痛批黑格尔的”泛逻辑论“,泛逻辑论就包括辩证法。以后也没见他怎样说过辩证法。直到他最晚的哲学著作《资本论第二版跋》中,他才玩笑的说自己卖弄了辩证法。但是辩证法是什么,马克思终其一生,也没有回答过。”
  “那么辩证法怎样进入马克思主义的呢?”
  “完全是恩格斯的原因,从《反杜林论》到恩格斯致死不愿发表的《自然辩证法》,辩证法才成为马克思主义的所谓灵魂。这一点我和顾准的看法一样,马克思是不会同意‘辩证唯物主义’这个说法的。这完全是后人的需要。不过《反杜林论》是经过马克思同意的,这一点倒是事实。”
  “辩证法有哪些内容?”
  “首先是三大规律:第一,质量互变规律,来自黑格尔《逻辑学》第一部”存在论“。第二,矛盾统一规律,来自《逻辑学》第二部”本质论“。第三,否定之否定规律,来自《逻辑学》第三部”理念论“。这都是表面的东西,也就是马克思所说的”神秘外形“。它的根本在于用全面,发展,联系的观点看问题。它的实质是隐藏其后的两大主义:第一,真理一元论。反对真理的多元论和相对主义。这早已成为历史的垃圾。第二,真理不可分,局部事务的真理都是整体世界的一部分,孤立的研究发现不了这些真理。只有在森林中找树木,不能从树木开始研究森林。这不仅极其荒唐,而且毫不现实。”
  “为什么不现实?”
  “有个西方不败教授说得很好:事实充分证明,孤立的,静止的、片面地来研究事物的方法,在人类现有的认识情况下才是最好的方法_论,才可能了解事物的本质。因为事物之间的联系千丝万缕,如果把所有的关联都考虑进去,就等于什么也干不成,就象我们老祖宗一样,只能抱着个”太极生两仪,两仪生四象,“这个思维懒怠症混日子。等到对事物的各种性状及规律有了较为详细的把握,再把它放到系统中进行非常谨慎的观察和研究。而中国人的传统思维是总想一口吃成个大胖子,一开始便从总体上提出本质的观点。这种带有原始思维特征的传统正与辩证法不谋而合,或者说辩证法只是中国古代思想方法的一种现代表述,中国人从来不缺少这种思维方式,需要补课的正是孤立的,静止的、片面地来研究事物的笨功夫。”
  “辩证法到底是怎么来的呢?”
  “你们中学教科书上是怎么讲的?”
  “好像是对客观世界,人类社会以及思维规律的全面正确的总结。”
  “这种说法极其荒唐,而且全然不顾任何事实。是彻底的误人子弟。第一,别说黑格尔活着的时候,就是在二十一世纪的今天,人类对客观世界仅仅了解一点,很小的一点。对人类社会只了解半点。对思维规律了解得半点也不到。一只大象我们只是了解了尾巴上的几个关节,腿上的几根毛,加上耳朵上一块皮而已,谈得上什么全面总结,正确总结?纯粹是说梦话。
  “第二,你们可以看一看《马克思恩格斯选集》第三卷469页第十二行到第十四行:”黑格尔的著作中有一个广博的辩证法纲要,虽然它是从一个完全错误的出发点发展起来的。“恩格斯在不止二十个地方说过,这个错误的出发点就是唯心主义。谁都知道,恩格斯所谓的辩证法原版照抄的来自黑格尔的《逻辑学》,如他自己所说,只不过”打碎了黑格尔唯心主义的外壳,“取了他”辩证法的合理内核“。你相信吗?人类从许许多多正确的出发点出发,都要走上弯路。而一个叫黑格尔的帝国教授,却可以从一个错误的出发点出发,”全面地,正确地“总结出客观世界,人类社会以及思维的全部正确规律。这是人说的话吗?
  “我绝不相信。就是再把我绑到新教徒的火刑柱上,把我烧死以前烤上两个小时,我仍然不相信!”
  “我也不相信。”我小声说。
  “可是相信的人相当多。自从打碎了基_督教的枷锁,辩证法是科学发展道路上的最大障碍。他把现代科学斥责为不入流的形而上学,机械论。使科学在一些地方停滞不前。二十世纪二十年代,前苏联科学院的一个院长,就因为要搞农作物的杂交改良而丢了脑袋。”
  “那为什么?”
  “因为杂交改良依据的是孟德尔-摩尔根理论,与辩证法格格不入。”
  “你很熟悉前苏联吗?”
  “我最熟悉的是中国,我在这里住了几十年。可是打别人头上的苍蝇更轻松。”
  我问:“对于辩证法的进攻,科学是怎么反击的呢?”
  “西方哲学用实证主义,逻辑经验主义进行了反击。现代科学却默不做声。
  它只是不断地发展,生产出更多的粮食,钢铁,机器,以及人类除精神需要的一切。
  当这一切成为不可逆转的潮流的时候,辩证法才忽然发现,虽然它在骂别人,丢人的却是他自己。”
  “辩证法没有任何可取之处吗?”
  “有人说辩证法是一个早产的怪胎,虽然在人类认识的现阶段并不适用,但他整体的观点确实十分诱人。现代科学的整体论,有机论已经初具雏形。不过这不是对辩证法的回归,而是在科学自身的发展中,若隐若现地概括出的一些原则。真理一元论毕竟是难以接受的。科学从不放过任何一个发展的可能性,哪怕最微小的希望,也会有人付出百倍的努力。1984年,一大群名气很大的科学大师在美国成立了圣菲研究所(Santa  
Fe  
Institute),他们包括众多的诺贝尔奖获得者,是许多科学领域的顶尖人物,出钱的大老板也是赫赫有名——金融杀手索罗斯。它们的目标就是研究”一元化理论“的可能性。当然,他们谁也不会相信什么辩证法,那就不要研究“一元化”了。它们是用现代科学的方法探讨控制复杂的适应系统(CAS)的一般性原理。虽然我不相信他们会取得任何结果,但这是人类科学史上最大胆的尝试之一。我预祝他们成功——尽管那样会打破我的一切观念。”

出0入0汤圆

发表于 2009-3-24 22:46:54 | 显示全部楼层
60楼这文不错

出0入0汤圆

发表于 2009-4-13 16:18:26 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-4-13 17:18:53 | 显示全部楼层
理性,批判和宽容

60楼的帖子不错。

出0入0汤圆

发表于 2009-4-13 17:24:02 | 显示全部楼层
给加人的源代码把注解删掉,自已的就不要删了,问起来的时候,就说从来不用注释

出0入0汤圆

发表于 2009-4-13 23:36:11 | 显示全部楼层
【60楼】 robinyuan  “哲学课”很有意思!谢谢! 我将转帖到我的QQ空间里。
53楼的也让我收获不少。
在这个论坛里,不仅仅有技术,还有其他含金的东西。
ourDEV 就像一个大家庭,好多的兄弟哥们儿!

出10入95汤圆

发表于 2009-4-13 23:41:22 | 显示全部楼层
只是老老实实地做技术,日子将一天比一天难过!

出0入0汤圆

发表于 2009-12-21 23:26:28 | 显示全部楼层
源代码的加密也是门学问啊,毁誉参半,其实代码的大部分都是垃圾,没价值,有价值的就几行,只要花点心思,把核心代码玩点花样就差不多了

出0入0汤圆

发表于 2009-12-22 09:06:16 | 显示全部楼层
60楼很精彩!

出0入0汤圆

发表于 2009-12-22 09:21:52 | 显示全部楼层
搭车请将,怎样建立并使用自己的LIB文件?比如用GCC,谢谢

出0入0汤圆

发表于 2009-12-22 09:42:39 | 显示全部楼层
说的有理啊,受启发了

出0入0汤圆

发表于 2009-12-22 09:53:54 | 显示全部楼层
我是用C面向对象来写核心的东西。
把最核心的东西做好数据隐藏。然后封装成库。再提供给用户,并且做到让用户将来自己不用修改我提供的对象也能扩展程序的功能。这就要学学设计模式一类的书了。

出0入42汤圆

发表于 2009-12-22 10:44:24 | 显示全部楼层
怎么都这样...
这么多开发人员不按规则出牌,还嚷嚷...

可能很多朋友都是嵌入式行业的,对于源代码的销售接触不多,卖就卖,不卖就直说,不要玩这些东西. 很多大型的协议栈都卖源代码的,大概百万行的级别,如果说玩猫腻的话,我不好想象会是什么样子...

出0入0汤圆

发表于 2009-12-22 11:15:16 | 显示全部楼层
骗子老板不少,可骗子开发人员也不少。

出0入0汤圆

发表于 2009-12-22 11:34:16 | 显示全部楼层
提供源代码有提供源代码的价钱,客户付了钱就应该得到相应的服务
要不然就不要按照提供源代码的价格谈价钱
像albert_w 说的一样,像许多大型协议栈不但提供源代码,还会提供很详细的文档说明
如果不按规则出牌,很快会把自己搞臭的

出0入0汤圆

发表于 2009-12-22 18:29:26 | 显示全部楼层
avr-ar -r xxx.a xxx.o
gcc下库文件是.a后缀名,用avr-ar工具,在winavr安装目录下的bin文件夹内可以找到

出0入0汤圆

发表于 2009-12-22 19:30:56 | 显示全部楼层
弱弱的问一句,给asm文件严格来说也是源码吧(有的程序员本来就用汇编写程序)?

出10入10汤圆

发表于 2009-12-22 19:42:52 | 显示全部楼层
这个要顶。对人说人话,对鬼说鬼话,至少要懂鬼话呀。

出0入0汤圆

发表于 2009-12-22 21:51:43 | 显示全部楼层
哪用想 COMPILE出HEX,反汇编,直接给一个汇编文档,他爱看就看去吧。

出0入0汤圆

发表于 2009-12-22 22:23:27 | 显示全部楼层
看到这个问题,我在想,我想拿项目所以文件但是不想给钱,怎么忽悠?

出0入0汤圆

发表于 2010-1-3 00:19:45 | 显示全部楼层
楼上的问题太easy了,先忽悠对方自己是个大客户,这个是关键,先摆气势和财气,暗示对方把我这个大客户侍候舒服了以后的生意大大的有,接着就问他要个样品先看看,接着继续挑毛病,用外行的方式狂批狠批,人家就会不服气要跟你证明自己是如何如何了的,哈哈,那你的机会就来了,挑一些关键的问题来刺他,对方肯定会吐出一些你想要的信息,不过如果你是在太逊想要完整的资料,嘿嘿,不给钱是不行的,对于技术高手来说,这次过招已经拿到了他想要的大部分东西。

出0入0汤圆

发表于 2011-4-26 16:36:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-26 18:43:21 | 显示全部楼层
给他吧,

出0入0汤圆

发表于 2011-4-26 18:43:45 | 显示全部楼层
不用加密

出0入0汤圆

发表于 2011-4-26 18:45:52 | 显示全部楼层
真要有心,还怕搞不出来
若要没心,给他也不用担心,他们可能都不会去看。

出0入0汤圆

发表于 2011-10-9 20:08:19 | 显示全部楼层
源代码属于版权,著作权一类。如果你估价的真金白银没有打到你的账户,切勿轻信任何人。金钱是丑恶的,它却能很好的代表善意。

事先谈好的条款如有不公平也要开诚布公讲明,一切都要放下所谓面子,放到桌面上讲清楚,避免误解。

合适的时候就不要再给别人打工了,什么市场啊资金啊管理啊,简单的很。比起单片机程序,不值一提。别被那帮笨乎乎的文科学生给忽悠了。

出0入0汤圆

发表于 2011-10-9 21:13:03 | 显示全部楼层
还是按合同办事吧,那些要给的就改给了。

出0入0汤圆

发表于 2011-10-10 00:12:06 | 显示全部楼层
膜拜60楼的教授~~~

出0入0汤圆

发表于 2011-12-18 20:29:41 | 显示全部楼层
支持60楼
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 09:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表