设为首页 加入收藏

TOP

基于NDK的Android防破解
2014-11-24 08:10:23 来源: 作者: 【 】 浏览:0
Tags:基于 NDK Android 破解

在Android整个导出过程中,生成.dex阶段是整个打包发布操作的基础,包括相应的java源代码、外部库文件均会被编译链接到.dex文件中,而其中关于代码的任何改动后重新生成.dex,其均会与原始文件均会有所不同,因而就可通过对.dex文件进行MD5较验而做为app是否被破解的依据。


基本流程:


阶段1: 计算.dex文件的MD5串并将其写入到对应的main.cpp中,相应的ant操作大体如下(并不完整以)。


生成dex对应的MD5,并将其存储到一个文件中:








从外部文件中读入相应的MD5串,并存储到一个ANT的变量:





将.dex文件的MD5串写入到main.cpp中:





其中使用的dexmd5tool是一个自实现的外部exe,主要实现对任意文件计算其相应的MD5并将串值保存到一个指定的文件。这里需要MD5串以文件形式进行保存主要是以便在ant中打该文件并读入其中的字符串到ant变量中(并没有找到其它方法直接将相应的MD5码写入到ant变量中去,因而做这样的婉转实现)。将MD5串向main.cpp中写入主要就是利用ant的字符串替换机制来实现即可。


更新完main.cpp之后需要利用NDK对工程进行重新编译(主要是重编译这里有改动的C++代码,该步必须进行)


调用NDKbuikd来完成相应的重编译工作:






Ndkbuild.bat中的相关内容即如同Eclipse中配置的编译参数一样:


X:/cygwin/bin/bash.exe --login -c "cd/cygdrive/XXX/XXX/Android/jni && $NDK/ndk-build"


阶段2: 对dex计算相应的MD5并在main.cpp中进行启动时较验。


这里需要在app每次启动运行中动态得到当前apk包中的.dex文件并进行MD5的计算与较验。这里直接实现并不太容易,因而借助于了一个第三方包libzip(https://github.com/julienr/libzip-android),它可以以.so的形式链入到NDK工程中,并将指定的zip包(apk包)解压缩,将其中的所有文件以二进制的方式返回。如此一来就可以运行时得到当前apk包的dex的二进制流;将计算binary的MD5代码也一并加入到该工程中即可以完成在main.cpp中启动时动态较验.dex的MD5值。


若当前apk包中的.dex文件MD5码与main.cpp中存储的MD5码(阶段1得到)匹配,程序合法运行;否则,较验不通过认为已经被修改过,直接退出。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenGL多线程多视图的实现 下一篇iOS中左右两侧导航栏的简单实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·“我用Java 8”已成 (2025-12-26 11:19:54)
·下载 IntelliJ IDEA (2025-12-26 11:19:52)
·Java是什么?(通俗 (2025-12-26 11:19:49)
·雾里看花:真正意义 (2025-12-26 10:54:36)
·C++——模板(超详细 (2025-12-26 10:54:34)