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

 更新时间:2015年07月15日 12:17:48   投稿:hebedich  
这篇文章主要介绍了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的方式来编译的

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

相关文章

  • Android MVP模式实战教程

    Android MVP模式实战教程

    这篇文章主要为大家详细介绍了Android MVP模式实战教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • UiOS开发中ITextView回收或关闭键盘使用方法总结

    UiOS开发中ITextView回收或关闭键盘使用方法总结

    iOS开发中,发现UITextView没有像UITextField中textFieldShouldReturn:这样的方法,那么要实现UITextView关闭键盘,必须使用其他的方法,下面是可以使用的几种方法,需要的朋友参考下吧
    2016-11-11
  • android获取当前接入点信息判断是ctwap还是ctnet实例代码

    android获取当前接入点信息判断是ctwap还是ctnet实例代码

    这篇文章主要介绍了android获取当前接入点信息判断是ctwap还是ctnet的方法,大家参考使用吧
    2013-11-11
  • 手把手教你用ViewPager自定义实现Banner轮播

    手把手教你用ViewPager自定义实现Banner轮播

    这篇文章主要手把手教你用ViewPager自定义实现Banner轮播,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Flutter 常用插件汇总

    Flutter 常用插件汇总

    Flutter 有了谷歌强大后盾加持,加上跨平台的特性,生态日益丰富,目前大部分应用能够用到的插件在 pub.flutter-io.cn上都可以找得到。本篇介绍 Flutter 最为常见的插件,以避免重复造轮子和新手少走弯路。
    2021-05-05
  • 详解Retrofit2.0 公共参数(固定参数)

    详解Retrofit2.0 公共参数(固定参数)

    这篇文章主要介绍了Retrofit2.0 公共参数(固定参数),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Android 7.0 监听网络变化的示例代码

    Android 7.0 监听网络变化的示例代码

    这篇文章主要介绍了Android 7.0 监听网络变化的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Android 高仿QQ 沉浸式状态栏

    Android 高仿QQ 沉浸式状态栏

    这篇文章主要介绍了Android 高仿QQ 沉浸式状态栏的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Android 动态改变布局实例详解

    Android 动态改变布局实例详解

    这篇文章主要介绍了Android 动态改变布局实例详解的相关资料,这里举例说明如何实现动态改变布局的例子,帮助大家学习理解,需要的朋友可以参考下
    2016-11-11
  • Flutter StreamBuilder实现局部刷新实例详解

    Flutter StreamBuilder实现局部刷新实例详解

    这篇文章主要为大家介绍了Flutter StreamBuilder实现局部刷新实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论