如何对反编译的安卓应用进行调试并修改

news2024/11/17 20:20:10
  • 安卓修改大师可以在没有源代码的情况下,直接反编译已经打包的APK安装包,通过修改SMALI代码实现添加和去除部分功能,并在应用的任何地方添加任意代码,增加任意任何您想实现的功能。通过这种方式,把该应用变为您自己的应用(通过安卓修改大师反编译生成的新应用仅供个人学习反编译知识,严禁用于商业用途)。
  • 大部分情况下,通过安卓修改大师反编译打包的应用都可以正常运行。如果您不幸遇到打包的程序运行崩溃,您必须要借助SMALI代码调试功能来定位错误源头。通过调试smali也可以跟踪破解或者游戏通关的逻辑。
  • 通常通过Android studio配合安卓修改大师进行SMALI动态调试(您也可以用Eclipse),下面是调试环境的配置和具体的动态调试方法。
  • 如何对反编译的安卓应用进行调试并修改

          
    • 如何对反编译的安卓应用进行调试

      1、      所需工具
      ①Android Studio最新版,下载地址:请自行百度下载
      ②Smalidea插件,下载地址:smalidea-0.05.zip

      2、      Smalidea插件配置步骤
      安装并运行Android studio,然后在Android studio顶部菜单中选择File->Settings->Plugins,安装之前下载的Smalidea插件。

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616220413854-617943589.png

      3、打调试安装包并运行

      在打包签名窗口,选择调试安装包选项,按照向导进行打包,该方式所打的安装包包含调试信息,可以通过Android Studio进行Smali代码的动态调试。

      请注意,该窗口会显示调试端口和调试地址,在后续的Android Studio参数配置中,会用到这两个参数。调试地址就是反编译的项目地址,您可以在本窗口点击后面的复制按钮直接复制。

      打包完成后,根据向导提示安装到手机上。注意窗口底部的USB连接状态的提示,请先将您的手机打开调试模式,并连接到电脑,点击安卓修改大师底部的刷新按钮,确保您的手机和安卓修改大师保持连接状态。

      调试包安装到手机后,您就可以打开Android Studio进行动态调试了。

      安装包安装到手机上后,在手机上将会出现下图的等待调试的窗口,请不要关闭该窗口,只有在该窗口打开的情况下,才能进行Smali动态调试。

      4、配置Android studio进行调试 

      打开Android Studio,选择Import Project(见下图),也可以在打开的Android Studio中点击顶部的菜单(File/New/Import Project..),然后选择之前强调的调试目录,如图所示:

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616220644167-1801955265.png

      然后选择Create project from existing sources,之后一直选择next。
       

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616220711745-239639306.png

                 
      成功导入工程后右键点击 Smali目录,设定Mark Directory As->Sources Root
       


      配置远程调试的选项,选择Run-->Edit Configurations:
       

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616220921667-1473804168.png

       
      增加一个Remote调试的调试选项(如果看不到Remote调试选项,请点击左上角的绿色加号添加Remote调试选项),端口选择:8700
       

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616220939667-429384959.png

          

      设置端口号 8700    

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616220957526-1101324191.png

         

      之后选择File-->Project Structure 配置JDK    


       

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616221015338-1600841699.png

                 
       

      JDK设置为1.8以上
       

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616221109120-1445199850.png

              
      下好断点之后Run->Debug,  

       

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616221208776-173578043.png

                   
      稍等几秒,断点触发后就可以单步调试      

      https://images2015.cnblogs.com/blog/282719/201606/282719-20160616221228995-47769053.png

                    

      针对运行闪退方面的问题,重点调试入口Activity和Application类(见安卓修改大师源代码修改/程序入口对应的类)的OnCreate,OnResume和类的初始化方法。在调试开始行的左侧,行数字的右侧点击,放置调试点。

             

      然后就可以通过顶部的Run菜单提供的调试命令进行调试了,一般是通过设置调试点后,点击顶部的调试按钮开始调试,通过不断的按F8逐行调试,观察运行到那一行报错,根据错误有针对性的修改代码或者删除代码行来解决问题。

      例如,某个应用运行闪退,通过调试发现只要运行到下图的这一行立刻崩溃,通过删除这一行或者在这一行前面添加一个#号注释该行,保存后,在安卓修改大师重新打包,App即可正常运行了。

       

      准备工作

      安装Android Studio和smalidea

    • 安卓修改大师/工具箱/网络抓包/下载.. 下载本次用来调试的示例apk

    • https://dl.google.com/dl/android/studio/install/3.5.2.0/android-studio-ide-191.5977832-windows.exe 下载 Android Studio 3.5.2

    • JesusFreke / smalidea / Downloads — Bitbucket 下载smalidea-0.05.zip

    • AlertDialog;->show()V 提示信息弹窗,去掉弹窗或者改弹窗内容会用到
      ProgressDialog;->show()V 显示进度条
      /Dialog;->show()V  弹出自定义窗口
      signatures:[Landroid/content/pm/Signature; 获取签名,去掉签名判断用到
      VersionInfo;->versionCode:I 获取版本号,去掉版本更新会用到
      JSONObject;->toString(I)Ljava/lang/String;  接口返回解析json
      …
      其他的触类旁通
    • 附件:经常用到的调试断点关键字
       

    • 小实验:尝试修改弹出窗口内容。尝试去掉弹出窗口。

    • 调试会自动命中设置的断点,并查看每个字段变量的值。利用这种方式,可以在预知某个字段或者方法的情况下,通过设置断点来找到代码位置,并通过修改变量实现改变运行结果。

    • 反编译/打包签名/项目打包,打包完毕后,会自动安装到设备上。设备上面可以看到调试窗口提示。Android studio右上角点击带箭头的虫子图标,即可开始调试。

    • 添加调试断点:预设一个调试场景,本次调试是为了找到启动弹窗,通过Edit/Find/Find in Path搜索所有的AlertDialog;->show()V,点击左侧添加断点。

    • 反编译/打包签名/外部打开编辑/用Android Studio打开编辑,打开的Android Studio将打开Smali项目,注意右下角弹出Config的弹窗,要选择允许配置。然后左上角切换到project的模式。

    • 反编译/打包签名/打包参数/打包类型,选择调试安装包的打包模式。反编译/打包签名/打包结果选项,去掉卸载并安装的勾选,方便调试。

    • 底部连接真机或者雷电9,以便查看调试状态,建议雷电9打开root模式,方便调试。

    • 将上述下载的测试调试的apk拖拽到修改大师界面进行反编译

    • 反编译并设置为调试状态打包

    • 安卓修改大师/工具/参数配置/Android studio程序路径设置,配置安装的Android Studio3.5.2的程序路径到安卓修改大师。

    • 打开菜单 File/Settings/Plugins,右上角的设置图标打开Install plugins from disk,安装smalidea。然后重启集成开发环境。

    • 安装Android Studio 3.5.2,更新和配置环境

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

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

相关文章

C++STL库中stack

文章目录 stack的介绍 stack的常用接口 stack的模拟实现 关于栈的相关OJ题 一、stack的介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的&a…

英文论文(sci)解读复现:基于YOLOv5的自然场景下苹果叶片病害实时检测

对于目标检测算法改进,但是应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的SCI论文,并对…

FitBot-一款先进的以健康为中心的聊天机器人

在健康意识高涨,追求均衡生活方式成为普遍追求的时代,营养问题无疑是核心支柱。然而,饮食计划的复杂性和大量的营养数据往往成为我们实现这种平衡的障碍。例如糖尿病患者,他们需要持续和准确的营养指导来有效管理血糖水平。如果能…

Mendix是如何支持多语言的?

前言 国际化的支持能力,至关重要。这类功能的缺失,将会在市场竞争、用户体验、合作关系以法律法规方面遇到重大挑战,这些都是可能对其成功产生致命影响的问题。 比如在某些国家和地区,政府可能会对不支持本地语言和货币的软件系…

深度学习,神经网络介绍

目录 1.神经网络的整体构架 2.神经网络架构细节 3.正则化与激活函数 4.神经网络过拟合解决方法 1.神经网络的整体构架 ConvNetJS demo: Classify toy 2D data 我们可以看看这个神经网络的网站,可以用来学习。 神经网络的整体构架如下1: 感知器&…

el-table使用xlsx实现导入文件编辑功能

需求:列表根据xlsx文件导入后,和列表进行对比,之后实现编辑功能 1.下载xlsx 我下的是之前的版本,新版不知道兼不兼容,这个包900多k npm install xlsx0.14.5 2.在需要使用表格导入的页面引入 import XLSX from &quo…

从0到1开发go-tcp框架【2-实现Message模块、解决TCP粘包问题、实现多路由机制】

从0到1开发go-tcp框架【2-实现Message模块、解决TCP粘包问题、实现多路由机制】 1 实现\封装Message模块 zinx/ziface/imessage.go package zifacetype IMessage interface {GetMsdId() uint32GetMsgLen() uint32GetMsgData() []byteSetMsgId(uint32)SetData([]byte)SetData…

MySQL数据库 【索引事务】

目录 一、概念 二、索引的优缺点 1、索引的优点 2、索引的缺陷 三、索引的使用 1、查看索引 2、创建索引 3、删除索引 四、索引底层的数据结构 1、B树 2、B树 五、索引事务 1、概念和回滚 2、事务的使用 3、事务的基本特性 4、并发会遇到的问题 &#xff08…

Python程序设计基础:字典与集合(二)

文章目录 一、字典的整体操作1、字典的遍历2、字典的排序3、字典的合并 二、创建与访问集合1、集合的创建2、集合的访问 三、集合的基本操作1、集合的增、删、查2、集合的数学运算 一、字典的整体操作 字典的整体操作是指以字典为操作对象,对字典进行遍历、排序以及…

hdu foreverlasting and fried-chicken

题意: 在一个有n个点和m条边的图中找到形状是上图的子图,输出个数 思路: 仔细观察上图,设第二行的那个点为x,最后一行的点为y,那么可以知道,如果x和y都和相同的所有点中取四个点分别和xy相连…

DUBBO服务多网卡,服务调用失败

如果服务器是多网卡的,比如安装了docker,有一个docker虚拟网卡,一个实体网卡eth0,当我们运行springboot应用后,dubbo注入到zk的地址是 docker虚拟网卡的地址172网段,而不是实际内网地址192网段,…

OpenLayers实战,OpenLayers使用wind-layer插件实现风场动态效果

专栏目录: OpenLayers入门教程汇总目录 前言 本章讲解如何使用OpenLayers的气象风场插件wind-layer实现气象风场动态效果,该插件除了可用于OpenLayers之外,还可用于mapgl、leaflet和cesuim等二维/三维地图引擎,还是很强大的,废话少谈,让我们立刻开始实现吧。 二、依赖和…

如何将论文中的字快速复制出来?图片如何提取文字?

在日常的办公中,我们经常会遇到需要将纸质文件里的文字提取出来,再转换为电子档的情况,如果我们采用手动输入的话,不仅速度太慢,而且还可能因此耽误到后边的工作,是不是已经有小伙伴遇到这种现象&#xff0…

element中tabs组件,click事件点击拿到当前item的所有数据

话不多说,直接上代码: 添加一个:value,然后在用JSON.stringify(item)转一下就可以了,这样就会存在$attrs.value这个里面了。 接着在点击事件里面获取使用el.$attrs.value,注意这里在拿到这个值时,再用JSON…

锌离子荧光探针TSQ,109628-27-5,具有很好的选择性荧光探针

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ PART1----外观以及性质: 锌离子荧光探针TSQ(CAS号:109628-27-5),锌离子荧光探针TSQ是用于检测锌离子的荧光探针。 TSQ与Zn离子结合后,吸收波长和发射波…

如何创建一个SpringBoot项目

欢迎来到南方有乔木的博客!!! 博主主页:点击点击!戳一戳!! 博主名:南方有乔木 博主简介: 一名在校大学生,正在努力学习Java语言编程。穷且意坚,不坠青云之…

sort排序报错:java.lang.UnsupportedOperationException: null

文章目录 问题原因解决方式 问题 Groovy 调用 .sort{} 排序报错:java.lang.UnsupportedOperationException: null solutionScenario2SolutionProcessList.sort { it.idx } 原因 调用的sort的对象是Collections的内部类对象UnmodifiableRandomAcessList 解决方式 调用 coll…

数据结构:单链表的实现(C语言)

个人主页 : 水月梦镜花 个人专栏 : 《C语言》 《数据结构》 文章目录 前言一、单链表实现思路和图解1.节点的定义(SListNode)2.申请一个节点(BuySListNode)3.单链表打印(SListPrint)4.单链表尾插(SListPushBack)5.单链表的头插(SListPushFront)6.单链表的…

【ChatGPT辅助学Rust | 基础系列 | Hello, Rust】编写并运行第一个Rust程序

文章目录 前言一,创建项目二,两种编译方式1. 使用rustc编译器编译2. 使用Cargo编译 总结 前言 在开始学习任何一门新的编程语言时,都会从编写一个简单的 “Hello, World!” 程序开始。在这一章节中,将会介绍如何在Rust中编写并运…

音频编辑必备技能:怎么将音频转换mp3

丽萨:嘿,听说你最近在研究音频格式转换的方法,有眉目了吗? 凯瑞:没错,我下载了很多高清音乐,发现有些格式的音频文件在我的播放器上打不开,所以想一个转换工具。但是网上软件太多&a…