zoukankan      html  css  js  c++  java
  • 移动加密那点事儿_值存储加密

    本文章讲述利用cocos2d-x 开发手机游戏的一些加密心得。

    如有问题,请多指正。

    很多其它信息详见:http://blog.csdn.net/chengyingzhilian/article/details/25540441

    本文地址:http://blog.csdn.net/chengyingzhilian/article/details/25957895

    好了,进入本文的主题——数据加密

      要将数据加密,不得不提的一款神器:八门神器。手机游戏中的金手指。
      八门神器是安卓、iOS、塞班平台上通用的游戏改动工具,能够改动内存中的数值和參数,达到改动游戏HP、MP、金钱、等级等的作用。八门神器类似于PC平台的金山游侠等游戏改动器。
      对于网络游戏来说,可能没有太大的影响,终端对于网游来说基本上是一快屏幕,全部的数据都存放在server上。本机仅留部分配置信息等无关重要的数据。可对于单机来说,意义就不一样了,没有网络无法验证数据的正确,非常easy被内存改动器改动了数据。

      因此,我们须要对我们用到的数据内存进行加密,防止内存被改动。
      对数据加密基本可分为两种:
    1. 可逆加密
    2. 不可逆加密
      两种加密也相应着不同的数据加密设计思想。

     首先要了解八门神器的使用基本步骤:

    • 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(Secure Hash Standard。安全散列信息标准)等。
      基本上就是:
    显示内存 = 存储内存 
    将存储内存加密 保存在验证变量中。
    只是在每次显示/使用内存之前,对你加密与验证变量对照,这样就能非常easy发现是否内存被改动,是否应该採取措施等等。

    if (md5(index).equals(enIndex)){
    				index++;
    				enIndex = md5(index);	
    				showTextView.setText(""+index);
    			}
    			else
    				System.err.println("err index changed!!!");



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4650168.html
Copyright © 2011-2022 走看看