unity3d加密补充片(2):关于u3d 4.6的问题和win下面的自动化加密工具

           昨天刚好看了这篇文章:http://www.xuanyusong.com/archives/3553

           问了下雨松MOMO,告诉我4.6后面的版本需要高版本才可以,可能是因为分支上的mono更新的是比较新的版本。所以我自己测试了下4.6.6以上应该都是可以的。

4.6.2以下估计是不行的,中间版本我并没有试过,所以建议大家直接用4.6.6以上的版本吧。

            编译和以前基本一样,唯一不同的是打印日志的地方变得多了,以前是第二次编译只会打印有问题的地方,但现在老打印已经成功的日志。不过既然有以前的经验,现在又有雨松Mono的文章,估计大家自己看看都能看明白。

            ok,编译成功后,直接测试,发现没问题,那么就写入加密代码。这里雨松提到可以被反编译破解掉加密代码。所以在研究如何让so不被简单的反编译。这个就交给他了,我就不继续研究了,因为毕竟我只是为了不让市面上的工具简单的破译我的代码,如果要先反编译so,然后研究怎么解密,估计大部分懒人都不会做吧。

            第二个事情就是自动化,因为每次编译完都要处理比较麻烦,那么如何整合进去呢。

            本来我打算干预编译流程,就是在代码编译完后,就运行加密代码,替换so,然后打包,但发现这样无法打包成功,原因是u3d在打包的时候会检测dll文件是否合法。也就是说我只能在打包完成后,对apk里面的文件进行替换。

             经过研究,发现用winrar批处理是可以实现的。

            代码如下:

set winrar=C:/Users/Administrator/Desktop/jiami/WinRAR/WinRAR.exe
set apk=%1
set newApk=%2

//解压apk中的dll

%winrar% x -ep %apk% assets\bin\Data\Managed\Assembly-CSharp.dll C:/Users/Administrator/Desktop/
rename C:\\Users\\Administrator\\Desktop\\Assembly-CSharp.dll Assembly-CSharp1.dll

//加密dll

C:\Users\Administrator\Desktop\jiami\Debug\jiami1.exe C:/Users/Administrator/Desktop/Assembly-CSharp1.dll C:/Users/Administrator/Desktop/Assembly-CSharp.dll

//删除apk中的dll

%winrar% d %apk% assets\bin\Data\Managed\Assembly-CSharp.dll

//删除apk中的so

%winrar% d %apk% lib\armeabi-v7a\libmono.so

//打包dll

%winrar% a %apk% -ep -apassets\bin\Data\Managed\ C:/Users/Administrator/Desktop/Assembly-CSharp.dll

//打包so

%winrar% a %apk% -ep -aplib\armeabi-v7a\ C:\Users\Administrator\Desktop\jiami\libmono.so
C:
cd C:\Users\Administrator\Desktop\jiami\Auto-sign

//重新签名

Sign.bat %apk% %newApk%
pause

代码很简单

记得将注释删掉,然后根据你自己的情况进行修改

在u3d中加入流程:

static bool isJiami = true;

    [PostProcessBuild]
    private static void afterjiami(BuildTarget target, string pathToBuildProject)
    {
        if(!isJiami)
        {
            return;
        }
        UnityEngine.Debug.Log (pathToBuildProject);
        string exePath = "C:\\Users\\Administrator\\Desktop\\jiami\\jiami.bat";
        Process p = new Process();
        string str = pathToBuildProject.Replace (".apk", "jiame.apk");
        ProcessStartInfo pi = new ProcessStartInfo(exePath, pathToBuildProject + " " + str);
        p.StartInfo = pi;
        p.StartInfo.FileName = exePath;
        p.StartInfo.CreateNoWindow = false;
        p.Start();
        p.WaitForExit();
        File.Delete (pathToBuildProject);
    }


ps:签名工具自己去网上下载一个,希望大家碰到问题多多自己研究,成功后分享给别人

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yxriyin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值