2006年12月15日星期五

Google专利搜索服务发布

  据CNETNews.com报道,本周三晚,Google正式发布了Google专利搜索服务,用户通过输入关键词、专利号、发明者和文件日期就可以搜索美国的专利产品。用户还可以浏览原始专利文件的扫描图像,并可以进行放大。Google的专利搜索涵盖了700万个专利文件。

  目前,Google的专利搜索只提供美国专利文件。做为一个搜索尝试,我们对于百度Google的Page Rank专利进行了一些搜索测试。

  首先,使用“YanHong Li”做为关键字搜索(注:不应搜索Li YanHong),第一条即搜索出“Hypertext document retrieval system and method”,效果不错。该专利的全部信息(专利号,日期,创作人,内容等)都按照一定格式列出来,还可以在线查看专利的具体内容,很方便。如下图所示。

Google专利搜索服务

  再次,使用“Lawrence Page”做为关键字搜索,搜索到的第一条是“Method for node ranking in a linked database”,里面也将专利的详细信息(专利号,日期,创作人,内容等)显示出来,如下图所示。

Google专利搜索服务

  总的来说,Google的专利搜索服务提供了一个简易的搜索美国专利的途径,可惜的是目前只有美国的专利,其他国家的专利还没有。

  Google专利搜索服务的地址是:http://www.google.com/patents

Firefox的Google工具栏中文版发布

  今天,收到Google发来的一个消息,说针对Firefox用户的Google工具栏中文(简体中文和繁体中文)3.0 Beta版已经发布了,于是我就开始下载试用一个看看。

  Firefox版本的Google工具栏下载地址参见Google工具栏网站,我访问的时候,不知道什么原因,点“同意并安装”之后没有任何反应,也没有出现拦截了安装的消息,卸载原先的2.0版本后再安装,还是没有反应,看来不是我本地FireFox环境有问题,就是安装页面有问题,试了一下老版本的安装页面,可以安装。

  没办法,我只好查看源文件,找到了3.0版Toolbar的安装文件地址,直接放到地址栏,终于可以安装了。

Firefox的Google工具栏

  安装还算顺利,最后出现了安装结束的界面,界面默认的搜索引擎是“中国(.cn)”的地址,不过我还是喜欢使用.com的地址。大致看了一下设置界面,和IE版本的工具栏4.0几乎一模一样,可惜发布的时间比IE版本的工具栏慢了好几个月。

Firefox的Google工具栏

  安装后我发现一个有趣的现象,因为我在IE中也安装有Google工具栏,我发现FireFox的这个Google工具栏会自动将我在IE里的一些设置复制过来,比如下面的图标中,那个百度搜索的图标是我在IE里单独设置的,但是FireFox没有设置却也自动有了这个图标。

Firefox的Google工具栏

  由于其全部的功能和IE版本的几乎完全一样,而IE版本的Google工具栏我以前介绍了很多,因此这里我就不再罗嗦介绍了,关于详细的Google工具栏技巧文章,有兴趣的朋友可以参考一下我的Google工具栏的这个栏目。

Firefox的Google工具栏

  下面是Google公关人员发来的关于此事的新闻稿,该文章不代表本Blog的观点和看法,供参考。

针对Firefox的Google工具栏3.0中文版发布了

  今天,Google(谷歌)发布了针对Firefox用户的工具栏中文(简体中文和繁体中文)3.0Beta版。最新版本的工具栏增添了定制按钮和网络书签的新功能,使得Firefox的用户可以拥有和IE用户一样的工具栏功能。自此,Firefox用户的搜索体验将更为个性化。

  所谓“定制按钮”就是用户点击自己工具栏上的按钮,即可访问、搜索自己喜爱的网站,并获得网站最新的RSS/Atom feeds.例如,热衷于新闻的人可以把他们喜欢的新闻网址添加到工具栏上,点击这些按钮,用户就能从工具栏上直接浏览这些网站最新的标题新闻。

  在新版本的Google工具栏上,用户还可以为自己喜欢的网址建立书签,并通过简单的操作为书签分类。举例说,如果用户在工作时定制了一篇有趣的文章并打算随后阅读,那么他只需要通过登录Google帐户,在家里的电脑上就能轻松找到之前定制的这篇文章。这项功能是为方便用户在不同电脑上的使用而设计的,书签被保存在用户的 Google帐户里。

  Google工具栏是备受用户喜欢的一款免费软件。通过Google工具栏,用户无需先打开Google主页就可以在工具条内输入关键字进行搜索。它旨在帮助用户最便捷地搜索到所需信息,让Internet变得更易于使用。

  除简体中文外,针对Firefox的Google工具栏3.0 Beta版提供其它25种语言的支持。在这次发布中,Google新添了英国英语,阿拉伯语,保加利亚语和希腊语等四种语言。最新版的Google工具栏支持Windows XP/2000 SP3+,Mac OS X 10.2+ or Linux。

2006年12月14日星期四

通过PayPal实现美元现钞转换为现汇

  中国是汇率管制的国家,居民手中的美元现汇可以转换为美元现钞和人民币现钞,但是美元现钞和人民币现钞却很难转换为美元现汇,今天我介绍一个方法,可以令没有美元的用户也拥有美元现汇的帐户。

  首先要现解释一下美元现钞和美元现汇的区别,在我国,居民外币储蓄存款有两种账户:现钞户和现汇户。现钞指的是外币的钞票和硬币或以钞票、硬币存入银行所生成的存款。现汇是指以支票、汇款、托收等国际结算方式取得并形成的银行存款。外币现钞只能运送到国外才能起到支付作用,在国内法律是禁止其支付的。根据国家外汇管理有关规定,现钞不能随意换成现汇。个人外汇买卖业务本着钞变钞,汇变汇的原则。国家的外汇管理政策也是鼓励持有现汇、限制持有现钞,因为现汇作为帐面上的资金比现钞更便于外汇管理。

  由于美元现汇兑换人民币高于美元现钞,且在流通和交易上都比现钞方便,因此一般都建议美元现汇存款不要轻易支取为现钞,以免让手中的外汇贬值。将手中的美元现钞转换为现汇,也可以使得自己的外汇升值,我今天想到一个方法,可以实现现钞转现汇的功能,实现我们手中的美元现钞“升级”为美元现汇。

  前提条件是,拥有一个招商银行的信用卡,并用这个信用卡激活了PayPal.COM的国际帐户。

  首先,在PayPal用同名再注册一个帐户,这时候,在银行将美元现钞存入招商银行的信用卡,并用这个卡关联的帐号转一笔美元到另外一个同名PayPal帐号,金额和存入信用卡的相同,之后,在那个帐号里,通过支票或者电汇的方式收款,耐心等待一段时间,支票寄到后去银行托收这张支票,托收成功后,存进去的就是美元现汇,这就实现了美元现钞转换为美元现汇。

  即使你没有美元,由于招商银行的信用卡可以通过人民币还款美元,你一样可以获得美元现汇。这也是通过人民币兑换美元现钞或者现汇的一个方法。不过如果你办理过港澳通行证并申请了一次签注,那么也可以直接去银行兑换几千美元。

  这个方法是突破外汇管制的一个思路,不过PayPal支票托收可能有些银行不做,另外这种转钱方法不知道是否违反PayPal的使用条例(同名帐户是否允许转钱),因此我也不知道这个方法是否有效,稍后我会实际进行一下验证,看看是否可以实现这个功能。

  补充一下相关费用:个人PayPal帐户之间转钱:免费;PayPal支票收款:5美元;PayPal电汇收款:20美元;中国银行托收:20人民币。

  大家如果对PayPal使用比较熟悉,也可以交流一下各自意见。

南京大屠杀纪念日

  今天是12月13日,是南京大屠杀六十九周年纪念日,南京大屠杀指的是日军于1937年12月13日攻陷中国首都南京之后进行的大规模屠杀、抢掠、强奸等战争罪行。

  南京大屠杀这个话题也是一个比较敏感的话题,今年在中国至少有两次相关事件引发了不少争论。

  第一次是关于“Google搜索南京大屠杀”的事件,该事件可能是由于公关公司的暗地炒作,也可能是网络愤青的偶然发现,由Google不能搜索这个词语的现象以及大众对网络知识的匮乏,引出了一个对于Google非常不利的结论,当然这个事情实在讨论太多,有兴趣的人可以自行上网搜索一下,应该可以知道Google无法搜索的真正原因,如果大家是在想不通过代理服务器也搜索这个单词,我建议搜索“南京大屠殺”,这个繁体词是可以搜索的。

  另外一起事件是“孟广美事件”,孟广美在台湾做一个节目时,提到了南京大屠杀,没有表现出较为庄重的表情,因此被愤愤们认定为是亲日派并大肆批判,使得孟广美隐姓埋名了一段时间,至今还没敢上凤凰台锵锵三人行亮相。

  不可否认的是,当今日本人对南京大屠杀的过程与死伤人数的确存在争议,有些认为死亡数百人,有些认为死亡4万人,有些认为死亡十万人。远东国际军事法庭认定为20万以上,中国学者考证为30万以上。

  关于日本人的这些看法,大家可以上上日文版本的维基百科,查看“南京大虐殺”条目即可,中文版的“南京大屠殺”左下部也有相关链接。

  鉴于目前中文版的维基百科大部分人仍然无法直接访问,我这里就转载一下中文版的“南京大屠殺”的条目的部分内容,供参考。

南京大屠杀

  南京大屠杀指侵华日军于1937年12月13日攻陷中国首都南京之后,在南京城区及郊区对中国平民和战俘进行的长达6个星期的大规模屠杀、抢掠、强奸等战争罪行。

  有关南京大屠杀的过程与死伤人数至今仍有争议,其中远东国际军事法庭认定为20万以上,中国学者考证为30万以上,而日本学者之研究则众说纷纭,难有统一定论。

  在中国,南京大屠杀往往是国民对日本右翼为侵略历史翻案的关注焦点之一。在日本,公众对南京大屠杀的认识却存在着广泛不同的情绪及观点,尤其是日本极右翼份子,认为南京大屠杀是被夸大、甚至是凭空捏造的反日外交工具,也有人认为否认南京大屠杀是历史修正主义、否认主义的表现。由於日本人对南京大屠杀的意见有着广泛的分歧,因此视乎讲话者的观点,南京大屠杀可能被称为「南京大虐杀」、「南京虐杀」、及「南京事件」等。对南京大屠杀的认识,是中日关系中存在的重要问题之一。

  南京大屠杀在日本叫做「南京大虐杀」,也叫“南京虐杀”、“南京事件”。英译则为Nanking Massacre(南京屠杀)或Rape of Nanking(南京的洗劫、南京的强奸)等,但往往人民对其的认知远不如对纳粹的种族灭绝过程的认知。

  战争背景

  1937年七七事变后,日本展开全面侵略中国的大规模战争。7月17日,国民政府军事委员会委员长蒋介石在庐山声明中表示:“如果战端一开,那就是地无分南北,年无分老幼,无论何人,皆有守土抗战之责任。”全国上下掀起全民抗战的浪潮。

  同年8月13日至11月12日在上海及周边地区展开淞沪会战。战役初期,日军于上海久攻不下,但日军进行战役侧翼机动,11月5日在杭州湾的全公亭、金山卫间登陆,中国军队陷入腹背受敌的形势,战局急转直下;11月8日蒋中正下令全线撤退;11月12日上海失守,淞沪会战结束。

  淞沪会战结束后,中国军队向南京方向溃退,中国首都南京处于日军的直接威胁之下。由于从上海的撤退组织的极其混乱,中国军队在上海至南京沿途未能组织起有效抵抗。中国将领唐生智力主死守南京,主动请缨指挥南京保卫战。11月20日国民政府宣佈迁都重庆。

  经过淞沪会战三个月鏖战,日军也损失甚巨。日本参谋本部原计划让上海日军“凯旋归国”,并没有进攻南京的计划。11月7日,日本参谋本部给上海派遣军和第十军的命令是:“扫荡上海附近之敌,追击的战线为苏州、嘉兴以东”。 然而日军中下级军官不愿就此罢休,11月15日的第十军军团扩大会议达成决议:“全军独断敢行,全力向南京方向追击。”11月22日,松井石根致电多田骏:“为了尽快解决事变,要求军部批准向南京进军和占领南京。”12月1日,日本参谋本部正式下达占领南京的命令。日军经过数月连续作战,此时进攻上海以西数百公里的南京,几乎没有后勤支持。日军军官称:“粮草不足就现地解决,弹药不足就打白刃战。”在西进途中,日军抢劫、杀害平民、强暴妇女的暴行已经开始。

  12月4日,日军逼近南京外围。8日,日军占领南京外围阵地,已从北、东、南三面包围南京,此时南京守军只剩西面的长江一条退路,然而唐生智做出“背水一战”的姿态,一方面下令集中力量固守复廓阵地,另一方面命令销毁长江上全部渡船,并令宋希濂三十六师看守城内通向下关的唯一通道挹江门,严禁部队从此处退出。自此,南京城内守军和平民的退路被全部切断。10日,日军发动全线进攻,但直到12日仍未能突破南京城防。12日晚7时,唐生智突然下令突围撤退,自己乘保留的汽艇出逃。南京守军瓦解,大部向下关溃退,在挹江门与三十六师发生激烈冲突,最终击破城门逃至下关。由于渡船已经销毁,许多难民与士兵仅试图依靠木板渡江,最终大多冻溺江中。其他人见渡江无望,返回城内。许多士兵脱下军装躲入南京安全区。

  暴行

  大规模集体屠杀

  南京下关码头尸体堆积如山(村濑森安(Murase Moriyasu,南京大屠杀参与者)拍摄)进城兵力约50000,执行军纪维持的宪兵却仅有17人的日军除了个别地或小规模地对南京居民随时随地任意杀戮之外,还对中国人,特别是解除了武装的军警人员以及日军认为是可能参加过抗日活动和适合兵役年龄的中国青壮年,进行过若干次大规模的「集体屠杀」。大规糢屠杀方法有机枪射杀、集体活埋等,手段极其残忍。

  12月15日(日军佔领第3天):已放下武器的中国军警人员3000余人被集体解赴汉中门外用机枪密集扫射,多当场遇难。负伤未死者亦与死者屍体同样遭受焚化。夜,解往鱼雷营的中国平民及已解除武装的中国军人9000余人被日军屠杀。又在宝塔桥一带屠杀3万余人。在中山北路防空壕附近枪杀200人。

  12月16日(日军佔领第4天):位于南京安全区内的华侨招待所中躲避的中国男女难民5000余人被日军集体押往中山码头,双手反绑,排列成行。日军用机枪射杀后,弃屍于长江以毁屍灭迹。5000多人中仅白增荣、梁廷芳二人於中弹负伤后泅至对岸,得免於死。日军在四条巷屠杀400余人,在阴阳营屠杀100多人。

  12月17日(日军佔领第5天):中国平民3000余人被日军押至煤炭港下游江边集体射杀。在放生寺、慈幼院避难的400余中国难民被集体射杀。

  12月18日(日军佔领的第6天)夜,下关草鞋峡。日军将从南京城内逃出被拘囚於幕府山的的中国难民男女老幼共57418人,除少数已被饿死或打死,全部用铅丝捆扎,驱集到下关草鞋峡,用机枪密集扫射,并对倒卧血泊中尚能呻吟挣扎者以乱刀砍戮。事后将所有屍骸浇以煤油焚化,以毁屍灭迹。此次屠杀仅有伍长德一人被焚未死,得以逃生。大方巷难民区内日军射杀4000余人。

  杀人竞赛

  1937年12月13日《东京日日新闻》有关杀人竞赛的报道。1937年12月13日,《东京日日新闻》(即现在《每日新闻》)报道两名日本军官的「杀人竞赛」。日军第十六师团中岛部队两个少尉军官向井敏明和野田毅在其长官鼓励下,彼此相约「杀人竞赛」,商定在佔领南京时,谁先杀满100人为胜者。他们从句容杀到汤山,向井敏明杀了89人,野田毅杀了78人,因皆未满100,「竞赛」继续进行。12月10日中午,两人在紫金山下相遇,彼此军刀已砍缺了口。野田谓杀了105人,向井谓杀了106人。又因确定不了是谁先达到杀100人之数,决定这次比赛不分胜负,重新比赛谁杀满150名中国人。这些暴行都一直在报纸上图文并茂连载,被称为“皇军的英雄”。日本投降后,这两个战犯终以在作战期间,共同连续屠杀俘虏及非战中人员“实为人类蟊贼,文明公敌”的罪名在南京执行枪决。

  强奸

  日军侵佔南京期间强奸了成千上万的妇女,他们不分昼夜并在受害妇女的家人面前施行强暴。有些妇女被日军强奸了好几次,往往有妇女受不住日军的折磨而死。除此之外,日军还强迫乱伦行为。估计当时发生的强暴案可能超过20,000宗。

  远东军事法庭的调查

  远东国际法庭的判决书上写道:「在日军佔领后最初六个星期内,南京及其附近被屠杀的平民和俘虏,总数达20万以上。这种估计并不夸张,这由掩埋队及其他团体所埋屍体达十五万五千人的事实就可以证明了(由红十字会掩埋的是43071人,由崇善堂收埋的是112266人,这些数字是由这两个团体的负责人根据各该团体当时的记录和档案向远东法庭郑重提出的)。」

  法官之一的梅汝璈指出,对于南京大屠杀一案“花了差不多三个星期的工夫专事听取来自中国、亲历目睹的中外证人(人数在十名以上)的口头证言,及检查和被告律师双方的对质辩难,接受了一百件以上的书面证词和有关文件,并且鞫讯了松井石根本人”,“审理是特别严肃认真的”。松井石根听取了法庭宣布的罪状和科刑后,表示“南京事件,可耻之极”。

  法庭判决书中遂有郑重声明:「这个数字还没有将被日军所烧毁了的屍体,以及投入到长江或以其他方法处死的人们计算在内。」值得注意的是:远东国际法庭认定被杀害者为二十万人以上,未包括屍体被日军消灭了的被害者在内,而且这个数字仅是「在日军佔领后六个星期内」的。

  东京审判判处死刑的7名甲级战犯中,松井石根的唯一罪状是南京大屠杀。

  战后日方观点

  许多曾在当时南京附近作战的日籍老兵承认南京大屠杀的存在。日本左翼的日本社会党及左翼背景的日本教职员组合对南京大屠杀也多抱持承认大规模屠杀的立场。但因为日本政府始终否认该罪行与日本右翼民族主义教育下,不少未经历过侵华战争的日本人否认南京大屠杀的存在。但因为秉持观点与政治立场不同,不少日本人对南京大屠杀有不同的解读与看法,其中死伤人数的部分,有二十多万人、四万、数千、数百乃至於完全否定者等各种说法。

  对大屠杀的不同看法

  日本对南京大屠杀最大的争议在於,否认方认为日军进入南京城后城内人口仅二十万人,认为拉贝日记等可以佐证,而拉贝日记记载的事实是——在南京城中的国际安全区内就有20万平民,中国方面认定至少有三十万人罹难;埋葬总人数的问题,也是否认方对南京大屠杀进行质疑之处。另外,日军无条件投降之后到盟军接收之前,有充足的时间销毁随军文件和照片等直接罪证,造成日后追查的直接证据不足,无法一一求证其事实,也是遭到否认方质疑之处。日本否认方认为有不少的书面记录都显示,日军进入南京后南京并未成为空城,没有屠杀的迹象;另外国民党军队仓促撤退,使不少国民党军成为游击队在南京进行巷战,使得平民死伤的责任不清楚。另外日本否认方提出,有国民党军便衣兵假冒日军犯罪而遭国际安全委员会发现的事情。

  研究大屠杀事件的日本学者对死亡人数主要有几种看法:

  二十数万人以上: 主要支持者有笠原十九司(都留文科大学教授)、洞富雄 (早稲田大学教授)、藤原彰(一桥大学教授)、吉田裕(一桥大学教授)、吉见义明(中央大学教授)、井上久士(骏河台大学教授)、本多胜一(新闻记者)、小野贤二(化学工作者)、渡辺春巳。

  四万人左右 : 主要支持者有秦郁彦(日本大学教授?法学博士),另外冈村宁次在《冈村宁次阵中感想录》中认为约有4到5万人被屠杀,抢劫、强奸等“大有其人”。

  两万至数千 : 主要支持者有亩本正己(元防卫大学教授)、板仓由明(南京戦史编集委员?南京事件研究家)、原刚(防卫研究所调査员)。

  认为仅有数百人死亡,乃至於完全否定的态度: 主要支持者有铃木明(雑志记者)、田中正明 (拓殖大学讲师)、东中野修道(亜细亜大学教授)、冨泽繁信(日本「南京」学会理事)、阿罗健一(近现代史研究家)、胜冈寛次(明星大学戦后教育史研究)、杉山彻宗(明海大学教授)、渡部昇一(上智大学名誉教授)、大原康男(国学院大学教授)、竹本忠雄(筑波大学名誉教授)、西冈香织(军事史学会会员)、深田匠(日本歴史修正协议会会长)、前野彻、铃木正男。

  早稻田大学教授洞富雄,1973年7月发表《南京事件和史料批判》。《驳南京大屠杀是所谓“无稽之谈”》(日本现代史出版会),批判铃木和山本的否定史观。1967年写成《近代战史之谜》(人物往来社,后半部分为《南京事件》),1972年4月出版单行本《南京事件》(新人物往来社),1972年11月出版日中战争史资料《南京事件》(河出书房新社),1982年日本文部省在审定教科书时对教科书文字进行修改,他又立即于同年12月出版定本《南京大屠杀》进行驳斥。

  1984年教文社出版了松井石根的亲信秘书田中正明的《“南京大屠杀”之虚构》。

  战后的关于南京大屠杀的诉讼和政界事件

  1973年日本作家铃木明出版《南京大屠杀之虚幻》一书中首次指出“百人斩”为虚构。此后在日本,关於“百人斩”是否属实成为争论的话题。2005年,参与百人斩的两名日军军官向井敏明和野田毅的3名遗属向东京地方法院控告《东京日日新闻》於1937年11至12月间的报道失实,和《朝日新闻》於1971年出版的《中国之旅》一书中所提及关於两名军人的「百人斩」竞赛失实并损害其名誉,向该两出版社索偿3600万日元。东京地方法院审判长土肥章大於2005年8月23日裁定报道属实并非捏造,驳回赔偿请求。撰写《中国之旅》的前《朝日新闻》记者本多胜一在判决后指「「百人斩竞赛」真实性无容置疑,原告意图否定整个南京大屠杀以至对中国发动侵略。不过在诉讼过程中找到新的事实和资料,却进一步肯定这个史实。」[1]

  众议员石原慎太郎1990年在接受采访时说:“人们说日本人在那里(指南京)搞了一次大屠杀,但那不是真的。它是中国人编造的故事。这个故事破坏了日本的形象,它全是谎言”。

  索尼公司董事长盛田昭夫、自民党国会议员石原慎太郎等人撰写的《日本可以说“不”》、《日本还要说“不”》、《日本坚决说“不”》三本书中说道:“无端挑起战争的好战的日本人,制造南京大屠杀的残暴的日本人,这就是人们对日本人的两个误解,也是‘敲打日本’的两个根由,我们必须采取措施消除它。”

  战时日军大佐、二战后日本法务大臣永野茂门,1994年接受《每日新闻》采访时说:“(在日军进入南京后)不久,我就到了南京”,“我认为南京大屠杀及其他事情是编造的谎言”。

  战时特别高等警察课(特高课)课长、二战后法务大臣、文部大臣、日本国土厅首脑奥野诚亮1988年春否认南京大屠杀,“东京审判无效”,要从舆论上“再审东京审判”,遭到日本国内外舆论抨击,当年5月被迫辞职。

  1986年9月,日本文部大臣藤尾正行宣称南京暴行不是战争罪行而“仅仅是战争的一部分”,并说1910年日本对朝鲜的吞并是朝鲜心甘情愿地成为殖民地,发言当日被日本首相中曾根康弘免职。

  1977年,日本文部省在一个标准历史书中把二战中的日本给战争对方造成的伤亡、日本的战争暴行,和强行将中国及朝鲜犯人送往日本劳动营的内容删去,只留下了一些美国轰炸东京的照片、一幅广岛废墟的照片和一份日本战争死亡人数的统计表。

  1965年,日本历史学家家永三郎起诉日本教科书审查部门大幅删改掩饰日军在南京大屠杀和整个侵华战争中的暴行描写,遭到日本右翼势力的在家门口的围堵骚扰。1970年,东京地区法院法官杉本良吉裁决,教科书审查不得超出纠正事实及印刷错误的范围,家永胜诉,右翼极端分子向律师、法官和家永本人威胁要暗杀他们。

  条目来源:维基百科,自由的百科全书

2006年12月13日星期三

Sentinel SuperPro加密锁编程开发指南

  本文将简要介绍Sentinel SuperPro软件加密锁的编程开发知识,可供需要进行软件加密锁开发的软件开发商快速学习掌握这种类型的加密锁的编程开发,快速保护自己的软件不受侵害,防止加密狗被破解。本文资源来源于Sentinel SuperPro加密锁开发套件中的开发手册,仅供大家学习,文字版权属于Sentinel SuperPro所有。

  一、加密锁简介

  Sentinel SuperPro加密锁是一个硬件/软件保护系统,功能主要是保护软件,即防止未经允许非法使用开发商的软件。如未把正确的加密锁与计算机连接,则被保护的应用程序将无法实现全部功能。因此,只有合法用户才能使用开发商的产品。

  使用SuperPro软件保护锁完成软件保护,就是将软件开发商的未被保护的应用程序与SuperPro软件保护锁加密算法相绑定过程。最终实现绑定后的应用程序没有软件保护锁不能单独运行,只有插入软件开发商自己定义算法的软件保护锁,应用程序才能正常运行。当软件开发商的软件销售给最终用户后,软件即使被非法复制,而没有软件开发商提供的软件保护锁软件不能被使用。这样一来,从技术上防止盗版起到软件保护的作用。

  应用程序和Sentinel Superpro软件保护锁加密算法的绑定,是通过API函数调用来校验软件保护锁是否存在来实现的。API函数验证分由三部分组成:

  1)询问部分:开发商的应用程序通过API调用向软件保护锁的驱动程序发出的“查询串”, 驱动程序自动将“查询串”传给并口或USB口上的SuperPro软件保护锁上的算法单元。

  2)运算部分:加密锁通过内部的算法芯片计算“查询串”,并将运算结果“响应串”返回给驱动程序。

  3)程序鉴定、行动部分:驱动程序将“响应串”返回给应用程序中的API函数调用。应用程序对返回值—“响应串”进行比较判断,判断与预知运算结果是否相等,根据判断的结果进行相应的行动。

  如果返回值—“响应串”与预知运算结果相等,则说明保护应用程序的软件保护锁存在,使用程序的用户为合法用户。不相等则说明保护应用程序的软件保护锁不存在,用户为非法用户,应用程序将终止被使用。

  SentinelSuperPro 系统一个主要优点是可对一个加密锁编程,以提供多种驱动程序类型,包括固定响应和可变响应。这样,所创建的软件锁具有非常多的类型。

  例如,可用单元存储固定数据(如序列号、用户名称)或存储控制功能询问的代码。然后,可简单地读取这些数据,以检验是否附加了加密锁。也可使用存储的数据控制程序流程或应用程序的函数。数据字组可以定义为只读的(锁定)或可读/写的。

  每个加密锁的前 8 个单元为系统信息保留。除了某些限制外,可以任意方式使用其它 56 个单元。

  二、加密锁编程接口

  下面以VB语言为例,说明使用SuperPro软件保护锁时,有关API调用的数据结构、函数以及必要的步骤。

  1.基本信息

  DEVELOPER ID:用户ID为加密编号,为固定数字,没有它就不能使用加密锁。

  地址:SuperPro 的地址从00H到3FH,以十六进制数表示。

  访问权限:SuperPro的每一个存储单元可以单独设置成不同的操作权限。

  1- 可读/写数据;2- 只读数据;3- 计数器;4- 算法

  2.数据结构

  APIPACKET

  Type APIPACKET

    data(4096) As Byte

  End Type

  除了sproInitialize, 所有的函数都使用APIPACKET数据结构,该结构在调用sproFindFirstUnit 时被初始化,在调用sproFindNextUnit的时候会根据下一个加密锁的信息进行必要修改。当函数正常返回时,APIPACKET中存放必要的返回信息。

  SuperPro驱动程序使用该结构中的信息与加密锁进行通讯。开发者不要自行修改其中的数据。SuperPro驱动程序不负责分配APIPACKET数据单元,开发者在程序中必须分配APIPACKET结构变量,并且把指针传递给不同的函数。

  3.API函数

  ● RNBOsproFindFirstUnit()

  RNBOsproFindFirstUnit() 函数定位具有指定的开发者ID的SentinelSuperPro 加密锁。在调用 RNBOsproInitialize() 之后,使用其他调用之前,必须首先调用该函数。如果找到了加密锁,讯息包或UNITINFO 记录中将包含有效的数据,如果未找到加密锁,讯息包或 UNITINFO 记录将被标记为无效的。

  RNBOsproFindFirstUnit() 将搜索所有连接在并行端口上的所有级联单位。如果存在多个加密锁具有相同的开发者 ID,RNBOsproFindFirstUnit() 存取找到的第一个加密锁。在需要的时候,可以使用 RNBOsproFindNextUnit()查找具有相同开发者 ID 的其他加密锁。

  参数

  RNBOsproFindFirstUnit() 调用需要以下参数:

  ■由 Rainbow Technologies 或者其他发布者为您指定的开发者 ID。

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproFindNextUnit()

  RNBOsproFindNextUnit() 函数搜索具有给定开发者 ID 的下一个加密锁。

  开发者ID是由第一次调用的 RNBOsproFindFirstUnit() 指定的。(要找到具有不同的开发者ID的加密锁,需要再 次调用RNBOsproFindFirstUnit()。)

  如果 RNBOsproFindNextUnit() 成功了,讯息包或者 UNITINFO 记录将包含下一个加密锁的数据。如果未成功,讯息包或者 UNITINFO 记录将被标记为无效的。要重新对讯息包或 UNITINFO 记录初始化,需要再次使用 RNBOsproFindFirstUnit() 以及 RNBOsproFindNextUnit()。

  RNBOsproFindNextUnit() 将搜索连接到任何并行端口上的所有级联单位。如果同时连接了几个加密锁,应用程序可 以多次调用RNBOsproFindNextUnit()。

  参数

  RNBOsproFindNextUnit()函数需要一个参数:指向讯息包记录或者UNITINFO 结构的指针。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproFormatPacket()

  RNBOsproFormatPacket() 函数检验讯息包记录大小的有效性,并且初始化它的缺省值。该调用必须在调用其他 API 函数之前进行,否则将返回错误码 2 (INVALID PACKET)。

  参数

  RNBOsproFormatPacket() 需要下列参数:

  ■指向讯息包记录 (RBP_RNBOspro_APIPACKET) 的指针。

  ■PacketLen 的值是一个整数, 包含了讯息包的长度 (1028 个字节) 。

  返回值

  所有的函数都返回一个无符号的 16 位的值。值为 0 表示操作成功了,其他的值都表明发生了错误。如果发生了错误,函数将返回附录中列出的状态码之一。如果返回的状态码为非 0 的值,那么函数返回的其他数据将是无意义的。

  ● RNBOsproGetVersion()

  RNBOsproGetVersion() 函数返回与 SentinelSuperPro 驱动程序有关的信息,应用程序可以使用该信息。

  参数

  RNBOsproGetVersion() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■指向用来返回主版本号的位置的指针。

  ■指向用来返回次版本号的位置的指针。

  ■指向用来返回修订版本号的位置的指针。

  ■指向用来返回驱动程序类型标识符的位置的指针。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproInitialize()

  RNBOsproInitialize() 函数使驱动程序执行所需的初始化操作。在调用任何其他的 API 之前,应用程序必须首先调用 RNBOsproInitialize() 一次。

  参数

  RNBOsproInitialize() 函数不需要任何参数。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproOverwrite()

  RNBOsproOverwrite() 函数使应用程序能够改变字组的值与存取码,但是被限制的单元(0 到 7)除外。在使用该函数的时候,需要同时提供写密码和重写密码。

  注意重写密码的能力是相当强大的。它的使用应该仅限于工作室中,而不应该在正式发布的应用程序中出现。如果您的保护方案不需要在应用程序中使用重写密码,Rainbow 可以通过编程使您的每一个加密锁具有一个“随机重写密码”。每个加密锁中将包含不同的重写加密锁密码,并且不能在最终用户实际使用中进行修改。

  参数

  RNBOsproOverwrite() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■您的写密码。

  ■您的两个字组长的重写密码。

  ■需要写入的定址。

  ■赋予该字组的存取码:0 (可读/写数据)、1 (只读数据)、2 (计数器)、3 (算法/隐藏的)。

  ■希望写到该定址上的值。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproQuery()

  利用RNBOsproQuery() 函数,应用程序可以发送询问字串到SentinelSuperPro 加密锁。应用程序还可以指定用来对字串进行转换的算法描述符。

  加密锁将使用自己的算法和指定的算法描述符中储存的信息对输入字串进行转换。然后加密锁将转换之后的字串返回到应用程序。应用程序将返回的字串与希望得到的字串相比较,即可知道所需要的加密锁是否仍连接在并行端口上。

  在软件开发阶段,高级编程序的鉴定 API:询问选项可以用来确认加密锁的算法描述符对给定的输入字串进行转换的结果。

  参数

  RNBOsproQuery() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■询问字串中的字节个数(最大值 56)。

  ■指向包含询问字串的缓冲区的指针(偏移量在前,段定址在后)。

  ■指向用来供驱动程序返回结果字串的缓冲区的指针。该缓冲区需要足够大,以便容纳整个的结果字串。另外一种可取的办法是,将某个位置的指针传递给驱动程序,但驱动程序仅返回结果字串的最后 32 个位。

  ■询问中使用的算法描述符的首(较低的)字组的定址。该定址必须是偶数。一般来说,较长的询问字串能够提供更好的保护。推荐的询问字串长度至少为 8 个十六进制字符(32 个位)。驱动程序允许的最长的询问字串的长度为 56 个字节。如果发送的字串长度小于 32 位,驱动程序将在添加一种已知的模式之后再将其发送出去。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproRead()

  应用程序可以使用 RNBOsproRead() 函数读取非隐藏的记忆体字组的值。非隐藏的字组的存取码为 0 (可读/写数据)、1 (只读数据)或 2(计数器)。算法/隐藏的字组的存取码为 3,它是不能被读取的。如果试图读取一个隐藏的字组,驱动程序将返回拒绝存取。通过检查该状态即可判断字组是不是算法字组。RNBOsproRead() 返回字组的值,而不是其存取码。要获得字组的存取码,可以使用 RNBOsproExtendedRead()。

  参数

  RNBOsproRead() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■被读取的定址。

  ■一个指针,在调用成功的时候,该指针指向驱动程序返回的指定字组的内容。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproDecrement()

  RNBOsproDecrement() 函数将可读/写的数据字组(存取码为 0)或者计数器字组(存取码为 2)的值减量 1。在使用该函数时需要提供写密码。如果试图对被锁定或者隐藏的字组减量,驱动程序将返回拒绝存取。如果字组中的值已归零,驱动程序将返回已归零。对这两种状态码应用程序都需要进行检查。RNBOsproDecrement() 可以用来限制演示程序能够被执行的次数。首先将一个计数器与一个算法描述符联系起来,然后在每次程序执行的时候将计数器减一。当计数器为 0 时,算法将自动被去激活。以后的询问将返回无效的响应。

  参数

  RNBOsproDecrement() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■您的写密码。

  ■需要被减量的数据字组或计数器的定址。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproExtendedRead()

  RNBOsproExtendedRead() 函数读取非隐藏的记忆体字组的值和存取码。未隐藏的字组的存取码为 0 (可读/写数据)、(只读数据)或 2 (计数器)。算法/隐藏字组的存取码为 3,它们是不可读的。如果试图读取一个隐藏的字组,驱动程序返回拒绝存取。通过检查该状态,能够确认一个字组是否是算法字组。

  参数

  RNBOsproExtendedRead() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■要读取的定址。

  ■指向指定字组的内容的指针,在调用成功时由驱动程序返回内容。

  ■指向指定字组的存取码的指针,在调用成功时由驱动程序返回存取码。存取码可能是 0 (可读/写数据)、1 (只读数据)或 2 (计数器)。调用不可能返回存取码 3 (算法/隐藏的)。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  4.必要的初始化步骤

  在调用API函数进行加密工作以前,必须在应用程序中完成以下有关加密的初始化工作。

  分配APIPACKET数据结构

  调用RNBOsproFormatPacket初始化结构(仅Win32程序使用)

  调用RNBOsproInitialize函数

  调用RNBOsproFindFirstUnit函数找到软件保护锁

  以上工作完成以后,开发者可以根据各自的需要在程序的任何部分进行读写、查询等工作。所有函数没有必然的前后顺序。

  当利用查询响应对,调用RNBOSproQuery进行查询时,需要对查询响应对进行适当转换。

  三、备注

  如果想了解更多有关软件保护锁的信息,请参阅加密锁手册SentinelSuperPro Developer Guide。

  附录.API状态码返回数值

  0 success - 调用顺利地完成。

  1 invalid function code - 指定了一个无效功能码。对于有效的 API 功能码,请查看您所使用的语言的包含档案(例如:SUPERPRO.H )。如果使用 Rainbow 提供的接口程序与驱动程序通讯,通常不应该产生该错误。

  2 invalid packet - 在命令讯息包中检测到核对和错误,该错误表明内部不一致。因是讯息包记录或 UNITINFO 结构还没有被初始化,或者可能已被篡改了。如果使用Rainbow 提供的接口程序与驱动程序通讯,通常不应该产生该错误。

  3 unit not found - 或者 RNBOsproFindFirstUnit(),或者 RNBOsproFindNextUnit() 无法找到指定的 SentinelSuperPro 加密锁。请确信发送了正确的开发者 ID。如果该加密锁消失(也就是说,已?被取消),该错误是其它函数返回的。

  4 access denied - 企图对字组执行非法操作。例如,您可能试图从算法/隐藏字组中读取、向锁定的字组中写入,或者将不是计数器字组或者数据字组的字组减量。

  5 invalid memory address - 指定了无效的 SentinelSuperPro 记忆体定址。有效的定址是十进制的 0-63(十六进制的 0-3F)。对于许多操作,单元 0-7 是无效的。必须使用第一个(偶数)定址引用算法描述符。

  6 invalid access code - 指定了一个无效的存取码。存取码必须是 0(读/写数据)、1(只读数据)、2 (计数器)或者 3(算法/隐藏)。

  7 port is busy - 因为端口被占用,所以请求的操作不能完成。导致的原因可能是有大量的打印任务,或者该端口上的某个单位正在执行写操作并阻塞了该端口。请再试一次该函数。

  8 write not ready - 由于暂时缺少足够的能力,不能执行写入或者减量操作。请再试一次该操作。

  9 no port installed - 在工作站上没有发现并行端口。

  10 already zero - 试图将已?包含 0 的计数器字组或者数据字组减量。如果使用该计数器控制演示程序执行,当对应的算法描述符被起动密码重新激活之后,可能会出现这种情况。

  12 driver not installed - 没有安装或者没有检测到系统设备驱动程序。不可能与该单位通讯。请验证设备驱动程序的加载是否正确。

  13 communications error - 系统设备驱动程序与该单位通讯时碰到问题。请验证设备驱动程序的安装是否正确。

  18 version not supported - 当前的系统设备驱动程序过期。请更新驱动程序。

  19 OS environment not supported - 客户程序库不支持该操作系统或者环境。请与技术支持联系。

  20 query too long - 发送的询问字串超过 56 个字符。请发送较短的字串。

  30 driver is busy - 系统驱动程序繁忙。请再试一次该操作。

  31 port allocation failure - 通过操作系统的并行端口争用处理器来分配并行端口时失败。

  32 port release failure - 通过操作系统的并行端口争用处理器来释放先前分配的并行端口时失败。

  39 acquire port timeout - 在规定的超时时间内请求使用并行端口失败。

  42 signal not supported - 特定的机器不支持信号线。例如,企图在一台 NEC 9800 计算机上使用 ACK 线。

  57 init not called - 没有初始化加密锁。在调用产生该错误的函数之前,请先调用RNBOsproInitialize() 函数。

  58 driver type not supported - 对于定义的操作系统和客户程序库,不支持驱动程序的存取类型。该驱动程序的存取类型无论是直接 I/O,还是系统驱动程序。

  59 fail on driver comm - 客户程序库与 Rainbow 的系统驱动程序通讯失败。

  60 API status unavailable - 扩充的 API 状态函数不可用。

  255 invalid status - 返回的状态码无效。

2006年12月12日星期二

软加密网上激活解决方案

  前一段时间我介绍了不少软件加密技术软件加密锁厂商,使用软件加密锁的确可以方便的保护软件开发商的应用软件,但是需要多付出加密锁的成本,并且也未必能够保证永远不会出现加密锁被破解的情况。今天,我将介绍一种不需要加密锁的新产品技术:软加密产品激活技术,这种技术也能保护软件产品的技术,还可以节省大量的加密锁费用,能加快物流、渠道的供货速度,是一个成本低廉、功能强大且高效的软件保护技术。

  软加密产品激活技术是一种软件知识产权保护技术,用来识别软件产品是否经过合法授权。这一技术操作简单,轻松易行。可以节省硬件加密锁的成本,具有不错的加密效果,目前为世界上不少软件公司使用。下面我将详细介绍一下软加密网上激活的具体实现技术以及详细的实现方案。

  1.产品概述

  软加密网上激活系统是一种纯软件方式的许可证(License)管理系统,用来验证软件产品是否有合法的使用许可。它将软件开发商开发的产品绑定在特定的计算机“硬件指纹”上,即计算机的硬盘号、网卡号、主板信息等特征参数,只有经过授权的计算机可以运行指定的产品。

  加密系统可以提供多种计算机指纹,既可结合使用,也可单独使用。如果主锁定指纹失效,只要后备锁定指纹有效,软件仍能运行。根据软件开发商软件的特点和最终用户的需要,开发商可以定义多种许可证类型,建立无物流的数字化销售服务渠道。

  软件激活平台(网上注册服务)提供基于许可证的保护方式。灵活的许可证管理机制与基于互联网的软件激活平台将软件保护与销售服务模式紧密结合。用户购买软件后可以通过Internet获得许可证授权,激活产品,整个过程快捷、方便、简单并且不需要任何费用。

  2.产品特点

  目前几乎所有高强度的软件加密都采用了硬件加密锁,但是在大大提高软件加密强度的同时,加密锁的引入也提高了软件的成本。因此这种加密技术通常只有在售价较高的软件里得到应用,对于低价格的小型软件,可以考虑使用软件加密技术来节约成本,减低故障率,并保证相应的加密性能,达到高可靠性、低成本、低故障率,使得加密的有效性,产品的兼容性和稳定性得到保障。

  3.应用方案

  3.1.应用流程

  在软件发行之前,首先由加密软件进行特定的处理。软件安装完后,软件与本机的某些特征建立关联,比如,软件可以以一定的方式采集硬件的指纹信息,产生一个特定字符串。用户软件在正式使用前需要激活,通常是在付款后将字符串发送回软件厂商,软件厂商确认合法用户的身份后,根据用户字符串产生一个钥匙串并发送给用户。用户使用钥匙串激活软件,开始使用。使用这种方式,软件厂商可以向用户提供试用版软件,用户在试用后如果认为合适,可以购买许可证来取消时间或功能的限制。当用户数量增加时,只要增加许可证的数量就可以了。在这种方式下,加密软件不仅可以使用软件的方式实现软件的保护,也可以使用硬件方式作为激活条件,这样的安全强度更高。这是由软件厂商来控制和选择的。

  软件安装的时候,自动读取计算机中可以用于加密的指纹数据,然后根据特殊的加密算法,计算出该计算机特有的唯一锁定码。此锁定码以字符串的形式提供。为了控制和跟踪特定软件的销售使用情况,安装的时候,用户必须输入开发商定义的,与软件一一对应的产品序列号。

  在因特网上通过软件激活平台也可以提供用户在线注册。注册的时候,用户除了提供名称、地址等联系方法外,还要提供锁定码和产品序列号。注册过程中将要使用一个专家库,用来审核和记录网络授权以及付款信息。例如,可以审核产品序列号是否有效、同一个序列号以前是否使用过、以前使用过的序列号是否正在被安装到另一台计算机(因为标识号可以区分不同的计算机)、是否允许同一个序列号安装到不同的计算机上。通过以上功能,可以控制一个软件的安装次数,并且可以根据版权要求允许或者禁止将同一个软件安装到不同的计算机中。最后,将有关用户的信息记录到数据库中,以便在将来的安装或销售中使用。

  接下来激活平台生成了软件的激活码。生成激活码的时候,可以设置另外一个参数设置库。因为计算机中可以使用的软硬件参数很多,但是由于软件的特点和用户的实际情况,并不是所有的参数都可以使用。根据实际情况选择便于使用的参数,并且根据实际变化进行必要的修改。此外,还可以设置对软件执行的控制,例如:生成可以永久使用的正式版本,也可以生成在时间或使用次数上加以限制的演示版本。激活码生成器首先将锁定码进行解析,得到用户计算机中各项指纹参数的具体值,然后根据参数设置库的要求,通过加密算法计算生成激活码。因此,激活码是为特定计算机生成的,包含采用哪些指纹参数进行加密的开发商设置,同时包含软件执行的控制信息。即安装码反映开发商的加密思路。

  通过因特网将激活码传递给最终用户,安装完成以后在用户端生成一个密钥文件。密钥文件实质上是激活密码的另一种形式,它保存在用户的硬盘中,以密文形式存在,包含软件锁定信息,使用的指纹选项和软件的执行控制。安装以后的软件在每次执行的时候检查密钥文件是否存在,是否被篡改,同时得到软件执行的控制信息。

  3.2.技术细节

  这种方案可以应用于软件的批量生产,批量生产需要多个部门和环节进行配合,开发部提供加密算法和制作的相关程序,并将自动注册程序安装到注册服务器上,生产部负责批量生产CDKEY,营销部门则将生产出来的CDKEY进行销售,客户拿到CDKEY后即可登录网上注册服务器将软件注册后使用。整个和加密相关的激活流程如下:

  生产部生产出一套软件P,就运行由系统程序产生一个随机的CDKEY——随机数以服务器计算机自开机以来运行时间的毫秒数作为种子,计算一串随机数——一共 16 个字节。将此CDKEY和软件相关信息保存在商务系统的数据库中。

  接下来,程序用CDKEY直接作为密钥,用简单异或加密算法加密软件中的大部分代码(和数据)95%以上。

  然后,直接用户或代理商收到软件后,可以上网注册。运行软件中的注册功能,程序将自动连接到加密注册服务器的加密服务端口,加密注册服务器上则运行加密认证服务。

  首先,程序提示用户输入CDKEY号码,如果通过,继续,否则认为非法用户,在这时可做一些处理(如再验证一次),如果5次验证错误,则判断对方为恶意穷举攻击,系统屏蔽对方IP地址30分钟,直到以后SN号码验证通过为止。

  然后,加密注册程序再取得本地主机的硬件信息,加密该硬件信息并作加密处理后,将它发送给加密注册服务器。

  注册服务器从数据库中查找这个CDKEY,如果找到,并且这个序列号的拷贝已经注册,并且它收到的硬件信息和以前注册的硬件信息相同——相同的软件拷贝可以在一台被授权的计算机上多次安装/注册——或者找到了CDKEY,但该CDKEY还未注册,就将随CDKEY一起发来的硬件信息存入数据库,待以后再验证这台计算机。

  接下来用安全算法计算CDKEY和用户机器信息得到“激活码”,把“激活码”作为解密密码发给用户,用户端程序用服务器发来的解密密码将本地软件注册,完成了一次注册过程。

  如果检测到的硬件信息和原先硬件信息不同,则检测此用户软件的许可证数目,如不够,提示客户端,用户许可证数目不够,必需原先安装过软件的机器上网注销许可证才可以。或者采用限制更新次数的方法,同一用户一个月最多更新一次。

  网上注册方法和手动注册可以并行,手动注册的程序由相关人员根据用户发来的SN和硬件序列号产生,程序进行的处理和网上注册相同。产生的CDKEY则通过邮件或其他方式发送给用户。

  主要优点:减少用户和总部人员注册的工作量,实现自动、安全和方便的注册。

  4.系统实现方案

  4.1.服务器端

  服务器端使用TCP/IP协议实现注册服务。

  认证服务器应实现以下功能:

  (1)黑名单(口令失效)管理。当用户通过书面形式在营业部办理了口令遗失手续时,认证服务器应在第一时间将该用户冻结(黑名单登记),并对在该冻结期使用该用户身份的委托进行跟踪记录;当收到停止冻结的指令时,解除对该用户的冻结(黑名单撤销)。

  (2)安全策略管理。认证服务为每个用户创建各自的安全策略,设定其安全等级和对各个站点内容的访问权限。用户只有在获取了相应的安全策略后才能进入系统,并根据安全策略中指定的访问权限对站点进行访问。

  (3)口令维护。口令维护主要包括口令转换和口令缓存。口令转换将通过SSL传递给认证服务器的口令格式转换为营业部系统中的口令格式,并提交给相应的营业部对口令进行验证。由于需要将口令提交到各个营业部进行验证,使口令验证的响应时间会变得比较长,因此建议采用口令缓存机制来提高口令验证的响应速度。

  (4)跟踪和示警。对系统中一些有关安全方面的异常情况进行跟踪,并向安全管理员发出警告信息,如某用户频繁输错口令等。

  当用户在线注册时,系统将记录用户的登陆信息和用户本地的硬件资源,然后通过这些资源生成用户的注册码,并将注册码加密后传给用户,用户收到注册码后,客户端程序自动将此注册码在本地注册。此注册码和用户机器硬件绑定在一起,不能在其他机器上使用。

  服务器端程序除了传输数据是加密的外,还对非法穷举或其他测试进行自动处理,一检测到异常数据便会切断此用户连接半小时。另外还采用限制更新次数的方法,同一用户一个月最多更新一次。更新的时候检测用户是否在同一台机器更新,更新记录写于数据库中提供分析。

  4.2.客户端

  客户端注册过程,需要先提供一个经过编码后的产品序列号,然后连接到远地注册服务器,服务器接收到注册请求后检查序列号是否存在物流系统数据库中,如存在,则提取客户机器的硬件资源,并生成相应注册码返还客户,客户端程序用此注册码自动注册。

  5.应用效益

  5.1.减少成本:软加密有着比硬件加密狗更低的成本,在节约资金方面有很大的优势。

  5.2.可靠性、兼容性得到提高:传统的并口在一般计算机上只有一个,打印机、扫描仪、活动光驱等外设都会争抢这个资源,软加密技术彻底解决了并口加密狗(加密锁)碰到的并口资源冲突的兼容性问题,成为今后加密产品的一个很好的方向。

  5.3.完善客户资料管理:客户信息数据库的建立有利于收集和管理现有的最终客户的数据资料。

  保护知识产权,抵制盗版软件,是目前中国软件业所面临的迫切问题。以上软加密网上激活解决方案是一种方便快捷的加密解决方案,中国国内的软件商可以依照自身企业的特点参考使用。如果软件开发商对这些技术还有什么不明白的地方,可以发邮件来咨询我。

2006年12月10日星期日

百度尝试竞价广告新模式

  有一个姓朱的读者发邮件告诉我,说他在百度中搜索某些关键字的时候,意外的发现了百度的一个竞价广告新模式:“类似Google的赞助商链接”,于是推测这可能是百度在悄悄测试新的广告模式。

  这个现象我在不久前也发现过,因此今天我就重点讨论一下百度的竞价广告的问题。

  竞价排名是百度模仿Google AdWords做的一种按效果付费的网络推广方式,是百度的主要盈利方式,同时,竞价排名也使得百度备受各方批评和指责。百度竞价排名的主要问题是,百度不仅仅在搜索结果的右侧有赞助商链接,在正常搜索结果的左侧链接也有赞助商广告,这些广告链接和真实搜索结果混杂在一起,很难区分,如果一个广告商出的钱足够多,那么其广告链接会排在搜索结果的第一名。在相当长的一段时间里,在百度搜索一些热门关键字,通常要翻到第七八页才能得到正常的搜索结果,而直到今年三月份的时候,百度才改变了竞价广告的展示策略,最多只显示一页广告。可以说这是百度的一大进步,但是还不够,因为第一页往往还是点击率最高的一页,翻到后面几页搜索的用户毕竟占少数。

百度的竞价广告

  百度不将赞助商链接明确标识,显然是为了获得更多的广告收入,但是这样的处理,会使得用户的搜索体验非常糟糕,搜到的内容往往不是用户最想要得到的内容。对于广告商而言,也因为非常高的“误点率”而多花了不少冤枉钱。百度的这种广告方式,看似对自己最有利,其实百度应该看到,竞价广告的商业模式是由搜索引擎、网民、广告商三方构成,作为一个良性的模式,应该实现搜索引擎、网民与广告商的三方共赢,这里的关键就是公平、公正、公开。

  广告商希望通过最低的成本获得最大的回报,这就需要降低广告的误点率,使得每一个点击广告的用户都是自己的“真实潜在用户”,这种用户对广告发布者来说是价值最高的,因为搜索页面的“迷惑”而误点进来的用户,往往是价值最低的用户。

  用户希望在最短的时间内得到最有价值的信息,大多数用户喜欢看的是有价值的信息,很少有人愿意看无价值的广告,时间是宝贵的,浪费别人的时间无异于谋财害命。将赞助商广告和真实搜索结果进行明确的区分,更易于用户选择出最有价值的信息,增加用户的搜索体验。

  因此可以看到,明确标识“竞价广告”对于用户和广告商来说都是都是有利的,那么对于百度而言是否就不利呢?我看也未必,这么做之后,百度的广告收入的确在短时间内可能会出现萎缩,但是百度为此可以营造出自身“公平、公正、公开”的品牌价值,品牌价值大幅提高,可以让用户更乐意相信广告商发布的内容,提高广告潜在的价值,这样,百度可以通过提高广告单次点击的价格来逐步增加收入。

  百度显然也看到了这一点,并悄悄进行了一些探索。根据我们对一些关键字搜索内容的观察,百度的确在谨慎地尝试这种新的广告模式,在一些较为冷僻的关键字中使用“赞助商链接”这样的广告明确标识,使得用户能够明显分辨出正确的结果。相信百度在小心翼翼地尝试之后,如果感觉效果理想,就会全面实施这种新的广告模式。

  最后,我强烈建议百度在竞价广告的审批上严格把关,目前在百度上搜索“加密狗破解”,竟然有好几个破解网站堂而皇之地做起了竞价广告,希望百度不要为了赚这些黑心钱,而和那些违法犯罪分子干起坐地分赃的勾当。在打击盗版的产业链这种大是大非的问题上,百度应该做出自己正确的表率,而不是目前这样的态度。

百度的竞价广告