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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GrimRaider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值