IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]encrypt apk

    kun1234567发表于 2015-08-05 12:02:29
    love 0

    在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!


沪ICP备19023445号-2号
友情链接