apk编译/反编译工具baksmali和smali用法及apktool+dex2jar+jd_gui的用法

2024-02-03 01:18

本文主要是介绍apk编译/反编译工具baksmali和smali用法及apktool+dex2jar+jd_gui的用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、apk编译/反编译工具baksmali和smali用法

smaliAn assembler/disassembler for Android's dex format

smali 下载地址:http://code.google.com/p/smali/downloads/list(下载链接:https://smali.googlecode.com/files/smali-2.0.3.jar

、https://smali.googlecode.com/files/baksmali-2.0.3.jar。利用迅雷新建下载链接可以将其下载下来)

用法如下:首先把baksmali-2.0.3.jarsmali-2.0.3.jar文件放到android sdk安装路径下的tools里面,把apk用WinRAR解压并提取classes.dex文件,也放入tools里面,然后用命令行,cd tools目录下,输入java命令:
java -jarbaksmali-2.0.3.jar -o classout/ classes.dex 

前提是你的path路径中有你的Java安装目录下的bin文件夹路径,这样才可以在任意路径下使用java 命令,还有classout/后要加个空格。  
执行成功后你会发现tools目录下多了一个classout文件夹,里面就是smali类型的文件,里面是反编译出的代码,但是不是java代码,还是能看出变量和方法的。

我们可以用apktool+dex2jar+jd_gui反编译apk文件,来学习人家的架构及界面等。

apktool: 可以解析资源文件,比如布局文件xml等,方便查看。

dex2jar:可以将dex文件转换成jar文件
用法:
1.将apk文件后缀改成rar,然后解压,取出其中的classes.dex,放到任意位置;
2.进入cmd,cd到dex2jar所在文件夹,输入命令dex2jar.bat %classes.dex所在目录%\class.dex
3. 命令完成后在%class.dex所在目录%就会生成jar文件
jd_gui:能够将jar文件反编译成java代码
用法:
打开jd_gui,然后将jar包拖放到主界面,就可以看到源代码了。


用jd_gui来看反编译出的Java代码,这样便于寻找自己想要改的东西,找到后可以到baksmali classout下去修改相应的地方。然后是利用smali编译回去:
命令如下:

java -jar smali-1.4.1.jar classout/ -o classes.dex
把classout下编译成classes.dex然后把classes.dex放回apk下覆盖原来的classes.dex文件。


二、反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI

前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:

dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

http://jd.benow.ca/

具体步骤:

首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录

运行

dex2jar.bat    classes.dex

生成

classes.dex.dex2jar.jar

生成jar文件的截图如下:


运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了


三、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

如果是只是汉化软件,这将特别有用。

首先还是下载工具,这次用到的是apktool

下载地址:http://code.google.com/p/android-apktool/downloads/list(https://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2、https://android-apktool.googlecode.com/files/apktool-install-windows-r05-ibot.tar.bz2。利用迅雷可以快速下载)

下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

具体步骤:

将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:


命令行解释:apktool   d   [apk文件 ]   [输出文件夹]

反编译的文件如下(AndroidManifest.xml为例):


特别注意:你要反编译的文件一定要放在C盘的根目录里

将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:


打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok



这篇关于apk编译/反编译工具baksmali和smali用法及apktool+dex2jar+jd_gui的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/672577

相关文章

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自