您的位置:首页 > 移动开发 > Unity3D

Unity3D安卓导出包加密学习--加密Assembly-CSharp.dll

2016-04-21 10:43 656 查看
Unity3D安卓导出包加密学习–加密Assembly-CSharp.dll

Unity3D安卓导出包加密学习—-编译mono

http://blog.csdn.net/grimraider/article/details/51193224

加密:

主要是用的Unity的PostProcessBuild功能,自己随便写个带PostProcessBuild的公有静态方法就行【public static void funcName(BuildTarget target, string path2BuildProject)】,在导出(注意是导出,不是直接生成apk)Android工程后自动修改Assembly-CSharp.dll,PostProcessBuild模块随便放哪都行,

PostProcessBuild后的参数代表执行顺序,下面的代码先执行OnPostProcessBuild再执行OnPostProcessBuild2

http://docs.unity3d.com/ScriptReference/Callbacks.PostProcessBuildAttribute.html

例如:

[PostProcessBuild(10)]
public static void OnPostProcessBuild(BuildTarget target, string path2BuildProject)
{
Debug.Log("OnPostProcessBuild: " + target.ToString() + ", " + path2BuildProject);
// 这里放加密代码
encryptDll(path2BuildProject);
}
[PostProcessBuild(20)]
public static void OnPostProcessBuild2(BuildTarget target, string path2BuildProject)
{
Debug.Log("OnPostProcessBuild2: " + target.ToString() + ", " + path2BuildProject);
}
static void encryptDll(string path)
{
//DLL在android工程中对应的位置
string inpath = path + "/" + PlayerSettings.productName + "/assets/bin/Data/Managed/Assembly-CSharp.dll";
if (File.Exists(inpath))
{
byte[] bytes = File.ReadAllBytes(inpath);
// 加密代码
File.WriteAllBytes(inpath, lTemp.ToArray());
}
}


解密:

修改mono工程下的./mono/metadata/image.c

函数

mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, const char *name)
{
if (strstr(name, "Assembly-CSharp.dll"))
{
// 解密功能块
}
.......
MonoCLIImageInfo *iinfo;
.......
}


编译好新的mono库之后,拷贝libmono.so到(原来的记得保留一份)

(windows)Unity安装根目录\Editor\Data\PlaybackEngines\androidplayer\release\libs\armeabi-v7a

这样每次unity导出的时候就可以自动替换解密库了。

接下来是用ant打包

环境:windows7,apache-ant,android-sdk,android-ndk

在导出的安装工程目录下,执行命令

android update project –path .

会自动在安卓工程下生成ant打包需要的build.xml(可以直接使用)

执行命令

ant

开始打包

记得下载android-sdk的build_tools包,要不会报错找不到aapt等

build_tools下载地址http://dl-ssl.google.com/android/repository/build-tools_r22-windows.zip

其他下载

http://www.cnblogs.com/rayray/p/4238416.html

http://www.oschina.net/question/1539302_227672

拼接byte[]串

List<byte> lTemp = new List<byte>();
lTemp.AddRange(bBig);
lTemp.AddRange(bSmall);
lTemp.ToArray();


参考:

雨松http://www.xuanyusong.com/archives/3553

雨松http://www.xuanyusong.com/archives/3571

ant打包http://www.cnblogs.com/yaozhongxiao/p/3523061.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d 加密 android mono