IDA动态调试Android的DEX文件
2016-01-28 14:44
771 查看
0x00
我们以阿里比赛第一题为例,来动态调试dex文件。参考IDA动态调试Android的DEX文件一文,首先AndroidManifest.xml里面android:debuggable="true"。
0x01
下面详细说步骤。
1、将classes.dex拖入IDA中。
2、选择Debugger->Debugger options->Set specific options,在Package Name和Activity中填入主Activity的包名和类名。
![](http://img.blog.csdn.net/20160128141215513?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、选择Debugger->Process options,将Port改为8700。
![](http://img.blog.csdn.net/20160128141520848?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4、下断点
在左边的侧边栏搜索onCreate。
![](http://img.blog.csdn.net/20160128141623359?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击MainActivity_onCreate@VL,设置断点。
![](http://img.blog.csdn.net/20160128141752195?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5、手机端开启android_server
![](http://img.blog.csdn.net/20160128141937875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
6、端口转发,打开要调试的Activity
![](http://img.blog.csdn.net/20160128142104204?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
此时应用的界面处于等阶段,如下:
![](http://img.blog.csdn.net/20160128142238780?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
注意此时在第7步前一定要关闭eclipse,也就是关闭ddms,否则IDA提示can’t bind socket。
7、选择Debugger->attach to process。出现如下界面:
![](http://img.blog.csdn.net/20160128142551175?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
接下来,出现的界面就一直Cancel就好了。
我们看到程序停在的MainActivity的onCreate方法。按F8单步执行。
![](http://img.blog.csdn.net/20160128142757896?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
8、怎么在onClick方法下断点呢?
我们使用双开IDA ,在静态分析中,左侧边栏搜索onClick。
![](http://img.blog.csdn.net/20160128143329122?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击MainActivity$1_onClick@VL,如下图:
![](http://img.blog.csdn.net/20160128143449905?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
所以在动态调试的IDA中,按G,调到7A88C的地址。
![](http://img.blog.csdn.net/20160128143850521?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
然后下断点。
![](http://img.blog.csdn.net/20160128143952665?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
然后点击F8,让程序继续运行,刚才停在onCreate方法。
此时IDA界面如下:
![](http://img.blog.csdn.net/20160128144051274?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
应用程序界面如下:
![](http://img.blog.csdn.net/20160128144121774?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
此时输入密码,点击登录,程序会停留在刚才下的断点位置。
![](http://img.blog.csdn.net/20160128144306056?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
此时按F8,就可以单步调试onClick方法了。
和IDA动态调试so中少了一步jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost。
我们以阿里比赛第一题为例,来动态调试dex文件。参考IDA动态调试Android的DEX文件一文,首先AndroidManifest.xml里面android:debuggable="true"。
0x01
下面详细说步骤。
1、将classes.dex拖入IDA中。
2、选择Debugger->Debugger options->Set specific options,在Package Name和Activity中填入主Activity的包名和类名。
3、选择Debugger->Process options,将Port改为8700。
4、下断点
在左边的侧边栏搜索onCreate。
点击MainActivity_onCreate@VL,设置断点。
5、手机端开启android_server
6、端口转发,打开要调试的Activity
此时应用的界面处于等阶段,如下:
注意此时在第7步前一定要关闭eclipse,也就是关闭ddms,否则IDA提示can’t bind socket。
7、选择Debugger->attach to process。出现如下界面:
接下来,出现的界面就一直Cancel就好了。
我们看到程序停在的MainActivity的onCreate方法。按F8单步执行。
8、怎么在onClick方法下断点呢?
我们使用双开IDA ,在静态分析中,左侧边栏搜索onClick。
点击MainActivity$1_onClick@VL,如下图:
所以在动态调试的IDA中,按G,调到7A88C的地址。
然后下断点。
然后点击F8,让程序继续运行,刚才停在onCreate方法。
此时IDA界面如下:
应用程序界面如下:
此时输入密码,点击登录,程序会停留在刚才下的断点位置。
此时按F8,就可以单步调试onClick方法了。
和IDA动态调试so中少了一步jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost。
相关文章推荐
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android线程和Handler基础入门
- Android文件资源(raw/data/asset)的存取
- android 更新下载apk
- Android中asset文件夹和raw文件夹区别与用法
- Android中跳转到系统设置界面大全
- Android Design Support Library常用控件(下)
- 从布局动画引入ListView滑动时,每一Item项的显示动画
- Android抓取各种log的方法
- Android Service与Activity之间通信:通过Binder对象、Broadcast广播
- (android高仿系列)今日头条 --新闻阅读器 (一)
- Android 开发最佳实践
- Android Studio混淆相关
- Android实现推送方式解决方案
- Android 开发过程中常用的工具类
- Android Studio设备背景色
- TextView划线 android
- Android平台的专业术语
- 关于getChildStaticTransformation在android4.1失效导致galleryFlow错乱问题
- Android Studio 导入项目和解决常见的错误