Unity3d 调用 C++ 函数 实现加密防破解 (Android向)

因为Unity 采用C# 作为主要语言,代码编译之后作为DLL存在与执行文件中,这就给我们带来很大的一个问题,反编译非常容易。


如何反编译Unity游戏的代码:

Unity打包生成的安装包,我们随便下载一个游戏,解压APK,来到

assets\bin\Data\Managed

这个目录。

Assembly-CSharp.dll
Assembly-CSharp-firstpass.dll

你在游戏中编写的代码就存放在这两个dll中。

把dll拖放到MonoDevelop中,稍等片刻,就能看到dll中的代码。


如果有一些比较重要的代码不想让别人看到,那就用C++来编写,C++编译成so文件,反编译之后只能成为汇编语言,无疑加大了破解难度(当然不能百分百防破解,汇编大牛很多的)


我们先新建一个文件夹,在里面新建一个jni文件夹,新建一个c文件,内容如下:

#include<string.h>  
#include<jni.h>  

int Share()
{
	return 1234561;
}

就这么一个函数吧,供C#调用。


然后新建一个Android.mk文件,这是NDK编译SO需要的一个mk文件,在里面指定了如何编译。

LOCAL_PATH := $(call my-dir)
  
include $(CLEAR_VARS)
  
LOCAL_MODULE := Share
  
LOCAL_SRC_FILES := Share.c
  
include $(BUILD_SHARED_LIBRARY)

然后新建一个Application.mk文件,指定编译平台以及其它的依赖。

APP_ABI :=armeabi-v7a
APP_PLATFORM:=android-8
APP_STL:=gnustl_static
APP_CFLAGS += -Wno-error=format-security




然后在jni文件夹中执行命令:

ndk-build

就会编译出来so文件,存放在上一级的lib中。



新建一个Unity3d的工程,然后编写代码,调用so中的的函数。

using UnityEngine;
using System.Collections;
using System.IO;
using System.Runtime.InteropServices;
using System;

public class test : MonoBehaviour {


	[DllImport("Share")]
	private static extern int Share();

	// Use this for initialization
	void Start () 
	{
		Debug.Log("Shared = "+Share());
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

注意 如果要调用SO中的函数一定要按照Unity指定的规则来编写:

[DllImport("Share")]
private static extern int Share();


在Unity工程中新建目录

Plugins\Android

拷贝SO文件到这里



然后我们导出APK安装测试



Demo工程下载:

http://download.csdn.net/detail/cp790621656/8430985



本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

Android 屏幕(View)坐标系统 - 2015-04-03 10:04:14

 首先明确一下 android中的坐标系统 :屏幕的左上角是坐标系统原点(0,0),原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向。  一、View的坐标      需要注意view的坐标是相对父容器而言的,包括:getTop()、getBottom(),getLeft(),getRight()。以getTop为例,函数源代码为:  /** * Top position of this view relative to its parent. *相对应父控件的top位置,单位为像素,即头部到父控件的距
1;把NSString切割出某一部分成NSString NSString *firstStr=[ self . textField . text substringWithRange : NSMakeRange ( 0 , 1 )]; 2:切割到数组中 NSArray* dateArray = [dateString componentsSeparatedByString: @"/"];
一 引言:      利用ApkPlug插件化框架将ShareSDK组件化,以实现按需动态加载和减小应用体积的目的。     ShareSDK是非常棒的移动社会化分享和评论工具,相信我们在开发应用过程中都离不开它。但是当我们集成ShareSDK时候同样会遇到一些问题。 1. ShareSDK包比较大,组合国内多家分享平台以后其SDK包的大小应该在1M以上,这对应用来说还是不小的负荷。 2. 集成ShareSDK过程中我们不可避免的需要将它的资源文件复制到应用的res资源目录下,这对我们应用后期维护造成不小
  Android多分辨率适配是一件很有意义但是比较麻烦的事情,网上有很多关于多分辨率适配的文章,多数文章讲解的都是整个APP的图片比较规则,可以将图片做成9图来完成多分辨率适配,但是对于一些游戏类应用(这里说的游戏没有使用游戏引擎)、低龄儿童应用,APP中有很多花哨的图片,这种APP的图片显然无法做成9图,在网上查了很多资料始终没有比较理想的解决方案,结合自己最近做的项目介绍一下针对这种情况下的多分辨率适配: 为了减少UI的工作量,一个APP只提供一套图; 为了减少程序员的重复工作,一个APP只维护一套
写在前面: Android 设备可以接受和安装基于系统和应用的更新。在设备中有一个特殊 recovery 分区,在这个分区中有一套特殊的恢复系统可以将下载的更新包进行解压并应用到系统中去。 本节主要描述了更新包的组织架构,并且概述了如何使用更新包打包工具制作系统升级的更新包。 OTA  的存在是用来对潜在系统的升级,或者在系统分区安装只读(不可卸载)的应用程序,因此在升级过程中不会影响到用于已经安装到系统中的 应用程序。 本节的内容主要基于 Android5.x 版本。   一、Android 设备布局的
  转载请表明出处: http://blog.csdn.net/u012637501 ( 嵌入式_小J的天空 ) 为了增强用户之间的交互,Android系统中提供了一些API和部件给我们开发美观有趣的应用。比如Android系统提供了ImageView来显示静态图片、AnimationDrawble来开发逐帧动画以及通过Animation对普通图片使用不减动画等。另外,Android应用中的图片不仅 包括*.png、*.jpg、*.gif等格式的位图 ,也包括 使用XML资源文件定义的各种Drawable

NDK C开发http请求 java传参数 - 2015-04-03 06:04:21

android NDK 开发 http post 小例子 定价为:xxx元 功能需求: 在android java 代码中,传入一个字符串 到jni中。 jni程序,就会将,这个字符串 post 到服务器 服务器收到POST内容之后,会将收到的内容,处理一下。返回给手机。 这时,jni程序,将接收到的返回内容。传到java应用程序。 1、java代码 public class UserUninstall { /** *  * @param ip * @param port * @param para *
if ([keyName rangeOfString : @"_" ]. location == NSNotFound ){     return  keyName; }  else{     NSLog(@"不存在某一字符"); }
1.申请一个内网 ip 映射外网域名 账号 下载地址: http://www.nat123.com/Pages_2_32.jsp 教程地址: http://jingyan.baidu.com/article/76a7e409b50625fc3b6e15a9.html 2.申请一个微信测试管理账号 注意, 此测试账号不能在真正的微信公众平台登录 只是做测试使用 申请地址: http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 教程地址:

打开相机的闪光灯 - 2015-04-03 06:04:20

打开相机的闪光灯 by 伍雪颖 - ( IBAction )openFlash:( id )sender {       AVCaptureDevice   *device = [ AVCaptureDevice   defaultDeviceWithMediaType : AVMediaTypeVideo ];       if   ([device   hasTorch ] [device   hasFlash ]) {         [device  lockForConfiguration :