第三、 软件如何推向海外
你的软件已经在国内推广了,还要不要走向海外?回答是肯定的。由于国内存在对盗版解密等活动打击不力的问题,你辛辛苦苦工作出来的劳动成果,给别人破解后可能全部付诸东流。所以在国内防止软件被破解是一个重大的课题,对付破解的问题我留到下一点再仔细讲。而在国外,由于对于盗版以及破解打击的力度较大,另外用户的正版意识普遍比国内要高,所以付钱注册购买的人也相对较多。所以你的软件在国外推广是很有必要的。就拿我来说,现在软件收入的大部分就是来自海外用户。
在海外推广软件的第一步也与国内相类似,也要把软件提交到大型的软件下载网站。国外的大型下载网站主要有两个:一个是www.download.com ,另一个是 www.tucows.com 。与国内软件站不同的是,在download.com 上发布软件是要收费的,每提交一次要收79美金,UPDATE一次也要收79美金。如果你真想把软件推向海外的话,这笔钱是不能省的。因为 download.com 实在是太热了,名符其实是全球第一的软件下载站,如果不在这里发布,你会损失一大半的软件用户。另一个软件下载网站 tucows.com 虽然号称能免费发布,其实你如果真这样做的话,你会大失所望的。我有个软件,一月份就向 tucows.com 提交了,可是到六月份还没有发布,进入作者管理界面一查,是在 8340个待审查的软件中排第 1367 位,可能一两年后才有可能发布。后来干脆花了 59美元“插队费”,结果没过两天就发布了。
另外,在国外一般都是找一家代理公司帮你收钱,每月定期寄支票给你。代理行业在国外已经是一个很成熟的行业了,不用担心代理会不给钱你。比较大一点的代理有:www.RegNow.com 设施最完备的代理,需要开户费。www.Qwerks.com 免费开户,据说信誉极好。还有www.Shareit.com 也是一家不错的软件代理公司。 还有www.RegSoft.com 不过据说反映一般。
除了把软件发布到这些下载或代理网站之外,你自己也要相应有一个英文网站。如果你的英文不是特别好的话,奉劝你找一个英语特别棒的朋友或干脆花钱请专业的英语专家翻译一遍再发布你的网站,否则你的网站不但起不到推广作用,还会给国外用户留下很差的印象。
要想软件推向海外,除了以上介绍的方法之外,重视国外用户的反馈信息以及搞好服务也是特别重要的。我有个软件发布在 download.com 后,大约过了一个月看到上面有一个评论,把我的软件评价为最差,并且加了一大堆评语:说他虽然是个捷克人,英语并不是他的母语,却也发现了我软件中的英语是terrible English ,充满了错拼的单词,不存在的单词等;另外软件打开以后,界面没有操作提示,根本不知怎么使用,功能也不完善;在1024 x 768的分辨率下无法满屏显示等。总之把我的软件贬得一无是处,用他的话来说是: Terrible, just terrible。
一开始,我也觉得很灰心丧气,但后来我仔细一想,何不趁此改正Bug,并升级软件呢。由于在download.com中找不到评价者的联系方式,我就在软件的注册者信息中找到他的Email地址,把我改正过后的软件电邮给他,并诚恳地请他继续指正我的错误。果然不久他就回复了我的EMAIL,在邮件中他一条一条地指出了我的其他错误。我借此机会进一步更正错误并把软件升级到了2.0 ,使我的软件上了一个大台阶。总之,重视用户对你软件的评价及批评,积极面对用户的意见,这样即使是坏事也能变成好事。
另外在国外,是会遇到别人购买你的软件后觉得不满意而要求退款的。PayPal以及其他的付款方式都有几十天内不满意可以要求退款的条文。对于要求退款的用户,他如果坚持要退是一定可以退的。所以一般都是根据用户要求直接就退给他,并告诉他Keep my software as a gift,反正他已拿到注册码了,你做什么都没用,不如来个顺水人情。即使他退完款后又来信要求你提供技术服务,你也要尽可能帮助他。能做到这点你的服务才能算真正到家了。
第四、 如何应对软件的破解
在国内推广软件,你要面对的最大问题莫过于软件被破解了。很多软件作者反映说,原来软件在被破解前交费注册的人还不少,但被破解后收入就直线下降,连成本都收不回来。您想,有了免费的东西人们还交那个钱干什么?
在这里,我借鉴了一个软件作者的防破解经验:发行1.0版时2.0版已经写的差不多的。发行1.0版时要把1.0版的防破解或者注册算法写的简单些等着别人去破解。一但出现1.0的破解,等待几周,这几周的时间足以使网上1.0的破解版遍天下。然后,分析破解过程更改2.0版算法(层层加密,复杂再复杂),虽无法根除破解但可以浪费破解者的时间和耐力!一般情况下,在网上一搜你的软件已经有破解版了(1.0的)新的破解者很少会再去破解,何况2.0版本更复杂些。我的一个软件用了此法,推出一月后被破解组织破解,公开破解过程及注册算法,并做成破解教程。其实破解从某种意义上说是帮我宣传了软件。我在一个月后推出早已经写好的新版本,还注册成了“特别版”以迷惑想要破解版的人。使用上述方法后至少在我更新了几次软件后的今天仍没出现破解。但在网上搜破解版、特别版、注册版到处都是,可没一个是真的。其实一些破解高手只是想试探自己的能力,破解一个软件后,一般会把目标定在下一个软件上。不过如果你的软件成为人手必备的工具,此法怕是不灵了。
另外,从技术上讲也有一些防破解的方法。假设你的注册部分有300行,你可以分成30个inline函数调用(一定要inline),func1(),func2()... func30(). 将他们随意放到程序的各个部分,一定不能放在一起。不要用Memcpy等常用系统调用拷贝注册码,尽可能自己写,像Memcpy很好写,性能差点无所谓。经过编译后inline函数展开,注册部分和其他代码混在一起,他要写出注册机就很困难,因为要向在几十万甚至上百万汇编代码里找出有用的注册部分那简直就像是在大海里捞针。另外注册码也不要放在一起,假设你的注册码是12位,千万不要用一个12位的数组放注册码,你可以在程序的不同位置定义12个全局字符变量,每个放一位,这样注册码在内存就不连续了。最好再加密处理一下(简单的字符异或就可以),验证时再解密。只要破解者找不到你验证结束的地方,暴力和Loader破解也没有可能。很重要的一点是不要用连续内存保存验证用到的变量,尽量将用到的验证临时变量分散定义在程序的不同处,再在验证中,不断转移一些值到其他变量中,对付暴力和Loader会比较有效。没有必要用复杂的加密算法,更容易成为追踪的目标。只要你将注册部分隐藏的足够好,也没有漏洞,你花1天写的加密算法,破解者可能会花100-1000倍的时间破解。大部分人都会放弃。你将注册做在一起,就像将你的财宝放在现代保险箱里,虽然非常坚固难以解密,对于开锁高手两分钟就打开了。对于一些比较专业的破解者采用上面的方法也是很有效的但是,还是要避免一些低级失误例如:不要在内存中直接出现注册码和明显的注册码比较部分不要给用户太多的有关注册验证的信息,也不要接收到注册码后立刻就进行比较。在软件的不同功能处实现验证时的好处还有就是不会立刻执行到验证代码注册码,可以分多次验证,也可以分成几部分验证,还可以分成几层验证验证时,可以尽量多执行一些无用的操作,加上一些象递归之类难于调试追踪的代码,但在其中要穿插实现软件功能的代码,否则人家直接就跳了过去。反正就是越不引人注意越好,亦即越乱越好。
其实要想彻底防止破解也是不现实的,除了研究一下破解方法,在发布前加壳外,并采用以上所说的方法外,不断升级程序也是比较好的方法。
总之,推广软件对于搞惯了技术的软件作者来说一开始会走一些弯路,但只要不断学习成功者的经验,不断吸取自己失败的教训,你也会成功的。最后,祝大家个个都成为共享高手。