前言
小时候玩魂斗罗的时候,相信大家都知道“上上下下左左右右ABAB”,这个三十条命的秘笈让游戏难度下降了好几个档次,也终于不用跟2P小伙伴因为借命而掐架了,哈哈。 为什么魂斗罗要设计这么一个秘笈呢?坊间传闻,这是在游戏开发时期方便测试、debug而设计的一个三十条命的秘笈,输入特定指令让游戏进入特定的环境或者状态方便开发人员调试。而日后发布的时候没有删除导致了这么一个秘笈一直遗留下来。同样很多游戏都有这样的秘笈,比如GTA,魔兽3等等。
长大后作为程序员,我慢慢理解了这样的“后门”设计并且也深深感受到很多时候真的也需要这样方便的调试途径。比如在手机上监控性能使用数据,检查网络情况,呼出日志等一系列debug工具,避免了遇到问题需要插线跑编译的尴尬情景,大大提高了debug的效率。
设置一个秘笈
在App中埋入一个秘笈来打开debug模式,需要设计一个秘笈,设计这样的规则需要注意几个问题。
1,这个秘笈需要在特定的情况下才能触发。就像魂斗罗秘笈一样,这个秘笈要有一定的复杂度,经过一长串的操作才能够被触发,倘若这个秘笈太随意的就被触发,一是用户容易误操作使用秘笈,产生一系列无法受控制的bug,引起用户的疑惑,二是容易被友商窥探信息。
2,这个秘笈需要稳定触发。秘笈不能随便的就被人触发,在一定条件下触发,并且还需要稳定触发。设计时虽然需要考虑复杂度的问题,但是要避免过犹不及的情况。如将某个时间点来当作触发条件,这样的机制确实能够过滤掉普通用户避免误触发,但同时也给自己触发的时候增加了难度,降低效率。
3、这个秘笈需要一定的安全性。在App进入debug模式时往往会有高级的权限,或者某些组件会进入可修改状态,容易被人加以利用产生恶性的bug。一般的思路是通过限制核心模块的权限,限制debug权限,或者设置模块单独密码来提高安全性。
我的思路
考虑到秘笈需要尽可能避开用户,避免被误触发。我将触发页面设置在了服务协议页面。这个页面在个人中心,登录页面都存在,第一是方便我们进入触发的页面,第二是这个页面是用户停留时间最短,甚至大部分用户都不会进入没有兴趣进入的页面,降低用户误触的情况。
然后,需要设置触发的条件。在这里大家可以参考Android手机触发debug模式,连续点按某个button或者区域10次。
接下来,为了提升安全性,我在触发之后,进入权限验证页面,在此页面需要输入密码才能打开debug模式。为了进一步提高安全性,我借鉴了Google的登录令牌,使用的是TOTP密码。
OTP(One Time Password)
一次性密码(英语:One Time Password,简称OTP),又称动态密码或单次有效密码,是指计算机系统或其他数字设备上只能使用一次的密码,有效期为只有一次登录会话或交易。OTP 避免了一些与传统基于(静态)密码认证相关系的缺点;
OTP其实在日常生活中十分常见,比如银行的U盾,战网安全令,网易将军令,等等此类动态密码,都属于OTP的范围。 另外OTP的算法是开源的,详见Google-Authenticator。
利用OTP算法,编写一个独立的密码生成器App,并且严格控制App的权限,如:只在公司内网,并且需要密码才能够安装下载。再通过此App生成的动态秘笈来来打开debug模式。
总结
debug秘笈极大方便了我们日常的调试测试工作。但使用的同时也应该考虑安全性,避免用户误触发,甚至恶意触发。