uniyt android DLL加密

注意这个加密只适合android端加密,DLL热更新和简单加密。

参考教程:https://www.xuanyusong.com/archives/3553

  1. 安装ndk方法,打开控制台输入:

cd '/home/xujing/DLLFile'

./android-ndk-r10e-linux-x86_64.bin

环境配置:

   修改当前登录用户配置文件: sudo gedit ~/.profile

 修改系统配置文件:  sudo gedit /etc/profile

再打开的文件夹后面加上路径:

export ANDROID_NDK_ROOT=/home/xujing/DLLFile/android-ndk-r10e

export PATH=$ANDROID_NDK_ROOT:$PATH

使配置生效:source /etc/profile

   . /etc/profile

查看是否争取:echo $ ANDROID_NDK_ROOT

  echo $ PATH

 

2.安装ndk后生成的android-ndk-r10e文件夹发现上锁了:

解锁方法:sudo chmod -R 777 文件夹路径

 

3.安装autoconf这些软件:sudo apt-get update

如果安装失败则,则搜索update(软件更新器,输入前几个就可以了),换一个软件源。设置最佳网络,不断测试。

 

4.发现一直报错:”$ANDROID_NDK_ROOT is pointing to a mismatching NDK; using /home/xujing/DLLFile/android-ndk-r10e instead “。通过一句句加日志发现是

/home/xujing/DLLFile/mono53/external/ buildscripts/ PrepareAndroidSDK.pm 中间463行输出的,然后if($ndk eq $current)判断一直为false,$current 为r10e-rc4,$ndk为r10e。于是修改语句为 if($current =~ /$ndk/) 。

如果再次启动sh,发现还是报这个错。则打开另一个文件pm文件:

/home/xujing/DLLFile/mono53/external/android_krait_signal_handler/ PrepareAndroidSDK.pm

修改422行,详细修改如下:

if($current =~ /$ndk/)

#if ($ndk eq $current)

 

5.发现ndk还在下载,于是添加日志发现是build_runtime_android.sh文件里面113行”(cd "$KRAIT_PATCH_PATH" && perl ./build.pl)”导致的,找到pl文件。修改第10行:r9-> r10e

PrepareAndroidSDK::GetAndroidSDK(undef, undef, "r10e");

 

6.报错:进入相应目录发现没有clang3.3于是修改sh文件。

 

找到mono53/ external/android_krait_signal_handler/jni/Application.mk打开文件:修改clang3.3为3.5。

 

 

7.以上问题解决后,运行sh文件,可以正常打出so文件了。So文件目录在:/home/xujing/DLLFile/mono53/builds/embedruntimes/android下。

进入/home/xujing/DLLFile/mono53/mono/metadata目录,打开image.c文件,找到mono_image_open_from_data_with_name  函数(第1077行),添加解密函数。

之后在unity项目里面:添加打DLL的时候,添加加密算法,并且替换so文件。

    /// <summary>
    /// 加密 Assembly-CSharp.dll;
    /// </summary>
    private static void EncryptAssemblyDLL(string dllPath){
        UnityEngine.Debug.Log("EncryptAssemblyDLL"+ dllPath + "Start");
        byte[] bytes = File.ReadAllBytes(dllPath);
        bytes[0] += 1;//加密算法自己根据需求来
        File.WriteAllBytes(dllPath, bytes);
        UnityEngine.Debug.Log("EncryptAssemblyDLL" + dllPath + "Success");
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值