利用smali代码去解决jadx出bug时的反编译问题

关于 smali:5. 结合工具进行辅助分析 场景示例快速阅读 APK 源码查看逻辑代码、类结构、函数注释搜索关键类或函数如 LoginActivity、checkSignature 等配合 smali 对比分析用 Java 代码理解 smali 的结构分析混淆逻辑看哪些类被混淆了,哪些保留了原名快速分析第三方 SDK知道广告 SDK、支付 SDK、加密类做了什么1)AndBug:Android 级 Java 调试器。 阅读详情

jadx可以很方便的进行反编译、但是有时候会增加了一些破坏代码后 、jadx就不能正常的解码出java代码。比如这段代码就是出错后的代码:

     /*
        r0 = isMediaUri(r9);
        r1 = 0;
        if (r0 != 0) goto L_0x0008;
    L_0x0007:
        return r1;
    L_0x0008:
        if (r9 == 0) goto L_0x0057;
    L_0x000a:
        r8 = r8.getContentResolver();
        r4 = 0;
        r5 = 0;
        r6 = 0;
        r7 = 0;
        r2 = r8;
        r3 = r9;
        r9 = r2.query(r3, r4, r5, r6, r7);	 Catch:{ Exception -> 0x0053, all -> 0x004b }
        r0 = r9.moveToFirst();	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
        if (r0 == 0) goto L_0x0041;
    L_0x001e:
        r0 = 0;
        r0 = r9.getInt(r0);	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
        r2 = "video";
        r2 = r10.contains(r2);	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
        r3 = 1;
        if (r2 == 0) goto L_0x0033;
    L_0x002c:
        r4 = (long) r0;	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
        r8 = android.provider.MediaStore.Video.Thumbnails.getThumbnail(r8, r4, r3, r1);	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
    L_0x0031:
        r1 = r8;
        goto L_0x0041;
    L_0x0033:
        r2 = "image/*";
        r10 = r10.contains(r2);	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
        if (r10 == 0) goto L_0x0041;
    L_0x003b:
        r4 = (long) r0;	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
        r8 = android.provider.MediaStore.Images.Thumbnails.getThumbnail(r8, r4, r3, r1);	 Catch:{ Exception -> 0x0049, all -> 0x0047 }
        goto L_0x0031;
    L_0x0041:
        if (r9 == 0) goto L_0x0057;
    L_0x0043:
        r9.close();
        goto L_0x0057;
    L_0x0047:
        r8 = move-exception;
        goto L_0x004d;
        goto L_0x0054;
    L_0x004b:
        r8 = move-exception;
        r9 = r1;
    L_0x004d:
        if (r9 == 0) goto L_0x0052;
    L_0x004f:
        r9.close();
    L_0x0052:
        throw r8;
    L_0x0053:
        r9 = r1;
    L_0x0054:
        if (r9 == 0) goto L_0x0057;
    L_0x0056:
        goto L_0x0043;
    L_0x0057:
        return r1;
        */

那怎么读懂这个代码呢?借助AndroidKiller来看smali代码,还原这个成java代码。
先看一段java 代码

        int shhh=3;
        boolean r0 = isMediaUri(r9);

        if (r0) {
            shhh=5;
        }


        if (!r0) {
            shhh=8;
        }

        System.err.println("shhh "+shhh);

对应的smali代码是这样

 const/4 v0, 0x3

    .line 326
    .local v0, "shhh":I
    invoke-static {p1}, Lcom/bbbbb/ccccc/FileUtils;->isMediaUri(Landroid/net/Uri;)Z

    move-result v1

    .line 328
    .local v1, "r0":Z
    if-eqz v1, :cond_0

    .line 329
    const/4 v0, 0x5

    .line 333
    :cond_0
    if-nez v1, :cond_1

    .line 334
    const/16 v0, 0x8

    .line 337
    :cond_1
    sget-object v2, Ljava/lang/System;->err:Ljava/io/PrintStream;

    new-instance v3, Ljava/lang/StringBuilder;

    invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V

    const-string v4, "shhh "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

很显然,根据这个转换我们很方便就可以解读出如下代码

        /*
        r0 = isMediaUri(r9);
        r1 = 0;
        if (r0 != 0) goto L_0x0008;

这段转成java就是这样子

        boolean r0 = isMediaUri(r9);
        if (!r0) {
            //goto L_0x0008;
            //去执行 L_0x0008对应的代码
        }

其他的依次类推,你学会了吗。

手把手教你用JADX和Apktool反编译APK,并修改Smali代码后重新签名打包 本文详细介绍了如何使用JADX和Apktool进行APK反编译,并修改Smali代码后重新签名打包的全流程。从工具准备、代码分析到重打包签名,每个步骤都配有实用技巧和操作指导,适合移动安全研究和应用定制领域的开发者学习。 阅读详情

相关推荐

用Android Killer反编译APK → 查看Smali代码。但结果出现大量“�”,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 700

android开发笔记之APK反编译(二) jadx

jadx的github地址:jadx使用说明安装依次运行以下命令:git clone https://github.com/skylot/jadx.git cd jadx ./gradlew dist主要是拉下来jadx的git主工程,然后跑对应的gradle task。之后会生成运行脚本,大概就是多出了build目录。运行cd build/jadx/ bin/jadx -d out lib/jad

hfreeman2008的专栏 1491

jadx1.0.0: Android反编译工具包

Android 应用反编译工具是众多开发者和安全研究人员获取应用程序内部结构、学习他人代码以及进行安全分析的重要手段。在了解具体的反编译工具如dex2jar、jd-gui和jadx之前,我们可以先回顾一下Android应用的打包和编译过程,从而更好地理解反编译工具在其中所扮演的角色。

weixin_42502089的博客 806

jadx卡死解决方案

set JAVA_OPTS=-server -Xms1024m -Xmx8192m -XX:PermSize=256m -XX:MaxPermSize=1024m

PLA12147111的博客 4664

Android App反编译实战教程:APK逆向与Smali代码解析

Android反编译技术是逆向工程的重要组成部分,广泛应用于安全审计、漏洞分析、竞品研究等领域。通过对APK文件的结构进行深入剖析,可以还原出应用的源码逻辑、资源信息及配置数据。APK本质上是一个ZIP压缩包,其核心组成包括:(清单文件)、(资源索引文件)、res/目录(资源文件)、assets/(原生资源)以及(Dalvik字节码文件)。理解这些组件的作用与交互机制,是掌握反编译流程与工具操作的前提。

weixin_42599908的博客 2409

Zlib1.2.11源码编译(Win10+VS2019)

下载 下载网址: zlib Home Site 得到文件: 解压缩到“D:\SourceCodes\zlib-1.2.11” 使用CMake配置、生成并打开项目 将CMakeLists.txt拖入CMake,配置(Configure): 生成(Generate) 打开项目(Open Project),CMake调用VS2019打开项目 生成debug版本 构建项目ALL_BUILD。成功生成debug版本 在“D:\Sourc...

Alexabc3000的专栏 1893

反编译利器Apktool和Jadx源码分析以及错误纠正

出处:http://blog.youkuaiyun.com/jiangwei0910410003/article/details/51671019 一、前言 在之前的破解过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工具是开源的,也是使用Java语言开发的,代码相对简单,我们今天就来分析一下他的大体逻辑,注

细心程度决定你的成败 4880

innovus 命令每日精要 | 掌控Innovus布线的利器——setNanoRouteMode详解

在数字IC后端设计的复杂世界里,布线优化是至关重要的一步。今天,我来给大家深入讲解Innovus工具中setNanoRouteMode命令的精妙之处,让你轻松驾驭布线策略,提升设计质量。setNanoRouteMode是Innovus中用于配置NanoRoute绕线行为的关键命令。通过其丰富的参数,你可以精细控制布局后阶段的绕线策略、信号完整性优化、工艺适配及设计规则修复等流程。下面,我将按功能分类总结其核心选项,并针对不同场景给出建议。

weixin_50820814的博客 3528

jadx 反编译失败,代码中含有smali代码

解决方法 jadx-gui --show-bad-code test.apk 把错误代码显示出来

qq_41236493的博客 1256

避坑指南:RK3576+Android14适配移远5G模组(RG200U)时,我遇到的3个‘巨坑’及解决方案

本文详细记录了RK3576芯片适配Android14系统与移远RG200U 5G模组过程中遇到的三大技术难题:RIL服务启动失败、HIDL兼容性矩阵配置错误及ttyUSB权限冲突。通过实战案例提供了动态库拷贝、HIDL版本链声明和SELinux策略调整等解决方案,帮助开发者高效完成5G模组集成,特别适用于基于kernel6.1的嵌入式开发场景。

weixin_30664051的博客 389

CSIT883系统分析与项目管理——Lecture3重点概念

🎈本节课,介绍了项目集成管理当中,关于NPV这个概念相关的内容,以及介绍什么是系统需求,什么时候需要开始系统需求,如何进行调查系统需求等等相关的题目,这里供大家复习参考吧!还有还有最关键的是NPV的计算,我单独写一篇博文,需要的同学快去学习吧!

AI手套的博客 1090

一步一步教学:动态调试smali代码

事前准备: 逆向工具:Apktool,Jadx 使用的调试工具:Android Studio 2.2.3 使用到一个smali的支持插件:Smalidea Smalidea插件下载地址:https://bitbucket.org/JesusFreke/smali/downloads/ 要下载后缀zip的插件包哦 安装smaliidea在Android Studio里,才能实现smali断点调试。 在安装好各项工具后,可以开始我们的逆向之旅。 Step 1:首先使用androidKiller打开apk文件,

weixin_39224267的博客 1181

VHDL六层电梯控制器及仿真

六层电梯电梯 设计要求:设计一个六层电梯控制系统要求有超载、关门中断、提前关门清除报警信电梯外人的上升请求信号,电梯外人的下降请求信号, 电梯外人上升请求信号显示电梯外人下降请求信号显示到达楼层信号 设计思路:输入有clk时钟信号(频率为2Hz) full,deng,quick,clr超载、关门中断、提前关门清除报警c_u1,c_u2,c_u3,c_u4,c_u5电梯外人的上升请求c_d2,c_d3,c_d4,c_d5,c_d6 电梯外人的下降请求 d1,d2,d3,d4,d5,d6电梯内人的...

QQ_778132974的博客 1709

linux反编译查找bug,利用smali代码去解决jadx出bug时的反编译问题

jadx可以很方便的进行反编译、但是有时候会增加了一些破坏代码后 、jadx就不能正常的解码出java代码。比如这段代码就是出错后的代码:/*r0 = isMediaUri(r9);r1 = 0;if (r0 != 0) goto L_0x0008;L_0x0007:return r1;L_0x0008:if (r9 == 0) goto L_0x0057;L_0x000a:r8 = r8.get...

weixin_33712536的博客 392

Pytorch实现之SRGAN+CBAM的结构设计

在SRGAN的残差连接中加入了CBAM注意力机制,同时设计了四类损失来训练。

LJ1147517021的博客 569

CST与MATLAB连接设置

打开MATLAB,点击"Set Path"按钮,然后点击"Add Folder"。在CST中,点击"Options"菜单,然后选择"Advanced"选项。在弹出的对话框中,点击"COMSOL"选项卡,并确保"Enable COMSOL"复选框被选中。通过上述步骤和示例代码,你可以开始使用MATLAB与CST进行集成,并根据你的具体需求进行进一步的开发和应用。通过这个简单的示例,你可以开始在MATLAB中与CST进行交互,并根据你的需求进行更复杂的操作,如参数化仿真、优化和数据处理等。

TechPulseZ的博客 1966

【亲测免费】 JADX 常见问题解决方案

### 项目介绍 JADX 是一个用于将 Android Dex 文件反编译为 Java 源代码的工具。它提供了命令行和图形用户界面(GUI)两种使用方式,能够从 APK、DEX、AAR、AAB 和 ZIP 文件中提取 Java 源代码。JADX 还支持解码 AndroidManifest.xml 和其他资源文件,并且内置了反混淆功能。 ### 主要编程语言 JADX 主要使用 Java 语言开...

gitblog_09087的博客 2141

反应动力学仿真软件:Kintecus_(11).数据输入与输出解析

在反应动力学仿真软件的二次开发中,数据输入与输出解析是至关重要的步骤。正确地解析输入数据和生成输出结果不仅能够确保仿真过程的顺利进行,还可以提高仿真的准确性和效率。本节将详细介绍如何在仿真软件中实现数据输入与输出的解析,包括文件格式、数据结构、解析方法以及实际操作示例。

kkchenjj的博客 757

安卓逆向1,mac,使用jadx,apktool,反编译apk,打包apk,签名,解析smali文件

res,就是resource,这个也是资源文件夹,为什么有两个资源文件夹,上面的不会被编译,但是这个res会被编译,这个重要,国外的游戏,汉化就是改这个文件,有些代码是不能混淆的,方法名字是不能混淆的,这个安卓应用理论的name就是不能混淆的,这个是入口,你混淆了之后,就加载不了了,找不到这个name了,lib,依赖的库,是c语言写的,so库,第三方库,系统库,自己打包的库,都在这个里面,有的把加密token的文件放到这个so文件里面。

qq_36194418的博客 1280

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

反编译工具之jadx

反编译神器之 - jadx git网址: https://github.com/skylot/jadx 简介 首先推荐功能强大的jadx,官方网站为:https://github.com/skylot/jadx,可以直接在releases页面下载其最新版,解压即可使用。 安装 Windows下安装 直接解压压缩包,安装运行即可 链接地址 Linux下安装 git clone https://github.com/skylot/jadx 运行 我们在分析应用签名算法的时候,可以很方面

chang995196962的博客 3740

Android 反编译工具选型:JADX、Ghidra、Apktool 完整对比一文选对

做 Android 反编译,到底选 JADX、Ghidra 还是 Apktool?别急着下载,先看你要分析的对象,目标不同,工具就不同。 [![Android反编译工具对比](https://raw.gitcode.com/gh_mirrors/aw/Awesome-Android-Reverse-Engineering/raw/0ade43d6b46ff19675ca4d8b8f1cc098e

gitblog_00786的博客 965

Android逆向之jadx反编译apk(二十二)

本篇目的:Android逆向之jadx反编译apkjadx 是一款开源、跨平台的一站式 Android 反编译利器,由 skylot 维护,采用 Apache-2.0 协议,GitHub 星标超 3.8 万。它集 dex 解析、java 反编译、资源还原、smali 调试于一身,支持命令行(jadx-cli)与图形界面(jadx-gui)双模式,可单文件启动,无需安装 JDK。

Android系统攻城狮 1556

Android反编译工具对比:JADX、Ghidra与Apktool哪个更适合你?

Android反编译是移动安全研究和应用分析的核心技能,而选择合适的工具直接影响效率和分析深度。本文将对比三款主流Android反编译工具——JADX、Ghidra和Apktool,帮助你根据需求选择最适合的工具。 [![Android反编译工具对比](https://raw.gitcode.com/gh_mirrors/aw/Awesome-Android-Reverse-Engineerin

gitblog_01189的博客 1253

JADX:Android应用反编译的终极指南

JADX是一款功能强大的Android应用反编译工具,能够将APK文件转换为可读性强的Java代码,是Android开发者分析和学习应用实现细节的必备工具。无论是研究第三方应用的实现逻辑,还是进行应用安全性分析,JADX都能提供高效、准确的反编译支持。 ## 📌 核心功能亮点 JADX提供了全面的反编译解决方案,主要特点包括: - **多格式支持**:兼容APK、DEX、JAR、CLASS

gitblog_00354的博客 1060

smali反编译为java失败_请问为什么这个smali文件无法被反编译成java?

JADX成功反编译package com.bzai.bzaiweigh;import android.app.Application;import android.app.Instrumentation;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm...

weixin_29457191的博客 1607

关于 smali:3. Smali 与 APK 结构理解

是 Android 平台用于执行的。

Triste__chengxi的博客 1707
上一篇: 关于android http字段X-requested-with的说明
下一篇: 拦截电脑广告
SeekSage
SeekSage 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄13年 364粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值