浅谈Windows中软件系统外包及踩坑指南
本文纯属理论研讨,很早之前就想写一篇与此相关的文章。
windows系统的特性就是可视化图形界面,让我们以为一切可见、一切都在掌控中,然而系统的不稳定性也比较多。本文仅从软件系统外包方面粗浅地发表下个人看法。在windows软件系统决定外包前至少需要了解下面一些知识。
一、软件注册保护
1、使用硬件加密狗保护/注册软件。一旦决定使用加密狗,需要外包商交付时提供加密狗全套教程及源码(加密狗开发文档、加密狗调用demo源码、加密狗在软件系统中的所有调用点位及说明文档),禁止使用假狗或软件系统与加密狗无实际数据交互加解密行为。原则上不使用网络通信版加密狗(如若使用交付时需另行咨询专业人士)。
2、使用硬件码加密算法保护/注册软件。使用硬件码(硬盘号、网卡号、加密狗id号等经相关算法而得出的硬件sn号码),需要交付实现的具体算法,另外由sn号计算得出注册码key的算法亦需要交付,并交付注册机一个。
3、联网验证保护/注册软件。原则上不使用联网验证,如使用联网验证,需将单独将软件系统中全部需要联网验证的埋点及联网涉及的服务器运算函数、算法、验证方式及其他说明文档交付。
二、软件防破解保护(防爆破)
1、试用版与专业版单独发版。必须提供试用版与专业版两套代码,试用版软件源码中必须做到代码功能阉割,适用版代码中禁止出现专业版代码。
2、加壳。软件模块各dll、exe等可执行文件必须选用适当的加壳软件,加壳软件可基于反调试器、反虚拟机、垃圾指令、代码虚拟化、函数混淆、花指令等方面进行评估。
3、文件校验。检测关键文件校验信息防止被篡改。
4、暗桩。软件验证需确保在软件系统中存在的多点性、随机性、伪装性。在文件校验及验证检测中,如发现被破解禁止立即返回错误信息。暗桩触发后的操作需要经需求方谨慎评估(数据库删除、硬盘逻辑锁、加密业务数据……),原则上禁止破坏与使用本软件系统自身无关的数据或文件。另外需在软件安装过程中提示客户非法使用软件可能导致的严重后果,从而达到威慑。
三、软件/功能完整性
1、验收外包软件前,由外包商模拟好交付方式后双方再进行交付。在软件各功能测试无误后,由外包商在我方提供的纯净版windows系统进行部署并测试无误。对源码要求较高的,可要求外包商在我方纯净系统上搭建开发环境后编译程序并运行(如果涉及到调用其他dll或exe等模块的内容,需要提供这些模块的源码,禁止使用来源不明的模块)。
2、软件系统使用到第三方sdk的, 必须单独提供一份sdk源码及说明文件,禁止单纯提供第三方sdk的url网址,务必将第三方sdk的在线说明文档做本地化保存。如果第三方sdk提供非本系统软件开发环境的sdk源码也需一并保存。
3、原则上禁止使用网络api调用。软件系统中是否使用第三方网络api(如ocr识别、人脸验证、风控平台等)调用的必须充分评估,一旦使用,必须交付第三方服务商的售后联系方式(官方可查)以及详细的开发说明文档。
4、除约定功能外,软件系统禁止一切性质发起的主动internet访问。
5、软件开发中的其他文档(包括但不限于数据结构、业务逻辑处理流程图、详细且有效的源码注释)
四、软件日志完整性
1、操作日志。软件必须确保有详尽的操作日志记录功能(具体有双方协定,包括但不限于记录登入、登出、事件、人员、ip、变更记录)
2、网络日志。如本地系统需要搭建网络服务器以供局域网/web进行接口访问的。必须开启IIS/Apache/Nginx等web服务器的日志功能,针对接口可视情况记录具体的get/post参数。如果访问web接口的是固定IP地址,可将需授权的局域网ip地址或外部服务器ip地址设置为白名单,禁止其他非授权ip访问或调用接口。
五、软件的依赖性、 独立性、版权
1、部分内容已包含在第三条中。
2、软件系统运行所依赖的 .net、vc、direct等运行环境要求必须写入部署文档,并附带一份环境包。
3、软件系统如涉及到可本地化部署付费SDK的,除提供详尽的sdk说明外需交付从官网可核验的售后人员,SDK的使用期限、并发数、终端数也需注意。
4、软件系统中涉及到定制硬件或第三方硬件的(如扫码枪、pos机、称重台、读卡器、人脸支付、打印机),需要另行再提供硬件厂商提供的开发文档及demo代码(涉及硬件通信的附带通信协议详细文档)。
5、软件开发中禁止使用破解版、时间限制版、非商业授权版软件依赖包/SDK/素材/字体等。
六、外包软件源码交付
源码交付,因windows系统的特殊性,建议准备两套纯净系统。一套用于交付时现场安装开发环境并导入全部系统软件代码,如果编译后需要其他dll或exe或第三方调用的需要进行交付备注,所有外部调用文件记录下md5值,外包开发商需确保这些外部调用文件是官方原版或由官方sdk可以复现的版本。
另一套系统用于部署并作为正式使用环境(请确保交付前已经在外包商的测试服务器上功能验收及测试完毕,建议至少将20%的金额作为源码交付后的尾款,另外再将5%~10%的金额作为后期维护尾款。),使用过程中提供的bug修复或功能更新涉及到的更新文件亦需提供改文件对应之源码。
七、软件外包纠纷中的坑
1、团队坑。外包团队虚报规模,公司无办公地点或在小区内,团队小无法保证人员稳定性;项目成员不齐备或经验欠缺或身兼数职;公司软著及成功项目经验少(典型项目真实性存疑);所提供过往项目的报价单、合同、需求书、原型文件的规范性、专业性不符合业内平均水平。
2、需求坑。甲方不断提需求、提要求、提意见,事先又没将功能需求点详尽列出来,最终导致项目延期或烂尾。乙方收钱不作为,任何改动无论是分页显示数量还是文案变动都要求走变动流程审批加钱。甲方/乙方沟通效率低下,甲方前期不注意需求沟通一心想要拿取项目动工费,没有项目跟进系统,没有开发时间排期,延误工时互相推诿。
3、审美坑。甲方不断对外观、颜色、按钮、字体、窗口、布局提出意见,导致大量时间精力用于与业务功能关系不大的美化上。
4、版权坑。乙方开发中使用了未经授权的内容;乙方自己注册了甲方系统的版权或软件著作权;乙方擅自将甲方产品二次转卖。
5、违约坑。外包无力继续开发项目烂尾;甲方解散项目佣金难付;外包收受启动款项后跑路;甲方拒付/赖尾款。
6、优化坑。 开发中数据库代码随便写,数据库主键随意设置,后期收费优化速度。代码中使用不必要的sleep延时/loading框。
7、翻脸坑。交付甲方后,外包商迟迟要不到钱,系统没有接到“最后一次良心优化”的指令,判定为合作不愉快,系统执行宕机或其他操作。
基于互联网精神,在注明出处的前提下本站文章可自由转载!
本文链接:https://ranjuan.cn/windows-software-develop/
微信赞赏支付宝赞赏
发表评论