码迷,mamicode.com
首页 > 其他好文 > 详细

编写安全的PC端代码

时间:2014-12-30 00:36:27      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

发布到外网的代码,不要打log

首先得承认,在可能出问题的地方加上log是一个好习惯。但是log很容易暴露一些关键信息,比如代码的处理流程。就算是我们的log输出要有开关才能在Debugview中打印,也是不安全的。因为打log的函数在PE文件中可以被看到,会减少黑客逆向的成本。

所以,在代码中应该用一个宏去控制log的输出,debug版本才把打log的函数编译,release版本就不要带上log了。

敏感数据要加密保存

这个很容易理解,数据如果未经加密,长期保存在内存中,是很危险的。应该选用一些加密算法,只在内存中保存加密后的串,待用到时,再解密。

加密算法的key动态变化

就算数据加密了,黑客也是会通过不断的改变一些值,然后观察内存的变化去分析其中的规律。

举个例子说吧,比如一个玩家身上的金币在一个int存放,这个int是经过加密的。玩家身上有1000金币时,加密串为0XABCD,10金币的加密串为0XEFGH。那么玩家可以不断的从钱庄中存和取金币,然后反复在内存中查看,经过几轮筛选后,玩家就能定位到表示身上金币的int类型加密串的内存位置了!

为了解决这个问题,我们可以在每次读取金币的值时,更换一下加密的key,这样,当玩家把900金币存放到钱庄然后再取出来时,这时候加密的串不再是0XABCD了,这必定会增加玩家的破解成本!

敏感数据不要一次全部传递

如果存在线程A和线程B,线程A通过一个函数func,把一组敏感信息,经过解密后,传递给线程B。黑客只要hook了这个函数func,就能拿到所有的敏感信息。为了提高黑客的破解成本,我们可以把这些敏感信息,分多次传递。

敏感信息不要集中存放

如果敏感信息在内存中是连续存放的,这样会很方便黑客攻击,除了简单的将不同的信息放到不同的内存区域外,我们甚至可以精细到一个变量,放到不同的内存中。比如将一个int分拆成几块,存在不同的内存块中,用到时在拼接起来。

敏感信息添加内存校验码

上文提到,黑客可能会通过观察内存的变化,定位出敏感信息的内存地址。这时候,黑客可能会试探性的修改一些值,然后回到游戏中查看是否生效。

我们需要给敏感数据的内存添加校验码,当读取内存时,先要检查内存的校验码是否匹配,写内存时,也会同时更新校验码。当发现校验码不正确时,我们就知道,此时内存正在被黑客篡改!

小结

所有的这些策略,都不能保证客户端代码的绝对安全,我们只是增加了破解的成本。

编写安全的PC端代码

标签:

原文地址:http://my.oschina.net/u/1453800/blog/362088

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!