Android逆向|AndroidStudio的两种动态调试技巧

admin 2025年1月2日10:37:26评论13 views字数 2215阅读7分23秒阅读模式

本篇是《Android逆向入门教程》的第六章第10节,具体课程详情可点击下方图片查看:

Android逆向|AndroidStudio的两种动态调试技巧

每一章节详细内容及实验材料可通过加入底部免费的【Android逆向成长计划】星球获得!

声明:所有实验含部分虚构,纯属技术练习,未对真实环境造成任何影响。也请勿将相关技术用于非法操作,否则责任自负。

0x01 简介

    在上两篇的文章中,我们通过jeb实现了静态分析以及动态调试,而本篇文章则是教会大家使用另外一个工具来进行动态调试,这个工具就是AndroidStudio。使用此工具调试的优势在于无需修改寄存器的值类型即可查看对应具体的值,而在jeb中有时修改寄存器值的类型之后,忘记将类型修改回去而继续调试导致程序崩溃。本次的实验app依然是上一次提及的注册机app。

Android逆向|AndroidStudio的两种动态调试技巧

0x01 普通模式调试

1.下载并安装AndroidStudio工具和smalidea插件(百度均可下载)。

2.安装smalidea

打开AndroidStudio工具,点击File,选择Settings,点击Plugin,再点击installplugin from disk。找到之前我们下载的smalidea插件选中点击OK,插件就添加成功了,会弹出弹窗,提示重启AndroidStudio,点击重启。

Android逆向|AndroidStudio的两种动态调试技巧

3.反编译待调试的apk

通过apktool工具反编译apk获取smali文件(也可以通过AndoridKiller反编译的整个项目导入AndroidStudio中),修改Androidmanfest.xml中android:debuggable="true"。需要注意的是,我们前几篇文章并未提及修改Androidmanfest.xml中android:debuggable属性值是因为在雷电模拟器中底层已经开启调试模式,在真机中调试的时候我们需要刷机使其始终开启调试模式,或者每次调试app的时候检查Androidmanfest.xml中android:debuggable属性值,使其为true。

详细操作步骤截图如下:

Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧

4.调试环境配置

在AndroidStudio工程中右键点击smali文件夹,设定MarkDirectory as -> Sources Root。

Android逆向|AndroidStudio的两种动态调试技巧

打开AndroidStudio的File-> Project Structure选择,选择对应的JDK。

Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧

配置远程调试的选项,选择Run–>EditConfigurations选项,点击“+”号,新建remote类型调试器,设置Name,修改端口号,可以选择未被占用的任意端口,这里设置为8700

Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧

然后打开smali的MainActivity,定位到checkSN方法,在方法的开始处下断点(左键点击)

Android逆向|AndroidStudio的两种动态调试技巧

5.打开雷电模拟器并启动注册机app,然后在cmd命令框输入命令“adbshell ps”查看启动app的进程pid。

Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧

然后执行命令“adbforward tcp:8700jdwp:3267”进行端口转发,其中的“tcp”是之前配置调试环境时指定的端口号,“jdwp”这里指的是我们要调试的程序的进程pid。这里是将本地端口(PC端口)映射到远程端口(手机端口),之后PC端访问8700端口的数据包,会自动转发到手机的3267端口。

Android逆向|AndroidStudio的两种动态调试技巧

之后打开AndroidStudio, 在菜单中找到“debug”调试按钮,点击该按钮开始调试,出现下面的“socket”信息,这就说明附加成功了。

Android逆向|AndroidStudio的两种动态调试技巧

然后我们在模拟器中输入用户名和任意16位注册码。点击注册按钮,发现程序被断下来了,出现了参数寄存器的值。

Android逆向|AndroidStudio的两种动态调试技巧

然后介绍调试的几个按钮

Android逆向|AndroidStudio的两种动态调试技巧

根据上一篇文章分析我们也知道,注册码的值是存储在v6寄存器中,因此我们在那里下断点,然后运行到此就可以获取到正确的注册码。有朋友可能会疑问为什么这里显示的是具体参数名的值而不是v6的值,这是因为AndroidStudio动态调试的时候自动将v6寄存器的参数名识别出来并且显示,这也是AndroidStudio相较于jeb的优势所在,到此我们也就完成的AS的普通模式调试,他的调试流程相较于jeb复杂,但是熟练起来也是非常好用的一款工具。

Android逆向|AndroidStudio的两种动态调试技巧

0x02 调试模式调试

AndroidStudio的调试模式调试的使用方式不同依然在于启动。我们通过命令“adbshell am start -D -n  应用程序包名/应用程序入口界面”启动我们的app

Android逆向|AndroidStudio的两种动态调试技巧
Android逆向|AndroidStudio的两种动态调试技巧

然后输入“adbforward tcp:8700jdwp:3579”回车转发端口,转发成功后,点击调试按钮开始调试,后面的流程和普通模式调试完全一致。到此我们就讲完AndroidStudio的两种动态调试。

团队公开知识库链接:

https://www.yuque.com/whitecatanquantuandui/xkx7k2

知识星球:

Android逆向|AndroidStudio的两种动态调试技巧

Android逆向|AndroidStudio的两种动态调试技巧

往期经典

Android逆向入门成长计划【免费知识星球+微信交流群】

《从入门到秃头之PWN蛇皮走位》

漏洞挖掘|条件竞争在漏洞挖掘中的妙用

漏洞笔记|记一次与XXE漏洞的爱恨纠缠

移动安全-APP渗透进阶之AppCan本地文件解密

内网渗透之从信息收集到横向独家姿势总结-linux篇

HVV前奏|最新版AWVS&Nessus破解及批量脚本分享

Android抓包总结-HTTPS单向认证&双向认证突破

图形验证码绕过新姿势之深度学习与burp结合

Android逆向|AndroidStudio的两种动态调试技巧

扫描二维码 |关注我们

本文始发于微信公众号(WhITECat安全团队):Android逆向|AndroidStudio的两种动态调试技巧

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日10:37:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android逆向|AndroidStudio的两种动态调试技巧http://cn-sec.com/archives/532022.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息