基于NDK的Android防破解

Android程序防破解是发布app时一个很需要考虑的问题,通常的做法是对代码加入混淆干扰以增加破解难度。但即便如此,混淆操作之后的java代码仍然可以被通过各种方法进行破解。在基于NDK的Android中含有相应的main.cpp来作为应用程序的入口,因而在这里进行一些防破解较验,相应的破解难度就会增大不少(相对于java代码)。

在Android整个导出过程中,生成.dex阶段是整个打包发布操作的基础,包括相应的java源代码、外部库文件均会被编译链接到.dex文件中,而其中关于代码的任何改动后重新生成.dex,其均会与原始文件均会有所不同,因而就可通过对.dex文件进行MD5较验而做为app是否被破解的依据。对于Android app,dex源码文件安全性是最重要的,因此,这个dex源码加密保护其实很有必要,在这个方面,可以做到的有爱加密这个平台,不同类型的应用也有不同的加密保护方案,详细可以在这里了解:http://www.ijiami.cn/appprotect_mobile_games

基本流程:

1、打包发布阶段(只进行一次):在打包生成过程得到.dex之后计算该.dex文件的MD5串,并将其写入到NDK工程的main.cpp中,作为最终版本较验的标准串。该过程可以加入到Ant自动化打包发布中,作为生成.dex的后续阶段。

2、动态运行阶段(每次启动进行):在main.cpp的程序启动入口处添加动态的.dex MD5计算,并与代码中存储的标准MD5串进行比较,若两者不匹配则说明程序已经被破解,即刻退出。

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

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

<target name="predexmd5"depends="dex">

<exe cexecutable="${dexmd5tool}" failonerror="true">

<arg value="${dexmd5tempfile}" />

<arg value="${dex-ospath}"/>

</exec>

</target>

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

<target name="dexmd5" depends="predexmd5">

<loadfile srcfile="${dexmd5tempfile}"property="dexmd5sign"/>

</target>

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

<targetnametargetname="setmaincpp" depends="dexmd5">

<replace file="${maincppfile}"token="Ant_DexMD5Sign" value="${dexmd5sign}"/>

</target>

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

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

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

<targetnametargetname="ndkbuild" depends="setmaincpp">

<exec executable="${basedir}/ndkbuild.bat" failonerror="true">

</exec>

</target>

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,它可以以.so的形式链入到NDK工程中,并将指定的zip包(apk包)解压缩,将其中的所有文件以二进制的方式返回。如此一来就可以运行时得到当前apk包的dex的二进制流;将计算binary的MD5代码也一并加入到该工程中即可以完成在main.cpp中启动时动态较验.dex的MD5值。

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

时间: 2024-08-03 09:42:39

基于NDK的Android防破解的相关文章

分享 如何做到基于NDK的Android应用防破解!

 Android程序防破解是发布app时一个很需要考虑的问题,通常的做法是对代码加入混淆干扰以增加破解难度.但即便如此,混淆操作之后的java代码仍然可以被通过各种方法进行破解.在基于NDK的Android中含有相应的main.cpp来作为应用程序的入口,因而在这里进行一些防破解较验,相应的破解难度就会增大不少(相对于java代码). 在Android整个导出过程中,生成.dex阶段是整个打包发布操作的基础,包括相应的java源代码.外部库文件均会被编译链接到.dex文件中,而其中关于代码的任何

【转】Android 防破解技术简介

http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是随之而来的问题也越来越多,这其中比较令人头疼的问题就是:有些不法分子利用反编译技术破解 App,修改代码,之后再重新编译上传到应用商店!到时候,如果用户下载了这些应用,就可能造成个人信息或者金钱的丢失!所以,作为开发者的我们,有必要学习一些防止被破解的技术手段了! 简介 现在想要破解一个 App,

利用签名机制进行程序自检——Android防破解

自检程序写在so里 主要代码 在文件头中导入 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include<android/log.h> #include <string.h> #include <unistd.h> #endif 然后在cpp中写入Java调用c的接口 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) exte

Unity3d 调用 C++ 函数 实现加密防破解 (Android向)

因为Unity 采用C# 作为主要语言,代码编译之后作为DLL存在与执行文件中,这就给我们带来很大的一个问题,反编译非常容易. 如何反编译Unity游戏的代码: Unity打包生成的安装包,我们随便下载一个游戏,解压APK,来到 assets\bin\Data\Managed 这个目录. Assembly-CSharp.dll Assembly-CSharp-firstpass.dll 你在游戏中编写的代码就存放在这两个dll中. 把dll拖放到MonoDevelop中,稍等片刻,就能看到dll

使用O-LLVM和NDK对Android应用进行混淆

@author ASCE1885的 Github 简书 微博 CSDN 原文链接 Android开发中经常需要对敏感信息进行加密,避免不了要将密钥存放在终端设备上,那么如何防止密钥被逆向出来呢?这是一个先有鸡还是先有蛋的悖论.相比较将密钥写在Java层,将其下移到NDK层是个更好的选择,本文就来介绍如何对NDK层代码进行混淆,以更好的保护我们的密钥. 混淆是一种用来隐藏程序意图的技术,具体的实现技术可能差别比较大,最有效的技术可以增加逆向工程和破解的难度,防止知识产权被窃取.已经有很多第三方的软

App山寨疯狂 爱加密Apk加密平台防破解

App山寨疯狂 爱加密Apk加密平台防破解,Android系统由于其开源性,眼下已占领全球智能机近80%的市场,远超微软的WP系统和苹果的IOS系统.然而也正是由于开源性,Android盗版App在国内横行泛滥,盗版App通过广告骚扰.窃取账号.盗取隐私.远程控制.恶意扣费.购物欺诈等影响用户的体验,侵害用户利益.文章出处:www.ijiami.cn App山寨疯狂 爱加密Apk加密平台防破解,面对严重的App山寨横行的现象,国内第三方针对Android应用加固的平台爱加密,致力于保护App安全

基于Eclipse的Android JNI层测试应用开发过程记录

前言 本文记录一个Java层与JNI层参数与数据交互的应用程序开发过程,为实现一个功能完整的带Java与JNI的应用程序打下基础.本文假设读者已搭建好Android的Eclipse与NDK开发环境,包括通过ADB连接手机的配置. 1. 构建基本的Android应用程序 1.1 引导界面配置 打开Eclipse,"File"->"New"->"Android Application Project",在弹出界面,配置如下(红色框表示不是

Android逆向工程-破解 哈皮妹-萝莉

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/18797493 前言 新的一年新的开始,除了继续我的原有课题之外,我还打算研究下Android逆向工程的一些东西,主要包括反编译.Smali.APK打包.签名.反逆向和移动安全等.这篇就是新课题的第一篇文章,不过要牺牲下哈皮妹-萝莉这款应用了.通过对哈皮妹-萝莉的破解,让我更加深刻直观地认识到,Android的安全性是一个多么大的问题,如果我们的应用没有采用特殊手段去阻止破解

基于IOS和Android设备MDM技术方案服务价格

导读:前段时间 www.mbaike.net 博客被恶意攻击,导致程序崩溃,目前已经替换了以前的Wordpress程序,现提供IOS和Android版本MDM的代码和相关文档咨询服务. 一.IOS版MDM服务内容及价格: 套餐一:IOS端MDM Server代码(提供MDM Server端的代码和部署文档,不含后期技术支持) 3000元套餐二:IOS端MDM开发技术顾问(提供MDM开发的顾问服务,协助理解MDM原理流程及搭建MDM Server工作的咨询) 1500元套餐三:IOS端MDM全部服