Rust命令行,实现自动反编译Android APK包工具
Rust-CLI实现自动反编译APK
-
Rust提供了比较好的CLI接口,可以快速的编写命令行应用, 用于日常的工具类使用。
-
分享一个用Rust命令行实现自动反编译Android APK包工具,是之前学习Rust写的一个练手小工具,可以快速反编译APK,同时也学习下用Rust来写命令行工具的。
核心依赖库准备:
-
反编译APK依赖的必要库:
d2j-dex2jar
jd-cli
Apktool
应用该库使用为最新版本,如果有不支持兼容的需要确认Java使用的相关版本即可,这些可以下载或者从工具源码里获取。
-
Rust CLI 编写依赖的库:
clap
console
execute
indicatif
text2art
这些库的使用方式和说明可在crates.io查到具体的使用,或者参见我工程里的源码使用方式。
核心代码解析:
-
编写CLI处理接口:
let matches = Command::new("Decompile APK").author("lg.json@gmail.com").version("1.0.0").about("ApkDecompiler for Android, create by Spark Coding BU").arg(Arg::new("file").action(ArgAction::Set).short('f').long("file").default_value("-").help("The path to your apk."),).after_help("Longer explanation to appear after the options when \displaying the help information from --help or -h",).get_matches();
-
Command使用的是clap来创建, 通过Arg创建对应的参数和应用,可以创建读个arg进行添加。
-
读取CLI的输入参数:
let file_path = match matches.get_one::<String>("file") {Some(it) => it,_ => return,};let apk_path = PathBuf::from(file_path);
-
开始执行:
pub fn start_decompile(&self) -> Result<()> {self.show_tools_info()?;self.create_output_dir()?;self.start_dex2jar()?;self.start_decompile_class()?;self.start_decompile_res()?;self.open_output()?;\Ok(())}
开始执行会显示工具对应的信息,创建文件输出的地址,开始解析对应的包
-
举例命令行的创建:
///use dex2jar get APK's jar in output_pathpub fn start_dex2jar(&self) -> Result<()> {let mut command = Command::new("sh");command.arg(self.exe_dir.join("lib/dex2jar/d2j-dex2jar.sh")).arg("-f").arg(&self.apk_path).arg("-o").arg(self.output_path.join("app.jar"));execute_state(command, "dex2jar");Ok(())}
-
工程注意点:
1.使用build.rs在构建前需要把代码依赖的lib库拷到对应的target下,这里使用了构建脚本, 具体参见代码工程
2.如何使用cli的执行状态,来显示处理过程, 是CLI下常用的工具
使用方法:
-
到软件路径下:./apkdecompiler -f ./test.apk 一个命令可以自动反编译出包。
_____ _ _____ _ _/ ____| | | | __ \ (_)| |
| (___ _ __ __ _ _ __ | | __ | | | | ___ ___ ___ _ __ ___ _ __ _ | | ___ _ __\___ \ | '_ \ / _` || '__|| |/ / | | | | / _ \ / __| / _ \ | '_ ` _ \ | '_ \ | || | / _ \| '__|____) || |_) || (_| || | | < | |__| || __/| (__ | (_) || | | | | || |_) || || || __/| |
|_____/ | .__/ \__,_||_| |_|\_\ |_____/ \___| \___| \___/ |_| |_| |_|| .__/ |_||_| \___||_|| | | ||_| |_|
begin del old file...in /Users/developer/apkdecompiler/output
✅ create ouput:/Users/developer/apkdecompiler/output
✅ dex2jar...done
✅ decompile class...done
✅ decompile Resource...done
反编译后的相关代码和资源内容会自动打开对应的文件夹。分享这个工具仅供对练手rust,方便反编译Android APK包用户使用,任何商业行为均与软件和本人无关。
一些源码实现细节比如rust里文件路径操作、命令行状态实现等没有具体在文中呈现,可以通过源码进一步学习。
PS: 也欢迎大家评论和交流~ 更多文章也可关注微信公号:良技漫谈 ,如需源码回复Rust。
相关文章:
Rust命令行,实现自动反编译Android APK包工具
Rust-CLI实现自动反编译APK Rust提供了比较好的CLI接口,可以快速的编写命令行应用, 用于日常的工具类使用。 分享一个用Rust命令行实现自动反编译Android APK包工具,是之前学习Rust写的一个练手小工具,可以快速反编译APK,同时也学习下用Rust…...
10. NSTableView Table 数据表格
表格是非常重要和复杂的一个控件,本节会用大量篇幅来把表格这东西力求讲清楚。 基本设置 表格结构 表格是 OS X 组件中为数不多采用了MVC设计模式来实现的控件,即tableView–dataSource–Delegate,这种分层架构给处理数据带来了极大的便利…...
javase笔记8---File与IO流
File类型 简介 在程序中,使用java.io.File这个类来描述和操作磁盘上的一个文件或文件夹(目录)。 File这个类,能新建、删除、移动,重命名文件或文件夹,也能获取或者修改文件或文件夹的信息(如大小,修改时间等)…...
docker上传离线镜像包到Artifactory
docker上传离线镜像包到Artifactory 原创 大阳 北京晓数神州科技有限公司 2024年10月25日 17:33 北京 随着docker官方源的封禁,最近国内资源也出现无法拉取的问题,Artifactory在生产环境中,很少挂外网代理去官方源拉取,小编提供…...
【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】
语音识别在会议点名中的使用 概要解决问题的过程不行的一些参考可以的一个package自定义词语的拼音转换遗留的问题 小结 概要 提示:这里可以添加技术概要 这里只实现一个方面,每个android会议设备都可通过语音发送参会者姓名,自动转换成文字添加到人员名单. 语音采集…...
OS基础-
OS基础 内存管理 内核用户设备管理 设备框架I/O子系统网络多媒体 音频视频运维 控制台GUIdebug审计计算机组成 CPU ALUregister SPLRPCR0-R12CPSRcacheclockInterrupt Vector tableIVTRMMU/MPU 内存访问权限配置,支持多进程BUSMEMORYI/O单线程 特点:结构…...
《大型语言模型实战指南:应用实践与场景落地》一文详解大型语言模型的11种微调方法
导读:大型预训练模型是一种在大规模语料库上预先训练的深度学习模型,它们可以通过在大量无标注数据上进行训练来学习通用语言表示,并在各种下游任务中进行微调和迁移。随着模型参数规模的扩大,微调和推理阶段的资源消耗也在增加。…...
嵌入式浏览器 -- Chromium VS Firefox
嵌入式浏览器概念 嵌入式浏览器是嵌入式系统中的核心组件之一,用于为设备提供网络访问能力和内容显示功能。与传统PC浏览器相比,嵌入式浏览器更加注重性能优化和资源效率,同时确保核心功能可用,如HTML渲染、JavaScript支持和多媒…...
权限大、数量多、破坏强、管理难......企业特权访问管理怎么管?
特权账号,通往企业数据大门的“钥匙”。 它权限大,具有高危命令或操作的执行权限; 破坏性强,操作可能影响他人使用或其他系统故障; 信息泄露风险大,操作可能获取别人或其他系统相关隐私信息;…...
UE5 第一人称示例代码阅读0 UEnhancedInputComponent
UEnhancedInputComponent使用流程 我的总结示例分析firstthenand thenfinally&代码关于键盘输入XYZ 我的总结 这个东西是一个对输入进行控制的系统,看了一下第一人称例子里,算是看明白了,但是感觉这东西使用起来有点绕,特此梳…...
如何在Linux下安装和配置Docker
文章目录 安装前的准备在Debian/Ubuntu上安装Docker添加Docker仓库安装Docker验证安装 在CentOS/RHEL上安装Docker安装必要的软件包设置Docker仓库安装Docker启动Docker服务 Docker的基本使用拉取一个镜像运行一个容器 配置Docker创建Docker目录使用非root用户运行Docker 结语 …...
apisix的原理及作用,跟spring cloud gateway有什么区别?
apache APISIX 是一个高性能、可扩展的开源 API 网关,它主要用于处理 API 请求、流量管理、安全控制和服务治理。APISIX 可以将复杂的服务架构中的不同服务通过统一的网关来进行管理和监控,为微服务架构提供了便捷的流量入口管理方式。 APISIX 的原理 …...
华为HarmonyOS实现实时语音识别转文本
场景介绍 将一段音频信息(短语音模式不超过60s,长语音模式不超过8h)转换为文本,音频信息可以为pcm音频文件或者实时语音。 开发步骤 在使用语音识别时,将实现语音识别相关的类添加至工程。 import { speechRecogni…...
DIY可视化-uniapp悬浮菜单支持拖动、吸附-代码生成器
在Uniapp中,悬浮菜单支持拖动和吸附功能,可以为用户带来更加灵活和便捷的操作体验。以下是对这两个功能的详细解释: 悬浮菜单支持拖动 提高用户体验:用户可以根据自己的需要,将悬浮菜单拖动到屏幕上的任意位置&#x…...
HTTP cookie 与 session
一.Cookie 定义: 是服务器发送到用户浏览器并保存在浏览器上的一小块数据, 它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。 通常, 它用于告知服务端两个请求是否来自同一浏览器, 如保持用户的登录状态、 …...
智慧停车场导航系统架构及反向寻车系统解决方案
一、系统概述: 随着当前室内定位导航技术在大型公共场所如政务中心、商业综合体、车站中的应用越来越多,人们对智慧停车场的需求也日益凸显出来,并且智慧停车场对大型公共场所智慧化的整体建设起到重要作用。如何更有效提高停车效率…...
【小程序上传图片封装2024,支持多图,带进度,上传头像】
import config from ./config;// 支持多图,显示进度 export function uploadImages(count 1, sourceType, onLoading null, showProgress false, fileKey file) {return new Promise((resolve, reject) > {wx.chooseMedia({count: count, // 可以选择的图片数…...
[A-14]ARMv8/ARMv9-Memory-内存模型的类型(Device Normal)
ver0.1 [看前序文章有惊喜。] 前言 前面花了很大的精力把ARM构建的VMSA中的几个核心的议题给大家做了介绍,相信大家已经能够理解并掌握ARM的内存子系统的工作原理大致框架。接下来我们会规划一些文章,对ARM内存子系统的一些细节做一下介绍,使ARM的内存子系统更加的丰满。本…...
驾校管理系统|基于java和小程序的驾校管理系统设计与实现(源码+数据库+文档)
驾校管理系统平台 目录 基于java和小程序的驾校管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#…...
@Mapper使用中遇到的问题解法汇总
最近终于有时间写点代码相关的文章了,工作真的太忙了,果然又要测试又要开发的人最🐂🐴。 1.查询数据库有数据,但是代码中写select语句的时候查出为null Select("SELECT * FROM xx_manager order by id limit 1&q…...
OpenClaw配置备份:Qwen3.5-4B-Claude环境迁移指南
OpenClaw配置备份:Qwen3.5-4B-Claude环境迁移指南 1. 为什么需要环境迁移 上周我的主力开发机突然主板故障,不得不临时切换到备用笔记本工作。当我准备继续用OpenClaw处理自动化任务时,突然意识到一个严重问题——所有精心调试的模型参数、…...
Squeezer性能优化指南:提升dApp响应速度的7个技巧
Squeezer性能优化指南:提升dApp响应速度的7个技巧 【免费下载链接】squeezer Squeezer Framework - Build serverless dApps 项目地址: https://gitcode.com/gh_mirrors/sq/squeezer Squeezer Framework作为构建无服务器去中心化应用(dApps)的强大工具&#…...
OpenClaw技能扩展:用GLM-4.7-Flash实现Markdown文档自动整理
OpenClaw技能扩展:用GLM-4.7-Flash实现Markdown文档自动整理 1. 为什么需要文档自动化整理 作为一个长期使用Markdown写作的技术博主,我的文档库已经积累了超过2000篇笔记和草稿。曾经有整整三个月,我每周都要花3-4小时手动整理这些文档——…...
存储性能指标全解析:从IOPS到响应时间的实战指南
1. 存储性能指标入门:从买菜到地铁的日常类比 刚接触存储性能指标时,那些英文缩写就像天书一样让人头疼。其实这些概念在我们生活中随处可见,只是换了个马甲而已。想象一下早高峰的地铁站:IOPS就像每分钟通过闸机的人数࿰…...
Qwen3-ForcedAligner在开源项目中的贡献指南
Qwen3-ForcedAligner在开源项目中的贡献指南 1. 引言 如果你对语音识别和音频处理感兴趣,想要为开源项目做贡献,Qwen3-ForcedAligner是个绝佳的选择。这个项目专注于语音文本对齐技术,能够精确标注音频中每个词或字符的时间戳,对…...
码农专用,轻松拥有小金库
作为天天和代码、BUG、项目进度死磕的程序员,咱们这辈子靠理性思维、逻辑推演解决了无数技术难题,可一碰到理财这件事,几乎全员踩坑:要么没时间研究,要么怕风险不敢下手,最后只能把辛苦攒下的工资、年终奖丢…...
RePKG:解锁Wallpaper Engine资源宝库的终极提取与转换工具
RePKG:解锁Wallpaper Engine资源宝库的终极提取与转换工具 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg RePKG 是一款专为Wallpaper Engine设计的开源C#工具ÿ…...
用快马平台十分钟复刻开源硬件官网原型:以龙虾openclaw为例
最近在做一个开源硬件项目"龙虾openclaw"的官网原型,想快速验证下设计概念。作为一个机械爪硬件项目,官网需要清晰展示产品特性和社区资源。传统开发流程可能需要好几天,但这次我用InsCode(快马)平台只花了十分钟就搞定了原型&…...
CoPaw长文本处理极限测试:百万token上下文摘要与问答
CoPaw长文本处理极限测试:百万token上下文摘要与问答 1. 开场白:当AI遇上超长文本 最近遇到一个朋友吐槽:"我们公司那些技术文档动辄几百页,找点关键信息跟大海捞针似的。要是AI能帮忙就好了,但试了几个工具&am…...
从JIT到AOT再到Cuvil编译器:Python AI推理部署演进史(2024年Q2最新Gartner评估报告核心结论首发)
第一章:Cuvil编译器在Python AI推理中的生产环境部署概览Cuvil编译器是一个面向Python生态的高性能AI推理加速工具,专为将PyTorch/TensorFlow模型无缝转换为低开销、高吞吐的原生可执行代码而设计。它不依赖Python解释器运行时,在部署阶段可生…...
