Android逆向学习(番外一)smali2java部分文件无法反编译的bug与修复方法

Android逆向学习(番外一)smali2java部分文件无法反编译的bug与修复方法

一、前言

昨天我和往常一样准备着android逆向(四)的博客,结果发现smali2java对某些文件无法进行逆向,我不知道windows会不会产生这个bug,但是ubuntu产生了这种情况,作为一个喜欢多了解的人,我就探究了一下这个bug并且找到了原因并且给出了修复的方法,目前我已经联系了原作者,期待smali2java能够尽快的对这个进行更新

下面我会简单介绍一下这个bug产生的原因与修复的方法,如果大家比较赶时间的话可以直接看修复的方法

二、bug的介绍

我在对一些带有$$文件名的smali文件进行逆向会出现这种情况的bug

20230905125635

这就很奇怪了,$$文件是因为使用java lambda表达式产生的一个smali代码,虽然这种代码一般非常简单,不需要逆向直接看smali代码就可以,但是作为一名有着大志向的菜狗,我最看不得电脑报错了,所以就打算直接修复这个bug

下面我们就开始分析这个bug是怎么产生的以及如何修复这个东西,通过查看报错我们发现是一行命令没有正确的运行,我们直接在命令行运行一下这个命令,发现报错如下

20230905130122

文件没有找到,然后机智的我发现这个文件名字上下怎么对不上了,会不会是没有转义的事情,加上转义符号我们再试一下

20230905125749

果然是这个原因,既然已经知道bug产生的原因了,简单修复一下就好了

三、修复方法

我们首先要找到这个插件的位置,这个vscode的插件都是javascript或者typescript写的,我是写过与发布过javascript脚本的,所以修改脚本对我来说不是难事情,一般来说vscode的配置文件都是在主目录下的.vscode目录里面,我们直接去找就可以了,记得打开隐藏目录

20230905125846

smali2java的脚本目录我们就这样找到了

然后打开文件夹,我们只需要修改两个文件

在里面的out文件夹下有个decompiler文件夹,里面有两个JadxDecompiler.js文件,一个在decompiler里一个在里面的impl文件夹里面,然后我们对这两个文件夹进行如下的修改

20230905163734

20230905163529

就是在指定位置加上下面个代码,这个是利用正则表达式进行替换

.replace(/\$/g,"\\\$")

这个代码的意思就是运行命令的时候,在文件名上加上转义,这样就能正确运行了

对了,当你修改之后,你的vscode还是没有办法运行,这时候就ctrl+shift+p打开vscode命令面板,然后reload window,就可以重新加载插件,然后你就发现这个程序可以正确运行了

20230905130016

最后还是虎哥镇楼

20230905130334

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

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

相关文章

视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法2.0

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…

windows10使用wheel安装tensorflow2.13.0/2.10.0 (保姆级教程)

安装过程 安装虚拟环境安装virtualenv安装满足要求的python版本使用virtualenv创建指定python版本的虚拟环境 安装tensorflow安装tensorflow-docs直接下载使用wheel下载 在VSCode编辑器中使用虚拟环境下的python解释器,并使用tensorflow常见错误 注意: t…

反序列化中_wakeup的绕过

文章目录 前言绕过方法变量引用属性个数不匹配(cve-2016-7124)C绕过fast-destruct其余GC回收机制 前言 反序列化中_wakeup扮演着非常重要的角色,ctf碰到很多的题目都有涉及到_wakeup绕过,写下这篇博客来总结下大部分绕过方法,其中会有例题具…

大数据导论 笔记

一、大数据方向 1、技术发展 计算机网络云计算大数据时代人工智能(本科:使用,研究生:推导,博士:创新) 2023年 大数据模型 人工智能元年 2、基础课程 hadoop 大数据基础 三大件:HDF…

java实现调用百度地图

这里使用的springbootthymeleaf实现,所以需要有springboot技术使用起来更方便 当然,只使用html加js也可以实现,下面直接开始 首先我们需要去百度地图注册一个AK(百度地图开放平台 | 百度地图API SDK | 地图开发) 找到左…

808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议

808协议是指中国国标GB/T 808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议。该协议规定了车辆与监管平台之间的通信规范,用于实现对道路车辆的远程监管和服务。 JT/T808协议主要包含以下几个方面的…

基于python+Django深度学习的音乐推荐方法研究系统设计与实现

摘 要 数字化时代带动着整个社会的信息化发展,随着数字媒体的不断发展,现在通多媒体数字产品的内容越来越丰富,传播影响力越来越强,以音乐为例,现在的音乐文化多样、音乐资源也异常的丰富,在这种大数据的环…

学会用命令行创建uni-app项目并用vscode开放项目

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 创建 uni-app 项目 命令行创建 uni-app 项目 编译和运行 uni-app 项目: 用 VS Code 开发 uni…

Elasticsearch踩坑:启动时 报错 java.nio.file.NoSuchFileException \lib\dt.jar

原因: ES 8.0.x版本对应jdk17以上,jdk17等高版本的jdk在配置环境变量时无需配置 CLASSPATH 解决: 1.将 /etc/profile 中的CLASSPATH的环境变量删除 2.配置立即生效source /etc/profile 3.重启ES

教你如何快速阅读葡萄酒标签

我们经常被问及葡萄酒标签上写了什么,总体而言这些信息可以分为四个关键部分,第一品牌或生产商;第二国家或地区;第三葡萄品种;第四年份。 第一品牌或生产商,在寻找葡萄酒的制造商时,著名的品牌名…

Vuex -mutations 传参修改仓库数据

文章目录 mutations 修改仓库数据一、mutations的基本修改二、mutations 传参修改数据1、 在触发事件的时候传递参数2、 提供事件方法,接收使用参数3、mutations方法接受使用参数传递参数注意事项: 三、综合代码(练习、复习)store…

一篇文章教会你什么是高度平衡二叉搜索(AVL)树

高度平衡二叉搜索树 AVL树的概念1.操作2.删除3.搜索4.实现描述 AVL树的实现1.AVL树节点的定义2.AVL树的插入3.AVL树的旋转3.1 新节点插入较高右子树的右侧---右右:左单旋3.2 新节点插入较高左子树的左侧---左左:右单旋3.3 新节点插入较高左子树的右侧---左右:先左单…

尖端AR技术如何在美国革新外科手术实践?

AR智能眼镜已成为一种革新性的工具,在外科领域具有无穷的优势和无限的机遇。Vuzix与众多医疗创新企业建立了长期合作关系,如Pixee Medical、Medacta、Ohana One、Rods & Cones、Proximie等。这些公司一致认为Vuzix智能眼镜可有效提升手术实践&#x…

计算机网络的故事——了解Web及网络基础

了解Web及网络基础 文章目录 了解Web及网络基础一、使用 HTTP 协议访问 Web二、HTTP 的诞生三、网络基础 TCP/IP四、与 HTTP 关系密切的协议 : IP、TCP 和 DNS 一、使用 HTTP 协议访问 Web 根据Web浏览器指定的URL,从对应的服务器中获取文件资源,从而显…

Java压缩文件为ZIP并加密

当您需要将文件加密并保存为ZIP文件时,可以使用net.lingala.zip4j库来实现。 步骤1:准备工作 首先,确保您已经包含了net.lingala.zip4j库,并将其添加到您的Java项目中。您可以通过Maven或Gradle等构建工具来添加这个库。仓库地址…

深度学习-4-二维目标检测-YOLOv5理论模型详解

YOLOv5理论模型详解 1.Yolov5四种网络模型 Yolov5官方代码中,给出的目标检测网络中一共有4个版本,分别是Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。 YOLOv5系列的四个模型(YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x)在参数量和性…

手写Ribbon基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明什么是RibbonRibbon和Nginx负载均衡的区别 工作流程代码实现RibbonSDK发送请求端引入RibbonSDK和Nacos的依赖配置文件中填写负载均衡策略调用代码 接收请求端执行效果发送请求端接收请求端 总结提升 概念说明 什么是Ribbon Ribb…

序列号读取

1.序列号读取 1.1 应用示例目的与思路 获取光盘的外接圆;然后进行极坐标变换,获取字符所在的区域;最后进行字符分割、识别及其在原图上显示。 1.2 应用示例相关算子介绍 (1) mean_image(Image : ImageMean : MaskWidth, MaskHeight : ) …

19 | spark 统计 每列的数据非缺失值

计算CSV文件中每列的数据覆盖率(非缺失值的百分比)时,您可以使用提供的Java代码来完成这项任务。以下是更详细的步骤: 1. 导入所需库和设置Spark配置 首先,您需要导入所需的Java库,并设置Spark的配置。这些库包括Apache Spark的Java库以及用于数据处理和格式化的其他Ja…

SQL语法

通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数…