原文:https://blog.csdn.net/baidu_33870664/article/details/80186945

android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原。

因此开发人员如果不准备开源自己的项目就需要知道怎样防止反编译和反编译他人的项目来学习。

2.3版本以上在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”可以对代码进行混淆,反编译后是很难看懂的。

2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可。

Android - proguard混淆器使用,有引用第三方jar包的时候报错:
You may need to specify additional library jars (using '-libraryjars')
处理方法:在proguard.cfg文件顶部加入
-dontwarn com.motorola.**
-keep class com.motorola.** { *;}
说明:-dontwarn和-keep结合参数使用来保持第三方库中的类而不乱,-dontwarn com.motorola.**意思是保持com.motorola.**这个包里面的所有类和所有方法而不混淆
-keep class com.motorola.** { *;}意思是ProGuard不要警告找不到com.motorola.**这个包里面的类的相关引用。对应包名改成你对应的jar包顶层package

详细可以查看官方文档 http://developer.android.com/tools/help/proguard.html

有些应用反编译后java代码用jd-ui根本都无法打开,连混淆的代码都看不到的,本人尝试多次都做不到(网上有说是混淆工具针对反编译工具的),希望知道的告知下怎么处理的。

--注:上面的问题经过本人多次尝试终于找到部分原因了,一.使用的版本比较低,现在最新版的是dex2jar-0.0.9.7,二.dex2jar目录不要有中文的,三.需要把class.dex直接拖到dex2jar.bat,生成 classes.dex.dex2jar.jar。如果生成jar过程中报一堆at com.googlecode.dex2jar.ir.ts.TopologicalSort.dfsRemove(TopologicalSort.java:135)错误的话还是不能打开的,看了下官方的问题报告有很多人有类似的问题,貌似进入了一个死循环,跟apk文件大小有点关系,应该是dex2jar的一个bug。

注意:上面的功能只是把java代码混淆了,xml和资源文件、图片并没有混淆,有些游戏应用图片比较重要需要转换成dat文件 再加上自己的加密解密算法还原。

另外加了混淆功能后还有压缩的功能,混淆后的apk比原来的小(具体比例看你的代码重复量了)

说完防止反编译再来说说怎么反编译吧

先说一下反编译的流程和原理:

1.用apktool 把apk--> 资源包(java代码变成smali文件看不懂的),可以修改资源包里面的文件。

2.apk后缀名改成zip或rar解压,获取 classes.dex 文件,用dex2jar转换成jar包(注:直接解压出来的资源文件是不能直接打开的,要用第一步的反编译工具,dex2jar.bat文件目录不要有中文)。

------------------------------------------

新版使用说明(不用把apk换成zip解压了,可以直接把apk文件拖到dex2jar.bat上--不能包含中文名称)
下载dex2jar最新版http://code.google.com/p/dex2jar/downloads/list
解压dex2jar-version.zip文件到一个目录. 比方说 /home/panxiaobo/, C:\
unzip -x dex2jar-version.zip -d /home/panxiaobo
使用 dex2jar 来生成 .jar 文件. dex2jar会在someApk.apk所在目录下生成一个someApk_dex2jar.jar文件.
   linux sh /home/panxiaobo/dex2jar-version/dex2jar.sh /home/panxiaobo/someApk.apk
   windows C:\dex2jar-version\dex2jar.bat someApk.apk
--------------------------------------------------

3.用jd-ui等java反编译工具直接查看java代码。

4.把java代码和第一版的资源包整到一起重新组成一个新的应用。

5.用apktool 重新编译。

6.用签名工具重新签名。

7.重新发布带新的签名的应用。

注:如果不用改java代码,只是换换风格和汉化2.3.4步则不用做。

google code上的开源项目

apktool http://code.google.com/p/android-apktool/

dex2jar http://code.google.com/p/dex2jar/  ps:这个是中国人写的

另外有人做了个工具套装,集成了apktool dex2jar jd-ui,不过我下载了运行不了 不知道是不是相应环境没有配对导致的

hackapk http://code.google.com/p/hackapk/

另外有人把apktool做了个封装 弄成exe文件 图形界面的方便使用,截个图出来给大家看看吧

注:上面那个软件不能签名的,要用另外一个软件(APKSign)来进行签名,截图如下:

另给出上面两个工具的下载连接 机锋论坛上面的,估计直接点击连接下载不了

Xwindows,带图形界面: apktool.rar (3.33 MB)  -->这个下载后可以自己到 http://code.google.com/p/android-apktool/ 下载最新版的apktool.jar替换原来的。

签名工具:Auto-sign.rar(312.45 KB)

另外还有些命令行的工具,本人给APK编辑器不同版本上面的说明不对应浪费了很多时间

1.普通apk文件(就是从各种网站上下载下来的第三方软件)

(1)把他放到place-apk-here-for-modding文件夹里面。(不要有空格和中文,中文的改成英文的)
(2)打开Script.exe,在CMD窗口中输入22或23(设置目前的工程),选择要编辑的apk文件的编号,回车确认
---------------------

安卓apk的编译与反编译的更多相关文章

  1. 用apktool工具进行apk的编译和反编译

    1.apktool下载安装 给一个2.0版的csdn地址:http://download.csdn.net/download/txj8612/7408775 下载后无需安装,直接解压缩,得到三个文件: ...

  2. 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译

    反编译工具 : 总结了一下 linux, windows, mac 上的版本, 一起放到 CSDN 上下载; -- CSDN 下载地址 : http://download.csdn.net/detai ...

  3. ilasm.exe与ildasm.exe的使用(编译与反编译)

    ilasm.exe与ildasm.exe的使用(编译与反编译)   首先打开cmd命令.cd 到 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0 ...

  4. Java代码的编译与反编译那些事儿

    原文:Java代码的编译与反编译那些事儿 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language) ...

  5. Java| 编译和反编译

    原文链接: http://www.yveshe.com/articles/2018/05/01/1525172129089.html 什么是编程语言? 在介绍编译和反编译之前,我们先来简单介绍下编程语 ...

  6. 什么是Java代码的编译与反编译?(转)

    转自:http://java.tedu.cn/ask/203119.html Java代码的编译与反编译 一.什么是编译 1.利用编译程序从源语言编写的源程序产生目标程序的过程. 2.用编译程序产生目 ...

  7. Java 编译与反编译

    编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级语言(Low-level Lang ...

  8. 【技术累积】【点】【java】【3】编译和反编译

    闲聊 擦,打脸了,但打完了还是得继续写呗,水着水着看呗. 概述 理解的不深入,但是实用. 总而言之:编译,是将书写的代码翻译为机器能够理解的代码:反编译,则是相反的过程. 来源在于语言的等级,一般认为 ...

  9. .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译

    apk(android package)就是我们安卓系统的安装文件,可以在模拟器和手机中直接打开安装,从项目中打包apk有几种方式可取 一.最简单的方法(类似我们的winfrom) 只要我们调试或者运 ...

随机推荐

  1. 帝国cms面包屑导航的首页链接锚文本改成关键字

    帝国cms面包屑导航的首页链接关键字一般都是“首页”二字或home,如果你想从这里提高锚文字的相关性,可以改成相应的关键字,那么如何来修改呢? 我们知道帝国CMS面包屑导航的变量是[!--newsna ...

  2. Python3学习之路~6.1 编程范式:面向过程 VS 面向对象

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...

  3. c#NamedPipe命名管道通信例子

    服务端 private NamedPipeServerStream pipeServer; private Thread receiveDataThread = null; public fServe ...

  4. java native方法及JNI实例 (转)

    转自:http://blog.csdn.net/xw13106209/article/details/6989415 1.参考文献: http://blog.csdn.net/youjianbo_ha ...

  5. Android使得Fragment 切换时不重新实例化

    以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...

  6. mysql 1,2,3 关联查询出数字代表的具体意思

    建表 TEST1 CREATE TABLE `TEST1` (`ID` int(11) NOT NULL,`IID` varchar(200) DEFAULT NULL,PRIMARY KEY (`I ...

  7. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(九)以g711-mulaw为例添加新的编码格式解析支持

    一.myRtspClient音频解析架构 AudioTypeBase是处理解析各种编码的音频数据的接口类.处理MPA数据的MPEG_Audio类和处理g711-mulaw的PCMU_Audio类均从A ...

  8. CentOS6.5安装sqlite3

    1.下载安装包:https://www.sqlite.org/download.html 2.解压 [root@mycentos ~]# tar xzvf sqlite-snapshot-201809 ...

  9. unity3d-游戏实战突出重围,第二天 制作血条

    using UnityEngine; using System.Collections; public class xt : MonoBehaviour { //红色血条 public Texture ...

  10. 安装FusionInsight

    1.在华为平台上下载整体客户端,不建议下载单个组件客户端,后期关联测试还是要装上的.   2.下载后需要将服务器上的客户端拷贝到本地.打开xShell,新建会话,登陆本地虚拟机上的Linux系统(19 ...