APK 安卓反编译

在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看。下面是我参考了一些文章后简单的教程详解。

(注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。)


测试环境:

        win 7 


使用工具:

     CSDN上下载地址:

       Android反编译整合工具包(最新) 下载

 

     官方最新版本下载地址:

       apktool(https://bbuseruploads.s3.amazonaws.com/0becf6a1-1706-4f2e-9ae6-891e00a8dd5f/downloads/b524f033-55a9-4932-854e-0d4f7c0c6e27/apktool_2.3.1.jar?Signature=UZ%2Bthh1Ip2nPdIdVyw8oWnWzXCw%3D&Expires=1514367580&AWSAccessKeyId=AKIAIQWXW6WLXMB5QZAQ&versionId=lozeb5QntKhSEiTTBTDSqBySxEHYHKu9&response-content-disposition=attachment%3B%20filename%3D%22apktool_2.3.1.jar%22)

   dex2jar(google code)  

   jd-gui(google code)最新版请见官方


工具介绍:

apktool  

     作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看

dex2jar

     作用:将apk反编译成java源码(classes.dex转化成jar文件)

jd-gui

     作用:查看APK中classes.dex转化成出的jar文件,即源码文件


反编译流程:

一、apk反编译得到程序的源代码、图片、XML配置、语言资源等文件

下载上述工具中的apktool,解压得到3个文件:aapt.exeapktool.batapktool.jar ,将需要反编译的APK文件放到该目录下,

打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:apktool.bat d -f  test.apk  test    


(命令中test.apk指的是要反编译的APK文件全名,test为反编译后资源文件存放的目录名称,即为:apktool.bat   d  -f    [apk文件 ]   [输出文件夹]

说明获取成功,之后发现在文件夹下多了个test文件,点击便可以查看该应用的所有资源文件了。

如果你想将反编译完的文件重新打包成apk,那你可以:输入apktool.bat   b    test(你编译出来文件夹)便可,效果如下:


之后在之前的test文件下便可以发现多了2个文件夹:

build

dist(里面存放着打包出来的APK文件)


二、Apk反编译得到Java源代码

下载上述工具中的dex2jarjd-gui ,解压

将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的工具dex2jar-0.0.9.15 文件夹内,

在命令行下定位到dex2jar.bat所在目录,输入dex2jar.bat   classes.dex效果如下:

在改目录下会生成一个classes_dex2jar.jar的文件,然后打开工具jd-gui文件夹里的jd-gui.exe,之后用该工具打开之前生成的classes_dex2jar.jar文件,便可以看到源码了,效果如下:

被混淆过的效果图(类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名):



三、 图形化反编译apk(本人未使用过)

上述步骤一、二讲述了命令行反编译apk,现在提供一种图形化反编译工具:Androidfby

首先,下载上述反编译工具包,打开Androidfby目录,双击Android反编译工具.exe,就可以浏览打开要反编译的apk


通过反编译,你可以获知该应用用到了什么第3方的库文件,它的代码是如何编写的等等。

然而,如果该APK进行了混淆处理,那么你看到的类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名,所以你可以想找到你所想得知的界面代码可能会十分费劲,找到了代码可能看起来也会很费劲,可是一个大体的思路会获得,有了这个思路,你就可以自己去尝试了。

本人曾经想写一个类似唱吧的名人界面布局,可是当初第一次接触不知道如何去写,进进行了反编译,即使他的那个代码是混淆过的,我也看出来他是通过LISTVIEW的TYPE设定不同的ITEM布局实现了。可能好多引用都是采用重写VIEW来实现效果,你可以得到他的大体思路对你的开发有益无害。


还有处于一个开发者辛辛苦苦将自己的应用开发出来被别人一反编译便成为了他自己的东西,所以要进行混淆处理:

以下是我转载的混淆的教程:http://blog.csdn.net/vipzjyno1/article/details/21042823

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql查询实例2(借书卡、图书、借书记录)

问题描述: 本题用到下面三个关系表: CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级 BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 BORROW 借书记录。 CNO 借…

开始学习Unity3D(一)

本人最近转行开始做海外独立游戏的发行,主要是负责服务器,开会注意到海外的服务越来越丰富越来越细分,对国内将会造成很大的冲击,比如AWS,Google,GameSparks等,这导致国内的所谓服务器开发将越来越简单,国内对服务器开发的需求越来越少,反而客户端的需求越来越多,所以…

List 流的使用

摘要 本文将介绍在 Java 1.8 中对 List 进行流操作的使用方法。引入的 java.util.stream 包为开发者提供了一种更为便捷和强大的方式来处理集合数据。通过使用流,我们能够以声明性的方式进行集合操作,减少了样板代码,提高了代码的可读性和可…

推荐系统(3)-协同过滤2-矩阵分解算法

协同过滤-矩阵分解算法1.奇异值分解2.梯度下降3.矩阵分解方法的优缺点《深度学习/推荐系统》读书笔记(其实矩阵分解和协同过滤已经没有特别大的联系了) 2006年,在Netfilx举办的推荐算法竞赛中Netflix Prize Challenge中,以矩阵分解…

leetcode141 环形链表

给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head …

iPhoneX适配

目录(?)[-]核心代码自动化修改代码参考资料iPhoneX适配,比较搓的一种方式,在不修改分辨率(720 x 1280)的情况下适配iphone X 主屏尺寸: 5.8英寸 主屏分辨率: 2436 x 1125核心代码修改 工程目录/Classes/Un…

centos安装nginx,配置负载均衡

1、安装nginx安装教程,参照:http://mp.weixin.qq.com/s/RVaRlRpHqZRjCaXGmOlfKw 2、反向代理的配置修改部署目录下conf子目录的nginx.conf文件的内容[html]view plaincopylocation / { #设置主机头和客户端真实地…

leetcode142 环形链表II

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有…

PaperNotes(18)-VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized Representation

自动驾驶论文阅读笔记11. Ployline Garph2. Global Graph3. 模型目标函数4.Related work5.Experiment5.1 实验设置5.2 消融实验5.3 模型资源消耗5.4 与其他模型的对比实验VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized RepresentationVectorNet: 通过矢量化…

ubuntu的apache配置https

一、配置Apache 1、开启SSL模块a2enmod ssl 2、启用SSL站点a2ensite default-ssl 3、加入监听端口vi /etc/apache2/ports.conf #编辑Apache端口配置,加入443端口 Listen 443注:Ubuntu启用SSL站点后,缺省已经加入了 (…

vim特别好的教程

欢 迎 阅 读 《 V I M 教 程 》 —— 版本 1.7 Vim 是一个具有很多命令的功能非常强大的编辑器。限于篇幅,在本教程当中 就不详细介绍了。本教程的设计目标是讲述一些必要的基本命令,而掌握好这 些命令&#x…

jquery、javascript实现(get、post两种方式)跨域解决方法

&#xfeff;&#xfeff;jquery、javascript实现(get、post两种方式)跨域解决方法一、实现get方式跨域请求数据浏览器端<script> $(document).ready(function(){$.ajax({url: "http://www.xxx.cn/index.php",type: "get",dataType: "jsonp&quo…

推荐系统(4)-逻辑回归LR、POLY2、FM、FFM

逻辑回归LR、POLY2、FM、FFM1.逻辑回归LR2.辛普森悖论3.POLY24.FM-20105.FFM6.GBDTLR-20147.LS-PLM-2017《深度学习/推荐系统》读书笔记1.逻辑回归LR Logistic Regression – 融合多种特征&#xff0c;通过sigmoid 函数&#xff0c;预测样本的被点击的概率。样本用特征向量x[x…

leetcode125验证回文串

给定一个字符串&#xff0c;验证它是否是回文串&#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。 说明&#xff1a;本题中&#xff0c;我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 …

配置 Elastic Beanstalk 环境负载均衡器以终止 HTTPS

&#xfeff;&#xfeff;配置 Elastic Beanstalk 环境负载均衡器以终止 HTTPS 要更新您的 AWS Elastic Beanstalk 环境以使用 HTTPS&#xff0c;您需要为您的环境中的负载均衡器配置 HTTPS 侦听器。以下两种类型的负载均衡器支持 HTTPS 侦听器&#xff1a;传统负载均衡器和应用…

AWS 给负载均衡器配置侦听器并上传IAM证书

&#xfeff;&#xfeff;1.打开EC2的负载均衡器&#xff1a;添加侦听器&#xff0c;选择https&#xff0c;ssl证书需要有一个CA证书&#xff0c;可以去阿里云申请&#xff0c;也可以从亚马逊获取&#xff1a;注意&#xff0c;这里的ssl证书要这样写其中私有密钥不是那种xxxxxx…

PaperNotes(19)-Learning Lane Graph Representations for Motion Forecasting

Learning Lane Graph Representations for Motion Forecasting1.ActorNet2.MapNet3.FusionNet4.Prediction Header5.模型参数学习自动驾驶论文阅读笔记2 Uber–ECCV2020–论文文章代码 模型的作用&#xff1a;Motion Forecasting &#xff08;这个motion都包括什么呢&#xff…

leetcode41 缺失的第一个正数

给定一个未排序的整数数组&#xff0c;找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 说明: 你的算法的时间复杂度应为O(n)&#xff0c;并且只能使用常数级别的空间。 思路&am…

Linux(10)-Make编译,Configure

Make编译机制,Configure1.Make机制demo1.make编译demo2.make清理demo3:make 安装demo4:make 卸载2.configure2.1 Autoconf2.2 软件的源码安装软件发布的一些基础知识。gcc, cpp, as, ld–施工队&#xff0c;底层干活工人make --包工头&#xff0c;指挥工人工作configure–分析师…

redis排行榜之日排行周排行设计

排行榜功能是一个很普遍的需求。使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择。 一般排行榜都是有实效性的,比如“用户积分榜”。如果没有实效性一直按照总榜来排,可能榜首总是几个老用户,对于新用户来说,那真是太令人沮丧了。 首先,来个“今日积分榜”吧,…