Android逆向--如何调试smali代码?
最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享。
本文介绍Android逆向中smali代码的调试及环境的准备。
事先准备如下工具:
Android killer:反编译APK应用为smali源码的工具
Android studio:调试smali工具
smalidea:Android Studio调试smali需要安装的插件
Android Device Monitor:用来查看待调试进程和端口
待分析应用和调试手机:废话
01
—
获取smali
我们拿到一个Android的APK应用后,使用Android killer很容易就将它转换成smali工程文件,这个就不用详细介绍了,注意如果需要请将里面用到的APKtool更新成新的,反编译完成的内容像下面这样子:
02
—
Android Studio插件安装
反编译出来的smali文件,如果Android Studio没有安装smalidea插件,是没法直接调试的,导入Android killer产生的工程,在Run菜单下,可以看到加断点的项都是灰色的:
smalidea插件是用来使Android Studio可以调试smali的插件,下载地址是:https://bitbucket.org/JesusFreke/smali/downloads/
在这个页面找smalidea,最新版本是smalidea-0.05.zip。其它的下载链接可以忽略,是做其它的事情的,这里用不上。
下面描述smalidea安装过程,从Android Studio的File-->settings菜单进入,点plugins标签进入插件安装页面:
再点击按钮 Install plugin from disk...,选择你提前下载好的smalidea压缩包再点ok进行安装:
安装完可以在Plugins页面看到安装的插件,需要重启Android Studio才能生效:
重启后,就能正常调试加断点了:
下面,就可以来调试了。
03
—
调试过程
Android Studio调试首先需要进行调试的配置,在菜单Run-->Edit Configurations...下,打开configuration页面,左上角有个+,选择remote:
出现具体的配置页面:
注意选中的端口框,需要根据Android Device Monitor中待调试进程的具体情况修改,或者直接8700。
在Android Device Monitor中,会看见进程和端口信息:
左侧第一栏是进程名,第二栏是进程号,第五栏是端口,选中一个进程,则会看见端口这栏有两个值,8xxx/8700这样子,如果调试配置中写的是8700,则在debug时,需要在ADM中选中具体进程,如果不想这样,则需要配置前面的8xxx这个值。
在下方的logcat里,还能看到进程的运行日志,有的时候需要用到,不过这里暂时用不到。
当然如果你使用adb shell命令从头开始启动应用调试,则直接使用8700就可以了。
另外,你还可以使用adb forward 命令进行端口转发,将调试手机的某个进程与调试机器配置的端口之间建立通道,从而进行调试,只是没有上面那样方便。
配置完了后,就可以正式调试了,点菜单Run-->Debug'xxxx',其中xxxx是你上面配置的调试项目名称,默认是unnamed:
你可以在smali的需要调试的地方打断点,当程序运行到你设置的断点时,就会断住,各类窗口很丰富,可在variables窗口看到或修改当前状态的一些变量,frames窗口看到调用层次,还可以在watches窗口中加寄存器变量进行观察和修改:
当然,需要注意,有些地方没办法加断点,那就在前后合适的地方加,还有些地方部分寄存器值无法查看,那就换个方式,具体问题具体分析,这里只是介绍常规方法。
04
—
总结
这是最基础的工具使用,希望能对一些朋友有帮助。
长按扫码进行关注,时刻进行交流。
Android逆向--如何调试smali代码?相关推荐
- Android逆向之调试smali代码基础
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Android逆向中调试smali代码的方法." 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享 ...
- 安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置
教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html From:Android Studio 3.6 调 ...
- 安卓逆向_12 --- jeb工具的使用 ( 动态调试 smali 代码 【 普通调试 和 debug调试 】)
From:https://www.52pojie.cn/forum.php?mod=viewthread&tid=742250 jeb 动态调试 smali 代码:https://www.bi ...
- 安卓逆向_12 --- jeb工具的使用 ( 动态调试 smali 代码 【 普通调试 和 debug调试 】)...
From:https://www.52pojie.cn/forum.php?mod=viewthread&tid=742250 jeb 动态调试 smali 代码:https://www.bi ...
- 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )
文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...
- 012 动态调试smali代码
文章目录 前言 配置调试插件 调试插件的使用 总结 常见问题 前言 之前分析游戏进行破解的时候,都是通过字符串和日志的方式来对程序进行静态分析.但是在遇到算法类型的程序时,这种方法就显得效率特别低,所 ...
- 【转载】Android逆向开发之smali语言的学习
Android逆向开发之smali语言的学习 该文转载自乱码三千 – 分享实用IT技术 smali和java基本数据类型对比 smali java B byte S short I int J lon ...
- Android逆向入门7——Smali语法学习(1)
这一节我们一起探讨smali语法和smali在Android逆向中的应用,它是Android逆向世界中不可或缺的一部分. 简单的来说,Dex反编译的结果就是Smali,Smali和dex之间的关系,我 ...
- Android Studio动态调试smail代码----环境配置
一.android studio smalidea plugin不能使用 smali语言调试网上都在推荐smalidea这个插件,但是在新版的Android studio 中好像已经不支持了(第一次安 ...
最新文章
- XPath 读书笔记
- 大连交通大学c语言考试题库,川哥的吩咐 (C语言代码)本着追大连交通大学的故事番,来简单解答一波!!!...
- Gui系统之View体系(2)---View的setContent
- 圈子 | 苏宁易购产品经理:平台支撑型产品的思维方式
- one trick pony
- jedis使用 api_通过Jedis API使用排序集
- docker export_Docker 几个相似命令的区别
- (59)UART外设驱动用户接收模块(四)(第12天)
- Ajax datatype:'JSON'的error问题Status1:200,JSON格式
- 「AI原生」时代来临?百度智能云提出AI-Native,发布新一代云基础架构「太行」
- Codeforces Round #383 Div 1题解
- 阿里云网盘来了,来搭建自己“免费“私人网盘
- 给你一份完整的自动阅读所需介绍
- SSH服务,优化,防止暴力破解
- 一些个人总结(2008)
- TypeWriter: Neural Type Prediction with Search-based Validation基于搜索的神经网络预测器
- switch基本用法
- 【shell】shell创建虚拟环境virtualenv(-bash: virtualenv: command not found)
- Java使用@Value获取不到值
- 什么叫贴片(电子元器件)
热门文章
- uniapp兼容H5和小程序订阅消息授权开发封装,使用方便
- 利用Injection插件加快Xcode编译速度
- 源码推荐:仿写映客直播 ,快速切换主题 ,星星评分控件,表格样式,可以横向移动的表格, 仿微信键盘-
- 深度分析Java的枚举类型——枚举的线程安全性及序列化问题
- 《Python和Pygame游戏开发指南》——2.16 pygame.display.update()函数
- ava.lang.UnsatisfiedLinkError:
- 添加Net4CollectionTypeFactory的原因
- VIM 必知必会12大类型操作
- 学习 Linux,101: 引导系统
- iOS处理高并发量的数据请求和数据集合的对应关系