在Windows下使用Cygwin尝试了下,没成功
在Mac下走通的流程
主要参考了
http://www.xuanyusong.com/archives/3553
http://www.luzexi.com/unity3d-%E9%87%8D%E6%96%B0%E7%BC%96%E8%AF%91mono%E5%8A%A0%E5%AF%86dll/
感谢作者的分享
1、下载 https://github.com/Unity-Technologies/mono/tree/unity-4.6
2、在Mac下安装 brew
( see : http://www.cnblogs.com/easonoutlook/p/3156623.html)
Homebrew依赖于XCode,首先需要安装,lion后XCode也是免费的了,直接到App store下载。同时Homebrew也依赖ruby,Mac已经自带ruby。
1
|
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
|
3、下载编译mono的依赖项
autoconf
automake
libtool
pkg-config
4、下载NDK
https://dl.google.com/android/ndk/android-ndk-r9-darwin-x86_64.tar.bz2
5、拷贝编译脚本
mono源代码/externals/buildscripts/build_runtime_andrord.sh
mono源代码/externals/buildscripts/build_runtime_andrord_x86.sh
到mono源代码/目录
6、反复运行脚本,调试各种错误
*建议使用x86来上手
*有各种路径配置的小坑
*所有问题都是配置问题
*善于利用config.log排查问题
7、修改成release版本,屏蔽 arm5和arm6的编译流程
*CFLAGS里的-g 改成 -O2
*增加 -Wl, -gc--sections
以上都是编译mono,在这步完成之后,就简单了。
8、利用APKTool 解包, 替换两个架构的 libmono.so ,再打回去。
9、这样自定义的mono就打好了。
关于加密:
由于一些原因,不能写的很详细,大思路可以说一下。
首先你需要有以下能力:
1、加密文件流的工具
2、解密文件流的函数(C语言)
处理下解出来的游戏的dll,加好密
利用mono载入image的函数作为数据源,写一个反向的解密流程。
然后dll就无法直接被ILSpy这种东西打开了。
我自己是用python做的加密工具,然后再写的配套c语言解密流程
这两个语言在数据类型、升值、截断、初值、宏定义、这些方面的差异,坑了我整整一天 T_T.
运气在这个过程中很重要,我测试x86脚本在排除了各种配置问题后,一次成功。另外一个同事则在编译阶段出现了问题。
可能是因为使用的依赖库版本不一致。
遇到问题了,就紧扣config.log,哪里有错改哪里。
本质上只是利用gcc编译so, 只是以前从来没搞过,所以刚上手会很头大。
may the force be with you!