移动加密那点事儿_值存储加密
2015-07-16 08:04
190 查看
本文章讲述利用cocos2d-x 开发手机游戏的一些加密心得。
如有问题,请多指正。
很多其它信息详见:/article/2048608.html
本文地址:/article/2048610.html
八门神器是安卓、iOS、塞班平台上通用的游戏改动工具,能够改动内存中的数值和參数,达到改动游戏HP、MP、金钱、等级等的作用。八门神器类似于PC平台的金山游侠等游戏改动器。
对于网络游戏来说,可能没有太大的影响,终端对于网游来说基本上是一快屏幕,全部的数据都存放在server上。本机仅留部分配置信息等无关重要的数据。可对于单机来说,意义就不一样了,没有网络无法验证数据的正确,非常easy被内存改动器改动了数据。
因此,我们须要对我们用到的数据内存进行加密,防止内存被改动。
对数据加密基本可分为两种:
可逆加密
不可逆加密
两种加密也相应着不同的数据加密设计思想。
2.更新界面上的数据,进入八门神器进行在上一步骤结果中继续检索。
3.反复步骤2,直到结果仅仅是固定的地址。
4.改动该内存,更新界面查看数据是否正确。
首先要明白的一点就是
显示的数据 ~= 内存的数据。
这就是可逆加密的中心思想。
将内存中的数据加密起来。在显示的时候解密就可以。
使用一个最简单的可逆算法,实现加密和解密2个方法,然后对你觉得有必要保护的内存进行存储前加密,取前解密。
可逆的加密算法:最典型的可逆加密算法是异或运算。大家都知道,对一个值连续异或两次,其结果还是原值;于是,第一次异或被看成是加密,第二次异或被看成是解密。
本文不是介绍加密算法,仅仅是介绍基本思路,关于高级的加密算法可自行搜索。在此仅适用一种简单的算法来演示。
内存 * 2
验证方式非常简单: 从1 開始,每次递增1。
利用八门神器非常easy就能改动掉
那么我们使用简单算法:
存储内存 = (存储内存 / 2) * 2
显示内容 = 存储内存 / 2
简单吧。
以下我们进行八门神器搜索:
在输入1 之后搜索: 出现 202397 个数据。
点击button之后,搜索 2 还是有大量数据。
多次点击button之后。搜索的结果就会渐渐降低。
之后就发现不了了。
那么我们利用 显示内容 = 存储内存 / 2 的算法。搜索 显示 * 2
的内存,多次之后就非常easy发现该内存。
改动之后,内存成功变化。可见加密算法的重要性。使用简单的算法,非常easy暴力掉。
Hash Standard。安全散列信息标准)等。
基本上就是:
显示内存 = 存储内存
将存储内存加密 保存在验证变量中。
只是在每次显示/使用内存之前,对你加密与验证变量对照,这样就能非常easy发现是否内存被改动,是否应该採取措施等等。
如有问题,请多指正。
很多其它信息详见:/article/2048608.html
本文地址:/article/2048610.html
好了,进入本文的主题——数据加密:
要将数据加密,不得不提的一款神器:八门神器。手机游戏中的金手指。八门神器是安卓、iOS、塞班平台上通用的游戏改动工具,能够改动内存中的数值和參数,达到改动游戏HP、MP、金钱、等级等的作用。八门神器类似于PC平台的金山游侠等游戏改动器。
对于网络游戏来说,可能没有太大的影响,终端对于网游来说基本上是一快屏幕,全部的数据都存放在server上。本机仅留部分配置信息等无关重要的数据。可对于单机来说,意义就不一样了,没有网络无法验证数据的正确,非常easy被内存改动器改动了数据。
因此,我们须要对我们用到的数据内存进行加密,防止内存被改动。
对数据加密基本可分为两种:
可逆加密
不可逆加密
两种加密也相应着不同的数据加密设计思想。
首先要了解八门神器的使用基本步骤:
1.发现界面上的数据,进入八门神器进行查找。2.更新界面上的数据,进入八门神器进行在上一步骤结果中继续检索。
3.反复步骤2,直到结果仅仅是固定的地址。
4.改动该内存,更新界面查看数据是否正确。
先说可逆加密:
不知道你发现上面八门神器使用步骤中,加红的文字没有。这就是可逆加密的关键。首先要明白的一点就是
显示的数据 ~= 内存的数据。
这就是可逆加密的中心思想。
将内存中的数据加密起来。在显示的时候解密就可以。
使用一个最简单的可逆算法,实现加密和解密2个方法,然后对你觉得有必要保护的内存进行存储前加密,取前解密。
可逆的加密算法:最典型的可逆加密算法是异或运算。大家都知道,对一个值连续异或两次,其结果还是原值;于是,第一次异或被看成是加密,第二次异或被看成是解密。
本文不是介绍加密算法,仅仅是介绍基本思路,关于高级的加密算法可自行搜索。在此仅适用一种简单的算法来演示。
内存 * 2
验证方式非常简单: 从1 開始,每次递增1。
利用八门神器非常easy就能改动掉
那么我们使用简单算法:
存储内存 = (存储内存 / 2) * 2
显示内容 = 存储内存 / 2
public class MainActivity extends Activity { TextView showTextView = null; int index = enNum(1); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showTextView =(TextView)findViewById(R.id.textView2); showTextView.setText(""+deNum(index)); } public void addNum(View view) { index = enNum(deNum(index)+1); showTextView.setText(""+deNum(index)); } public static int enNum(int num){ return num*2; } public static int deNum(int num){ return num/2; } }
简单吧。
以下我们进行八门神器搜索:
在输入1 之后搜索: 出现 202397 个数据。
点击button之后,搜索 2 还是有大量数据。
多次点击button之后。搜索的结果就会渐渐降低。
之后就发现不了了。
那么我们利用 显示内容 = 存储内存 / 2 的算法。搜索 显示 * 2
的内存,多次之后就非常easy发现该内存。
改动之后,内存成功变化。可见加密算法的重要性。使用简单的算法,非常easy暴力掉。
接下来我们看看不可逆加密的方式:
不可逆的加密算法:MD5 验证 比如RSA公司发明的MD5算法,以及由美国国家标准局建议的不可逆加密标准SHS(SecureHash Standard。安全散列信息标准)等。
基本上就是:
显示内存 = 存储内存
将存储内存加密 保存在验证变量中。
只是在每次显示/使用内存之前,对你加密与验证变量对照,这样就能非常easy发现是否内存被改动,是否应该採取措施等等。
if (md5(index).equals(enIndex)){ index++; enIndex = md5(index); showTextView.setText(""+index); } else System.err.println("err index changed!!!");
相关文章推荐
- 【mongodb系统学习之五】mongodb启动最常用参数
- Linux 学习篇之二 vi命令
- LeetCode题解:Remove Element
- 手机卫士项目——手机防盗GPS追踪技术
- 黑马程序员-C语言基础七:进制
- apue第三版P106:ftw程序中使用的path_alloc
- [BZOJ2190][SDOI2008]仪仗队
- SQL——连接
- 黑马程序员-C语言基础六:函数
- C#几种截取字符串的方法(split 、Substring、Replace、remove)
- C#几种截取字符串的方法(split 、Substring、Replace、remove)
- 黑马程序员-C语言基础五:流程控制
- 读改善c#代码157个建议:建议7~9
- 无线互联奖学金文章连载(一)——北京总部49期陈聪
- 黑马程序员-C语言基础四:基本运算
- A 数据类型
- root的方法大体上有以下三种
- 黑马程序员-C语言基础三:scanf函数
- 做微信营销小组的一些感想
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】