前言

很早就知道用Netbeans能够单步调试smali,一直拖到现在才真正的自己实现了一次~ 下面是详细步骤!

0×1

环境及工具

a.apktool_2.0.0b9 下载地址:http://connortumbleson.com/2014/02/apktool-2-0-0-beta-9-released/

b.Netbeans 6.8版本 下载地址:http://dlc.sun.com.edgesuite.net/netbeans/6.8/beta/bundles/netbeans-6.8beta-ml-windows.exe

c.一个模拟器

0×2

详细步骤:(以test.apk为例)

第一部分:生成可供调试的apk

a.加-d参数进行反编译

 
 
1
java -jar apktool_2.0.0b9.jar d -d test.apk -o out

b.通过查看AndroidManifest.xml获得入口activity,然后找到oncreate()函数。在

 
 
1
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

后添加:

 
 
1
invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

c.重打包

 
 
1
java -jar apktool_2.0.0b9.jar b -d out -o debug.apk

d.签名,然后安装debug.apk

成功生成了一个支持调试的apk文件

第二部分:netbeans设置

a.删除out目录下的build文件夹

b. 打开netbeans,选择“文件”-“新建项目”-“基于现有源代码的java项目”

c. 在“项目文件夹处”选择out目录

d. 在“源包文件夹”出选择out目录下的smali文件夹

e. 点击完成,项目创建完毕

第三部分:开始调试

a.在模拟器中运行刚刚安装的debug.apk,程序会处于挂起状态。

b.在netbeans中找到入口activity的oncreate函数,在刚才invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

下一行下断点

c. 在netbeans中,选择“调试”-“连接调试器”

d. 依次设置:
调试器:JPDA
连接器:SocketAttach
传输:dt_socket
主机:127.0.0.1
端口:8700 (端口号可以通过DDMS中看到)
超时:[可不填]

e. 确定,即完成连接调试,可以发现IP停在了刚才下断点的地方。

f. 可以看到,apktool2.0+netbeans 6.8支持显示寄存器的值。

查看端口号:

调试成功:

0×3

单步调试一个实例

在Challenge1Verifier.java文件中的某一行下好断点

F5让程序运行起来,在模拟器中选择关卡1、随意输入:

点击按钮,程序会断在刚刚下好的断点处,可以看到程序已经获取到了用户名和注册码

单步能够清楚的看到程序的流程, 这里就不具体的写出过程了。到最后比较处:

很清楚的能看到,通过用户名计算出来的值‘38808’和注册码进行比较!

正确一组:

abcd
38808

写在最后

动态调试smali网上资料很多,要是喜欢玩算法的话,动态跟踪smali是一个很不错的选择~

相关文章:

使用Netbean和Apktool调试smali

apktool 2.0+netbeans 7.3调试apk

Smali调试

Debugging Smali code with apk-tool and NetBeans works!

本文出自 0n1y3nd's Blog,转载时请注明出处及相应链接。

本文永久链接: http://0nly3nd.sinaapp.com/?p=576

Netbeans 6.8 + apktool_2.0.0b9 动态调试smali文件的更多相关文章

  1. 动态调试smali代码学习记录

    预备知识 DDMS Dalvik Debug Monitor Serivce,Dalvik调试监控服务,为Android SDK提供的一款拥有监控Dalvik虚拟机的调试软件,启动文件位于<An ...

  2. Android studio动态调试smali

    前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会.   0x01 ...

  3. 使用IDEA动态调试smali代码

    原创,转载请注明出处. 一般java ide(如eclipse.idea)都可用来进行smali的动态调试,这里选择IDEA. 第1步:使用apktool反编译apk java -jar apktoo ...

  4. Android Studio动态调试smali代码

    工具: Android Studio版本: 3.0.1 smalidea插件: https://github.com/JesusFreke/smali/wiki/smalidea. 反编译工具:本节先 ...

  5. AndroidStudio+ideasmali动态调试smali汇编

    0x00    前言 之前对于app反编译的smali汇编语言都是静态分析为主,加上一点ida6.6的动态调试,但是ida的调试smali真的像鸡肋一样,各种不爽,遇到混淆过的java代码就欲哭无泪了 ...

  6. 动态调试smali代码

    Android Killer对应用进行反编译为smali代码,看看Manifest文件中application标签里面是否有android:debuggable="true",没有 ...

  7. IDA动态调试so文件出现SIGILL

    用ida6.6 调试android的so文件时经常会报SIGILL的错误,意思是指令非法.而且这种错误基本都是发生在系统函数内部,像我遇到过的mmap,fopen,fgets等等.在这些函数内部如果用 ...

  8. IDA动态调试SO文件

    1. 所需工具 IDA Pro 6.6. 安卓SDK工具 2. 模拟器设置 将ida所在目录的dbgsrv文件夹内的android_server文件push到模拟器中. 设置777属性 启动调试服务器 ...

  9. apktool + eclipse 动态调试APK

    用了会AndBug,尽管挺强大的可是作为习惯了OD.EDB作为动态调试工具的人,自然有些不习惯,于是乎寻求新的动态调试解决方式.但大多数都是NetBeans + apktool.想着还得多下一个IDE ...

随机推荐

  1. angular跨域访问的问题

    CORS跨域资源共享 跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源. Form responseHeaders = (Form) ...

  2. myeclipse 之 快捷键

    简单记录一下,新装了个机器,win7系统,想设置一下自己习惯的快捷键 如:ctrl+alt+方向键,复制行,发现设置不上,原先的自带的也失效,设置一下ctrl+alt+其它键,ok可以使用,这说明某些 ...

  3. Jenkins环境集成第一弹

    1. 起因 策划经常过来让我打包给他们测试,过于频繁影响到了自己的进度,决定弄一个打包工具让他们自己打包,在网上搜索了一下貌似有几个比较成熟的工具,Travis,Jenkins等等. 在网上也搜索到了 ...

  4. Android OpenGL ES(十一)绘制一个20面体 .

    前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形.其它所有复杂的2D或3D图形都是由这些基本图形构成. 本例介绍如何使用三角形构造一个正20面体.一个正20面体,有12个顶点,20 ...

  5. split和join函数的比较

    关于split和join方法 处理对象字符串.split拆分字符串,join连接字符串 string.join(sep): 以string作为分隔符,将seq中的所有元素(字符串表示)合并成一个新的字 ...

  6. @property(nonatomic) UIViewAutoresizing autoresizingMask;

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

  7. Flask architecture

    论文The Flask Security Architecture: System Support for Diverse Security Policies 介绍了Flask architectur ...

  8. gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer

    英文:https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Optimize-Options.html#Optimize-Options 少优化->多优化: ...

  9. 学习笔记——策略模式Strategy

    策略模式,与模板模式一样,都是为了将接口和算法实现解耦,但策略模式更主要是整体算法的替换,而模板模式主要是流程一致,部分算法的替换. 个人理解为,一般算法替换,使用策略模式,当算法流程一致,可以提取为 ...

  10. java OPENCV 连通域, Imgproc.findContours 例子,参数说明

    http://stackoverflow.com/questions/29491669/real-time-paper-sheet-detection-using-opencv-in-android/ ...