Android反编译代码和防止反编译

一、反编译apk文件

安装ApkTool工具,该工具可以解码得到资源文件,但不能得到Java源文件。
         安装环境:需要安装JRE1.6

1> 到http://code.google.com/p/android-apktool/

下载apktool1.3.2.tar.bz2 和apktool-install-windows-2.2_r01-3.tar.bz2 文件。
     解压两个文件,然后把解压后的文件放在一起,如:c:\apktool

2> 在系统变量PATH中添加进aapt.exe,如:;c:\apktool\aapt.exe

3> 在DOS窗口下进入apktool.jar所在目录。
      执行DOS命令:apktool d -s c:\soft\xxx.apk c:\soft\source。
     命令格式:apktool d [opts] <file.apk> [dir]  中的d代表解码,[opts]代表选项,-s选项代表不解码源文件。

2、Apktool工具只能反编译成smali的中间代码文件,这里需要借助另外一个开源工具Dex2Jar,

该工具可以把dex文件转换成jar文件。这个工具不能直接翻译成java文件,但是可以把dex文件转换成jar文件

下载地址:http://code.google.com/p/dex2jar/

1> 把APK安装包中的classes.dex解压到某个目录下,如:c:\soft
      2> 在DOS窗口下进入dex2jar.bat所在目录,执行DOS命令:dex2jar.bat c:\soft\source\classes.dex c:\soft\source,命令生成classes.dex.dex2jar.jar文件。

3、安装jd-gui工具,该工具可以把jar文件反编译成Java源文件

下载地址:http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip
      运行该软件,直接打开classes.dex.dex2jar.jar文件即可看到java源代码。

总结:

apktool1.4.1.tar.bz2       反编译工具的jar包
     apktool-install-windows-r04-brut1.tar.bz2   windows下调用执行jar 的exe文件

1、 解压这两个文件,将apktool1.4.1中的apktool.jar拷贝到apktool-install-windows-r04-brut1目录下,此时文件有:

红色的为待反编译的apk文件

cmd切换到该目录,执行:
    > apktool d -s queryNumber.apk  ./source 在当前目录生成source目录,下面放着资源文件

2、解压dex2jar-0.0.7.11-SNAPSHOT.zip将classes.dex拷贝该目录,执行:
     > dex2jar class.dex
     生成classes_dex2jar.jar文件

里面全是.class文件

3、打开jd-gui.exe,将classes_dex2jar.jar拖拽到jd-gui界面
       此时可以看到所有的源文件:

如何防止反编译。。。。

由于apk是Android虚拟机加载的,它有一定的规范,加密apk后Dalvik无法识别apk了。
完全避免是不可能的,总有人能够破解你的代码。但是有几种方式来提高被反编译取代码的难度。

1 关键代码使用jni调用本地代码,用c或者c++编写,因此相对比较难于反编译

2 混淆java代码。混淆是不改变代码逻辑的情况下,增加无用代码,或者重命名,使反编译后的源代码难于看懂。
        网上开源的java代码混淆工具较多,一般是用ant的方式来编译的

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • Android反编译看看手Q口令红包的实现原理

    首篇作为开始,先讲讲简单的反编译.反编译通常有几种目的:互相学习.借来用用.嘿嘿(干你,又分为小干干类似微信红包,和大干干改别人的apk帮他上架). 因为没带kvm回来,mbpr屏幕太小,所以下文环境为windows. 一.反编译 让我们从实战开始,先实践一下怎么去反编译一个apk,看看某些功能的实现.毕竟没有实践的原理都是耍流氓. 这里我们保留互相学习的心态,所以是友善的第一种目的,嘻嘻. 1.准备 工具 Apktool jadx(新一代反编译大杀器) 安装包 手机QQ 6.2.3 (目标就设

  • Android应用开发之代码混淆

    混淆器(ProGuard) 混淆器通过删除从未用过的代码和使用晦涩名字重命名类.字段和方法,对代码进行压缩,优化和混淆.结果是一个比較小的.apk文件,该文件比較难进行逆向project.因此,当你的应用程序对安全敏感(要求高),比如当你授权应用程序的时候,混淆器是一种重要的保护手段. 混淆器被集成在android 构建系统中,所以你不必手动调用它.同一时候混淆器仅在公布模式下进行构建应用程序的时候才会执行起来,所以在调试模式下构建程序时,你不必处理混淆代码.让混淆器执行起来是可选择的,可是推荐

  • Android如何防止apk程序被反编译(尊重劳动成果)

    作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一proguard文件夹 proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用. 下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先

  • Android APK反编译图文教程

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.下面是我参考了一些文章后简单的教程详解. (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平.) 测试环境: win 7 使用工具: 我们下载地址: apktool (资源文件获取)  下载        

  • Android编程之防止反编译的实现方法

    本文实例讲述了Android编程之防止反编译的实现方法.分享给大家供大家参考,具体如下: 1. 判断程序是否运行在模拟器上 boolean isRunningInEmualtor() { boolean qemuKernel = false; Process process = null; DataOutputStream os = null; try{ process = Runtime.getRuntime().exec("getprop ro.kernel.qemu"); os

  • android apk反编译到java源码的实现方法

    Android由于其代码是放在dalvik虚拟机上的托管代码,所以能够很容易的将其反编译为我们可以识别的代码. 之前我写过一篇文章反编译Android的apk包到smali文件 然后再重新编译签名后打包实现篡改apk的功能. 最近又有一种新的方法来实现直接从Android apk包里的classes.dex文件,把dex码反编译到java的.class二进制码,然后从.class二进制码反编译到java源码想必就不用我来多说了吧. 首先我们需要的工具是dex2jar和jd-gui 其中第一个工具

  • Android开发apk反编译和二次打包教程

    作为Android开发者,工作中少不了要反编译别人的apk,当然主要目的还是为了学习到更多,取彼之长,补己之短.今天就来总结一下Android反编译和二次打包的一些知识.首先声明本文的目的是为了通过例子讲解反编译和二次打包的原理和方法,继而作为后续讲解防止二次打包和App安全的依据,并不是鼓励大家去重新打包别人的App,盗取他人劳动成果. 本文首先介绍几种Android反编译工具的使用,然后实现在不需要知道源代码的情况下,仅通过修改反编译得到的smali文件实现修改apk逻辑功能的目的. And

  • 使用android-apktool来逆向(反编译)APK包方法介绍

    谷歌官方提供了apktool可以逆向已经发布出去的APK应用,即反编译已经打包成功的APK文件,使用它可以将其反编译成非常接近打包前的原始格式,对于APK来说,可以具体的逆向AndroidManifest.xml.资源文件resources.arsc以及将dex文件反编译成可以调试的smali文件. Warnning 但apktool并不等于是可以用来侵犯前作者的作品的工具,所以使用apktool工具的用户千万不用用其来进行不正当.非法的使用. It is NOT intended for pi

  • Android实用图文教程之代码混淆、第三方平台加固加密、渠道分发

    第一步:代码混淆(注意引入的第三方jar) 在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt. 新建一个项目的时候,会自动生成project.properties和proguard-project.txt文件,无需自己新建,如果你的项目无法自动生成,那么你就要检查一下你的ADT版本了 如果需要对项目进行全局混码,只需要进行一步操作: 将project.properties的中 "#progua

  • Android反编译代码和防止反编译

    一.反编译apk文件 安装ApkTool工具,该工具可以解码得到资源文件,但不能得到Java源文件.          安装环境:需要安装JRE1.6 1> 到http://code.google.com/p/android-apktool/ 下载apktool1.3.2.tar.bz2 和apktool-install-windows-2.2_r01-3.tar.bz2 文件.      解压两个文件,然后把解压后的文件放在一起,如:c:\apktool 2> 在系统变量PATH中添加进aa

  • Ubuntu Android源码以及内核下载与编译

    本教程是基于Ubuntu下Android6.0.1源码以及内核的下载和编译,记录一下,以后也就不用自己去找资料,一遍一遍的尝试了.可以翻墙的,英语好的,直接去AndroidSource. 系统环境:Ubuntu14.04LTS Android版本:6.0.1 重要网址 清华大学镜像 AndroidSource 下载前的准备 安装OpenJdk sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get in

  • 使用 C# 动态编译代码和执行的代码

    复制代码 代码如下: /* * 使用 C# 动态编译代码和执行 * 作者: yaob */ static void Main(string[] args) { // 编译器 CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#"); // 编译器的参数 CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("Syst

  • 关于android studio通过命令行运行gradle编译命令的问题

    报错:Could not resolve all dependencies for configuration ':classpath'  打开android-studio的terminal,运行命令 gradlew -debug 或者 gradlew -info 发现错误 根据提示(利用gradle.perperties),解决了jdk版本问题 org.gradle.java.home=D\:/android/android-studio/jre/ 到此这篇关于关于android studio

  • Android打包篇:Android Studio将代码打包成jar包教程

    一.新建一个as项目,再新建一个model模块 然后再app中的build.gradle中添加model的依赖.然后编译项目. 二.编译完成后,打开model下的build--intermediates--bundles目录,目录下有两个文件夹,debug,default,在default文件夹下有一个classess.jar,就是编译完成的jar包, 这里需要主要的是:因为我们使用的 as 版本不一致,所以会导致classess.jar包的目录页会不一样,不过最终的目录还是在build--in

  • Android编程之代码创建布局实例分析

    本文实例讲述了Android编程之代码创建布局使用方法.分享给大家供大家参考,具体如下: 大概描述一下效果:最外层是一个 RelativeLayout 里面有自定义个LinearLayout,每个LinearLayout有两个TextView.that's it !!! private void initView() { // 获取xml的RelativeLayout layout = (RelativeLayout) findViewById(R.id.liner); for (int i =

  • 通过JavaScript或PHP检测Android设备的代码

    随着乔布斯的回归,iPad2的发布,看来移动端的开发话题越来越火热了.在此列出一些能够在iOS的最大竞争者--安卓(Android)系统的检测方法. JavaScript判断方法 搜索user agent字符串中的Android单词是最省事儿的方法: 复制代码 代码如下: if(navigator.userAgent.match(/Android/i)) { // Do something! // Redirect to Android-site? window.location = 'http

  • Android实现用代码简单安装和卸载APK的方法

    本文实例讲述了Android实现用代码简单安装和卸载APK的方法.分享给大家供大家参考,具体如下: public class TestInstallAPK extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // this.unInstallFi

  • Android编程经典代码集锦(复制,粘贴,浏览器调用,Toast显示,自定义Dialog等)

    本文实例总结了Android编程经典代码段.分享给大家供大家参考,具体如下: 1. 复制,粘贴 clip = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); clip.setText("copy"); // 复制 clip.getText(); // 粘贴 2.调用浏览器 核心代码如下: Intent intent = new Intent(); intent.setAction("android.

  • 基于编译虚拟机jvm—openjdk的编译详解

    java只所以被推广,实际上很大原因是因为本身是跨平台的,很大作用是因为虚拟机的关系. 一般情况下开发人员不需要关注虚拟机内部实现就可以日常开发了,但是有时候涉及到性能的时候就需要了解虚拟机的实现机制了. 那么今天写的内容更多的是关于编译一套自己的虚拟机,为日后了解虚拟机底层原理铺铺路. 编译虚拟机可能会遇到很多坑,也很花费时间.也因大家的环境的差异,可能遇到的问题都不一致. 我只能说把自己遇到的问题都列出来,权当抛砖引玉了. 1首先我们应该下载openjdk的源码,这个openjdk实际上是有

随机推荐