Unity编程笔录--Unity3D 导出的apk进行混淆和加固(防止反编译)

作者:AdamBieber

前言:

对于辛辛苦苦完成的apk程序被人轻易的反编译了,那就得不偿失了,这篇文章就是解决Unity打包出来的apk进行代码加固和混淆。

 

准备资料:

1Obfuscator.zip  作用是代码混淆,是Unity的一个插件

2Apkdb.rar    作用是反编译apk,做过修改之后回编译成修改好的apk

3Reflector_8.5.0.179_XiaZaiBa.zip 作用是反编译代码,方便查看代码

4:梆梆助手.exe 作用是对apk进行重新签名和对apk的加固

以上文件下载地址:

 

链接: http://pan.baidu.com/s/1CujX8 密码: jm3m

如果链接无效,请联系我QQ:503115254

 

正文:

1:打包一个带有签名的apk

在打包Player Settings设置里面,需要对签名重新设置,签名可以理解成为一个证书,可以设置密码信息,保证一部分的程序安全,据说在Unity5.0对程序的安全有了初步保障,有一个默认的签名。但是个人习惯还是使用自己的签名为好,如下图:

 

以上都设置好之后,Alias下拉框选项就会多出一个选项,此时就是需要创建的签名了

 

 

 

点击 Create a new key之后,如图,填写所需要的信息,就可以创建了新的签名了,新的签名一定要保存好,这个东西对于程序加固还有作用。如图所示

 

我是保存到桌面上了

然后正常发布自己的apk就可以了

 

2:对apk进行反编译

接下来就要用到上面介绍的各种工具了,首先使用的是Apkdb反编译工具,首先解压出来,这是一个安装包,解压之后,需要进行对其安装,最好是关闭杀毒软件,安装界面是一个dos界面,



选择1 简体中文就可以了,输入1   然后回车继续安装

 

安装过程中,会提示你需要安装Java,当然,对于已经打包出apk来说,这些肯定已经配置了,如果还没有配置,则需要配置Java环境了,当然,还有AndroidSDK的配置,这个请自行搜索,网上很多教程,这里就不多说了,如图所示:

 

按任意键继续  就开始安装程序了,等待安装完毕后,会有一个选项,这里选择12都可以,我选择1

然后会让你选择安装器,这个选择哪个都行,我选择N

然后需要你重启电脑,因为要配置鼠标右键的功能

 

重启后,右键自己发布出来的apk,你会发现多了一些东西,这些东西都是有用的


点击APKDB编译,就准备开始对apk进行反编译

 

 

这里选择1  于是就开始反编译了,编译完成后,就在同级目录下生成一个文件夹,这就是反编译出来的文件

 

 

然后就开始对代码的混淆了

 

3:对程序的代码混淆

这次使用的是Unity的插件Obfuscator for Unity,解压后是一个unitypackage包,导入进去之后,你会发现工具栏多出了两个工具,如图所示

 

这里主要使用的是Tools里面的Obfuscator 选项,我们写的代码是在\assets\bin\Data\Managed文件夹下,当然,你看到的是dll文件,没错,我们的代码就是被编译成了dll文件,也就是Assembly-CSharp.dll,此时,你可以用Reflector进行反编译dll来获取里面的代码(我分享出来的是绿色版本的Reflector,所以不需要安装就可以使用),如图所示

 

所以就要使用到混淆器,混淆器是把里面的代码变量等信息进行重命名,这样可读性会变得非常差,接着,回到Unity中,点击Tools下的Obfuscator 选项,会弹出一个选择文件夹的提示框,这个提示框就是我们刚刚提到的dll文件夹,也就是解压后的文件夹,选择这个Managed文件夹就可以了,它会自动进行代码混淆,

 

混淆完成后推出dos命令,此时的dll就被混淆了,利用我们的Reflector看下代码



全都是替换成了这类信息,相信你会头大的,没事,电脑能认识就行。然后就是对已经修改好的apk回编译成可以用的apk

 

 

4:回编译成可用的apk

对于已经进行代码混淆的文件来说,原先是apk进行反编译得到的文件,所以还需要回编译回去,右键反编译出来的文件夹,


同样选择使用APKDB编译,此时出现的画面略有不同,


这里选择1就可以了,等待回编译完成后,自动输出一个新的apk,在输出之前,会有一个选项


选择Y就是了,新的apk目录是在原先目录下重新创建了一个名为“已编译***”文件夹,打开后就是回编译的文件了。

 

到这里,我们完成了对代码的混淆,但是还没有进行加固,防止反编译,所以,请往下看

 

 

5:使用梆梆助手来对apk进行加固

 

如果还没有账号的需要申请账户,下载梆梆助手才可以使用,

 

然后导入自己的apk就可以了,这里是流水式的走下来,所以只需要导入和导出就可以了,


添加单个apk文件,选择好刚刚混淆后的apk,然后你做的事情就是等,等待上传完--加固完--下载完--已完成,当到已完成的时候,说明这里已经可以导出了,导出需要前面提到的自己创建的签名,这里可是会用到的,如果不用,则apk安装包可能会出现问题

 

选择导出签名apk,选择签名文件,输入密码,然后点击开始导出

 

 

导出的apk是经过混淆,经过加固比较安全的apk

 

9月19号更新:

其实这样也算不是很安全,同时你也可以对代码进行加壳,网上一搜一大堆的加壳的工具,程序的安全没有绝对的。

可以参考我的另外两篇文章:

Unity编程笔录--Unity Android加密dll http://blog.csdn.net/adambieber/article/details/49837503

Unity编程笔录--Unity Android 加密 so http://blog.csdn.net/adambieber/article/details/49871245

好了,到这里结束了,如果有什么问题,请咨询我的QQ503115254

发表评论

4个评论

  • KingDigGrave

    楼下当然可以啊,你装个u3d的开发环境就行了,外加一个apk反编译工具,他那个命令行和邦邦完全可以用apktool和androidkiller来代替搞的这么麻烦一个反编译工具一个开发工具就没了

    2017-11-08 09:31:19回复

  • nmsztdl

    你好我想问一下这个可以用作PC端么

    2017-10-30 10:59:28回复

  • leovnay

    你好,我用Unity空项目导出apk后,在第二步骤《2:对apk进行反编译》中出错了,提示为"Loading resource table... Exception in thread "main" brut.androlib.AndrolibException:Could not decode arsc file at brut.androlib.res.decoder.ARSCDecoder.decode(ArSDecoder.java:52) at brut.androlib.res.AndrolibResources.getResPackagersFromApk(AndrolibResources.java:538) .....我下载别人游戏APK测试反编译没问题,用自己项目 或 新建空Unity项目,会出现这个问题请问下这是什么问题呢,期待你的回复,谢谢!

    2017-06-23 21:57:19回复

  • Lala_ZHU

    非常感谢,对我很有用!

    2016-08-06 18:31:46回复

我要留言×

技术领域:

我要留言×

留言成功,我们将在审核后加至投票列表中!

提示x

Unity3D知识库已成功保存至我的图谱现在你可以用它来管理自己的知识内容了

删除图谱提示×

你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?

删除节点提示×

无法删除该知识节点,因该节点下仍保存有相关知识内容!

删除节点提示×

你确定要删除该知识节点吗?