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
例如:
解密:
修改mono工程下的./mono/metadata/image.c
函数
编译好新的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[]串
参考:
雨松http://www.xuanyusong.com/archives/3553
雨松http://www.xuanyusong.com/archives/3571
ant打包http://www.cnblogs.com/yaozhongxiao/p/3523061.html
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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories