码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-02-07 14:37:09      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:unity   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



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

标签:unity   android   汇编语言   反编译   破解   

原文地址:http://blog.csdn.net/huutu/article/details/43602659

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!