因为Unity 采用C# 作为主要语言,代码编译之后作为DLL存在与执行文件中,这就给我们带来很大的一个问题,反编译非常容易。
如何反编译Unity游戏的代码:
Unity打包生成的安装包,我们随便下载一个游戏,解压APK,来到
assets\bin\Data\Managed
Assembly-CSharp.dll Assembly-CSharp-firstpass.dll
把dll拖放到MonoDevelop中,稍等片刻,就能看到dll中的代码。
如果有一些比较重要的代码不想让别人看到,那就用C++来编写,C++编译成so文件,反编译之后只能成为汇编语言,无疑加大了破解难度(当然不能百分百防破解,汇编大牛很多的)
我们先新建一个文件夹,在里面新建一个jni文件夹,新建一个c文件,内容如下:
#include<string.h> #include<jni.h> int Share() { return 1234561; }
然后新建一个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)
APP_ABI :=armeabi-v7a APP_PLATFORM:=android-8 APP_STL:=gnustl_static APP_CFLAGS += -Wno-error=format-security
然后在jni文件夹中执行命令:
ndk-build
新建一个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 () { } }
[DllImport("Share")] private static extern int Share();
在Unity工程中新建目录
Plugins\Android
然后我们导出APK安装测试
Demo工程下载:
http://download.csdn.net/detail/cp790621656/8430985
Unity3d 调用 C++ 函数 实现加密防破解 (Android向)
原文地址:http://blog.csdn.net/huutu/article/details/43602659