• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 仿《雷霆战机》飞行射击手游开发--防破解,《雷霆战机》射击手

仿《雷霆战机》飞行射击手游开发--防破解,《雷霆战机》射击手

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了飞行射击手游,飞行射击类手游,3d飞行射击手游,飞行射击手游大全,好玩的飞行射击手游等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

仿《雷霆战机》飞行射击手游开发--防破解,《雷霆战机》射击手


本文将介绍一个简单的防破解版的方法,希望能跟大家一起讨论学习。

 

    目前最常见也是最简单的单机游戏破解方法就是直接反编译apk,然后寻找三大运营商的计费函数调用代码,然后粗暴的将支付结果强制改为成功,然后用破解者自己的keystore打包发布。下面我们要介绍的防破解方法,就是检查keystore是否被更换,一旦发现更换,就直接退出游戏。

 

1、执行命令keytool -list -v -keystore thorqq.keystore , 其中thorqq.keystore改成你的秘钥库文件名。

将执行结果中MD5后面的一长串字符串去掉冒号并改为小写后保存下来(在这里是:3f8e70eea5bedb593525623c0c47822f)。

2、在android工程中新建MyApplication.java,增加如下代码获取apk包签名的md5值。

private static String FingerprintMd5 = "";

	public static String getFingerprintMd5()
	{
		return FingerprintMd5;
	}

	public Signature[] getRawSignature(Context context) {

		PackageManager pkgMgr = context.getPackageManager();
		PackageInfo info = null;
		try {
			info = pkgMgr.getPackageInfo(getPackageName(),
					PackageManager.GET_SIGNATURES);
		} catch (PackageManager.NameNotFoundException e) {
			return null;
		}
		if (info == null) {
			return null;
		}
		return info.signatures;
	}

	private static String FingerprintMd5 = "";
	
	public String stringToMD5(byte[] string) {  
	    byte[] hash;  
	  
	    try {  
	        hash = MessageDigest.getInstance("MD5").digest(string);  
	    } catch (NoSuchAlgorithmException e) {
	        e.printStackTrace();  
	        return "";  
	    } catch (Exception e) {  
	        e.printStackTrace();  
	        return "";  
	    }  
	  
	    StringBuilder hex = new StringBuilder(hash.length * 2);  
	    for (byte b : hash) {  
	        if ((b & 0xFF) < 0x10)  
	            hex.append("0");  
	        hex.append(Integer.toHexString(b & 0xFF));  
	    }  
	  
	    return FingerprintMd5 = hex.toString();  
	}  

	@Override
	public void onCreate() {

		//MD5 fingerprint
		stringToMD5(getRawSignature(this)[0].toByteArray());

		super.onCreate();
	}

3、在cpp工程中增加检查指纹的函数,比较从java中获取的md5值与我们自己的md5是否一致,如果不一致,则认为指纹错误,返回false

    bool checkFingerprint()
    {    
        //check fingerprint
        JniMethodInfo minfo;
        bool isHave = JniHelper::getStaticMethodInfo(minfo,
            "org/cocos2dx/cpp/MyApplication", "getFingerprintMd5", "()Ljava/lang/String;");
        //没有在java中找到getFingerprintMd5这个函数
        if (!isHave)
        {
            return false;
        }
        else
        {
            //调用getFingerprintMd5  
            jstring jstr = (jstring)minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
            std::string ret = JniHelper::jstring2string(jstr);

            Analytics::getInstance()->event(AnalyticsEvent::FingerPrint, ret.c_str());
            GameData::getInstance()->setValue(GAMEDATA::FINGER_PRINT, ret);

            //这里就是上面我们在keytool命令后保存的md5指纹。为增加破解难度,这里最好要对字符串进行加密处理
            std::string a = "3f8e70eea5bedb593525623c0c47822f";
            //判断指纹是否一致
            if (a != ret)
            {
                return false;
            }
        }

return true; }

4、在上层业务逻辑中调用checkFingerprint(),如果返回false,则提醒用户并直接退出游戏。

 

本游戏正式开放源代码啦~~

代码库:https://git.oschina.net/thorqq/RaidenFree

Win版试玩:http://pan.baidu.com/s/1hsbrUug

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 仿《雷霆战机》飞行射击手游开发--防破解,《雷霆战机》射击手

相关文章

  • 2017-05-26Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
  • 2017-05-26用树莓派实现对话机器人
  • 2017-05-26WEB服务器、应用程序服务器、HTTP服务器区别
  • 2017-05-26手机产品设计之用户引导,手机产品设计引导
  • 2017-05-26使用C++实现QML的TreeView Model (一)
  • 2017-05-26安卓中Paint类和Canvas类的方法汇总,安卓中canvas
  • 2017-05-26我的第一节Android课,第一节Android课
  • 2017-05-26从源码角度入手实现RecyclerView的Item点击事件,recyclerviewitem
  • 2017-05-26Android系统的五种数据存储形式(一),android数据存储
  • 2017-05-26NDK-JNI实战教程(二) JNI官方中文资料,ndk-jnijni

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安居客Android项目架构演进,android架构演进
    • android注册页面,android页面
    • 【Android】由浅到深理解AIDL
    • Android 知识Tips,android知识tips
    • Android性能优化的浅谈,android性能优化
    • Android MVP 设计模式,androidmvp
    • 《Android Studio实用指南》12.18 文本搜索工具
    • 自定义控件——开关按钮ToggleButton,控件togglebutton
    • 一个pycharm引起ubuntu桌面丢失的惨案
    • 初识android中的动画,初识android动画

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有