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
      验证方式非常easy: 从1 開始,每次递增1。利用八门神器非常容易就能改动掉
       那么我们使用简单算法:
    • 存储内存 = (存储内存 / 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!!!");



  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4031817.html
Copyright © 2011-2022 走看看