Smalidea无源码调试 android 应用
smalidea是一款 IntelliJ IDEA/Android Studio的 smali 插件
已有功能
- 语法高亮/错误提示
- 字节码级别调试
- 断点
- 单步调试
- 寄存器查看
- 本地窗口 java 语法支持,debug 模式下同样支持
- 支持跳转,方便追踪变量/函数/类.(Xref也支持)
- 查找用法
- 重命名
- 从 java 代码引用 smali 类
- 错误反馈...
安装
- 下载插件smalidea
- 进入IntelliJ IDEA/Android Studio开始安装插件,进入Settings->Plugins点击
Install plugin from disk
选中下载好的压缩包. - 点击
apply
开启应用调试
要调试一个apk里面的dex代码,必须满足以下两个条件中的任何一个:
- apk中的AndroidManifest.xml文件中的Application标签包含属性android:debuggable=”true”
- /default.prop中ro.debuggable的值为1
可选方案:
- apktool 反编译app 后在AndroidManifest.xml文件中插入android:debuggable=”true”
- hook system debug (Xinstaller)
- 修改boot.img
个人觉得改 boot.img和二次打包比较麻烦,所以这里采用 hook 方式达到开启所有应用调试的目的,xposed 插件代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public class Debug implements IXposedHookLoadPackage {
public boolean debugApps = true ;
public static final int DEBUG_ENABLE_DEBUGGER = 0x1 ;
public String tag = "IDG" ;
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (lpparam.appInfo == null ||
(lpparam.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0 ){
return ;
}
tag = tag + lpparam.packageName;
XposedBridge.hookAllMethods(Process. class , "start" , new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
int id = 5 ;
int flags = (Integer) param.args[id];
Log.d(tag, "flags is : " +flags);
if (debugApps) {
if ((flags & DEBUG_ENABLE_DEBUGGER) == 0 ) {
flags |= DEBUG_ENABLE_DEBUGGER;
}
}
param.args[id] = flags;
Log.d(tag, "flags changed : " +flags);
}
});
}
}
|
效果如下图
如果遇到如下错误
Adb rejected connection to client
可以使用重启 adb server 来解决
adb kill-serveradb start-server
如果调试中遇到如下错误,确保关闭了其他 IDE 或者 DDMS,解除端口占用
调试应用
注意:IDEA 14.1及以上版本才支持单步调试
使用 baksmali 反编译应用
baksmali myapp.apk -o ~/projects/myapp/src
转到 IDEA 中,导入新工程,选中之前的目录
~/projects/myapp
导入时选择
Create project from existing sources
成功导入工程后右键点击 src 目录,设定
Mark Directory As->Sources Root
打开
Module setting
设置对应的 JDK安装debug应用
adb install com.zkj.guimi.apk
找到debug应用进程,启动应用
如果不用 ddms 可以使用如下步骤:
» adb shell am start -D -W -n com.zkj.guimi/.ui.SplashScreen » adb shell ps |grep guimi 1 ↵ u0_a157 9879 242 883420 36360 ffffffff 00000000 S com.zkj.guimi » adb forward tcp:8700 jdwp:9879
在 IDEA 配置远程调试(Run->Edit Configurations),更改debug端口为8700
Run->Debug
Connected to the target VM, address: 'localhost:8700', transport: 'socket'
断点触发后就可以单步调试
reference
http://www.kanxue.com/bbs/showthread.php?p=1338639
https://github.com/JesusFreke/smali/wiki/smalidea
https://github.com/pylerSM/XInstaller
原文地址: http://drops.wooyun.org/tips/7181
Smalidea无源码调试 android 应用相关推荐
- Smalidea+IntelliJ IDEA/Android Studio无源码调试
smalidea是一个IntelliJ IDEA/Android Studio smali语言插件,可实现动态调试smali代码. github地址:https://github.com/JesusF ...
- JEB 无源码调试 以dvm smali字节码方式,Demo尝试
关于调试器看不到进程,无法attach的问题,网上也有很多教程,基本是修改ro.debugable =1 ,ro.secure = 0 让adbd有root权限 attach到其他进程,涉及到要修改 ...
- Windbg无源码调试驱动
文章目录 准备工具 修改OEP 修改校验和 开始调试 准备工具 windbg调试器 一台搭建好双机调试环境的虚拟机 任意一个能运行驱动的软件 CFF Explorer LoadPE 修改OEP 首先随 ...
- dnspy调试神器在IIS中无源码调试c#程序
1. Download dnSpy 6.1.8 dnSpy分32位和64位,根据需要进行下载.下载完dnSpy压缩包之后解压如下 建议右键使用管理员权限运行dnSpy.exe 此时选择菜单项 调试 & ...
- 无源码动态调试APK
0x00 工具准备 1.apktool 2.netbeans或者Intelij(android studio) ;这里使用netbeans作为例子 3.ddms 4.apk签名工具 0x01 ...
- 如何调试Android Native Framework
原文: https://zhuanlan.zhihu.com/p/24867284 如何调试Android Native Framework weishu 7 个月前 半年前写了一篇文章,介绍 如何调 ...
- java 广告sdk开发_supersonicads广告sdk逆向分析以及无源码debug java
0x00 背景 最近看到一个小游戏,但是它使用了supersonicads的sdk,广告极其多,非常烦,所以我就逆向了一下它,顺便分析了一下supersonicads的工作原理. 0x01 super ...
- Android FrameWork学习(二)Android系统源码调试
点击打开链接 通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android ...
- 自己动手调试Android源码(超简单)
在自己动手编译Android最新源码一文中,我们为自己编译了一份最新的Android源码.很多时候,我们编译源码的目的不仅仅是尝试一番,而是希望对其进行调试,并修改源码,看看其中一些关键机制的运行原理 ...
最新文章
- MPB:林科院袁志林组-​枫香-真菌互作培养体系构建
- x86 X64指令集之间的关系
- p2596 书架(Treap)
- C#教程3:基本语言结构
- Hibernate持久化对象三种状态
- C/C++ OpenCV均值滤波
- java eight,Java语法基础学习DayEight
- World Wind入门
- 计算机网络(二)—— 物理层(1、2、3):物理层的基本概念、物理层的下面的传输媒体、传输方式
- 万用表的灵活使用,不仅只有基本使用方法!
- Java 8 Update 91 (8u91)
- strings.Builder 源码阅读与分析
- 今天的一点杂感-20220414
- picpick尺子像素大小精度不够准确_picpick尺子像素大小精度不够准确_【论文解读】像素级分割里程碑算法——FCN全卷积神经网络......
- 秒杀tomcat优化
- Python写个小游戏:蛇棋(下)
- 阅读真题 | 真题阅读 做题记录 一
- a21_scala 匿名子类
- DateUtils学习笔记
- 漏洞概述-0day漏洞利用原理(0)