Smalidea无源码调试 android 应用
2016-05-15 12:42
519 查看
转:http://drops.wooyun.org/tips/7181
smalidea是一款 IntelliJ IDEA/Android Studio的 smali 插件
语法高亮/错误提示
字节码级别调试
断点
单步调试
寄存器查看
本地窗口 java 语法支持,debug 模式下同样支持
支持跳转,方便追踪变量/函数/类.(Xref也支持)
查找用法
重命名
从 java 代码引用 smali 类
错误反馈...
下载插件smalidea
进入IntelliJ IDEA/Android Studio开始安装插件,进入Settings->Plugins点击
点击
要调试一个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 插件代码如下
效果如下图
如果遇到如下错误
可以使用重启 adb server 来解决
如果调试中遇到如下错误,确保关闭了其他 IDE 或者 DDMS,解除端口占用
注意:IDEA 14.1及以上版本才支持单步调试
使用 baksmali 反编译应用
转到 IDEA 中,导入新工程,选中前的目录
导入时选择
成功导入工程后右键点击 src 目录,设定
打开
安装debug应用
找到debug应用进程,启动应用
如果不用 ddms 可以使用如下步骤:
在 IDEA 配置远程调试(Run->Edit Configurations),更改debug端口为8700
Run->Debug
Connected to the target VM, address: 'localhost:8700', transport: 'socket'
断点触发后就可以单步调试
http://www.kanxue.com/bbs/showthread.php?p=1338639
https://github.com/JesusFreke/smali/wiki/smalidea
https://github.com/pylerSM/XInstaller
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 插件代码如下
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-server adb 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=1338639https://github.com/JesusFreke/smali/wiki/smalidea
https://github.com/pylerSM/XInstaller
相关文章推荐
- Android传感器
- android开发笔记之多媒体—TelephonyManager(电话管理器)
- android插件化开发——加载广播
- Android 开源项目浅读-------SwipeMenuListView-重写,第五章,滑动弹出,放手关闭功能实现
- android开发笔记之多媒体—AudioManager(控制音量)
- 【Android动画九章】-动画插值器和动画监听器
- Android Notification setLatestEventInfo方法已废弃
- Android 基本组件(一)
- Android如何解决异常问题
- Android存储(读取)之缓存CachesDir存储
- android开发笔记之多媒体—音频和视频的录制
- Android存储(读取)之内存FilesDir存储
- 快速集成android实现listview的字母A-Z排序,界面侧边字母索引
- Android的Selector与Shape
- RadioButton和CheckBox
- android开发笔记之sh脚本
- android 比较靠谱的图片压缩
- android开发笔记之多媒体—MediaPlayer + SurfaceView播放视频
- 浅谈android中加载高清大图及图片压缩方式(二)
- Android数据存储之SharedPreferences及如何安全存储