原创,转载请注明出处。

一般java ide(如eclipse、idea)都可用来进行smali的动态调试,这里选择IDEA。

第1步:使用apktool反编译apk

java -jar apktool_2.0.0rc4.jar d -d 123.apk -o out

注意:

apktool的版本问题,有的版本没有-d选项

-d选项代表反编译出来后缀是.java而不是.smali,但也不是真正的java代码,这样是让IDEA识别出java文件然后使用JDWP进行远程调试,如下:

第2步:更改debug属性及在入口添加waitDebug

2.1

更改AndroidManifest.xml中的android:debuggable=”true”

2.2

找到入口Activity,在其onCreate方法开始处添加android.os.Debug.waitForDebugger();

对应的smali代码为:

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

第3步:重打包并签名

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

java -jar signapk.jar pub.pem prv.pk8 debug.apk signed.apk

第4步:新建java工程,导入smali代码,并在关键位置下断

4.1

新建java项目,项目位置填为之前反编译出的out目录

4.2

找到关键位置下断点,这个“关键位置“就具体情况具体分析了。

这里以示例apk为例下在onClick函数处。

第5步:远程调试

5.1

打开ddms,然后运行程序。

手机会出现对话框或白屏来等待调试

ddms出现如下情景:

红色小虫代表此进程正等待调试

29954为pid

8600为此进程的远程机器调试端口号,8700为通用备用端口号

5.2

配置远程调试选项

Host:localhost

Port:8600

调试模式:Attach

项目:out

这里说一下调试模式Attach和listen的区别,Attach是调试服务端(被调试程序运行的机器)启动一个端口等待我们(调试客户端)去连接,Listen是我们(调试客户端)监听一个端口,当调试服务端准备好了就会连接进行调试。一般习惯选择Attach。

5.3

开始调试

这里介绍一下JDWP协议,JDB Client(被调试程序)在被调试时会启动jdwp线程通过JDWP协议与JDB Server(调试端)进行通信,JDWP协议用于传输调试的行号及局部变量等信息,这个就是为什么一开始反编译为java文件也可以调试的原因了。

当开始调试时红色小虫会变为绿色,说明已经连接上远程调试服务端了。

输入用户名admin和密码abc123

然后在下方就可以看到,左侧为程序的方法调用栈区,显示了程序执行到断点处所调用过的方法,越下面的方法被调用的越早。右侧为方法的变量及值,可以右键更改。可以看到刚刚输入的用户名admin和密码abc123。

使用F8单步调试,F7单步跳入,shift+F8单步跳出

接下来就不多说了。

总结:

这篇文章也是初步的介绍了一下apk的动态调试方法,然而调试、反调试、反反调试处于不断的对抗当中,了解java及android中调试系统的原理以及破除反调试的方法才能从容面对各种坑。

动态分析一般会比静态分析效率更高,但是现在一般程序也不会这么轻易就能调试起来,比如设各种坑让人难以调试,核心算法逐渐写到so里(可以使用ida动态调)。在逆向分析时,还得动静结合,多思考,多学习。

使用IDEA动态调试smali代码的更多相关文章

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

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

  2. Android Studio动态调试smali代码

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

  3. 动态调试smali代码

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

  4. Android studio动态调试smali

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

  5. Android调试系列—使用android studio调试smali代码

    1.工具介绍 使用工具 android killer:用于反编译apk包,得到smali代码 android studio:调试smali代码工具,或者使用idea,android studio就是在 ...

  6. Netbeans 6.8 + apktool_2.0.0b9 动态调试smali文件

    前言 很早就知道用Netbeans能够单步调试smali,一直拖到现在才真正的自己实现了一次~ 下面是详细步骤! 0×1 环境及工具 a.apktool_2.0.0b9 下载地址:http://con ...

  7. android动态调试samli代码(转)

    转载自看雪http://bbs.pediy.com/showthread.php?t=189610,非常感谢原作者分享! 跟踪apk一般的做法是在反编译的smali代码中插入log输出,然后重新编译运 ...

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

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

  9. iOS程序 防止动态调试和代码注入

    http://ruixiazun.blog.163.com/blog/static/9068791820141173588694/ iPhone真实的运行环境是没有sys/ptrace.h抛出.ptr ...

随机推荐

  1. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wx ...

  2. java.lang.NoSuchMethodError: org.apache.commons.io.FileUtils.getTempDirectory()Ljava/io/File;

    我出现这个问题的原因是使用ueditor上传图片 如果不是commons.io的jar包缺失,就是jar包有冲突 另外:最新的ueditor(1.4.3.1)使用的是commons-io-2.4.ja ...

  3. Nginx的10万并发内核参数优化

    关于内核参数的优化: net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000.net.ipv4.ip_local_port_range = 10 ...

  4. 关于Lambda表达式的理解

    在.NET 1.0的时候,大家都知道我们经常用到的是委托.有了委托呢,我们就可以像传递变量一样的传递方法.在一定程序上来讲,委托是一种强类型的托管的方法指 针,曾经也一时被我们用的那叫一个广泛呀,但是 ...

  5. hdu 2033

    水题 AC代码: #include <iostream> using namespace std; int main() { int i,j,n,k,a[100],b[100]; cin& ...

  6. Ubunte 11.4 下安装 SSH遇到的问题

    第一次安装报了一堆错,主要是也http 404 not found之类的,搜索了一番怀疑是apt的source list的问题. 网上找到一份替换之,我用的是搜狐的服务器.网址如下: http://b ...

  7. Edwin windows下基本命令:

    Ctrl-Alt-z: 对区域内所有代码求值. Ctrl-x Ctrl-e: 对光标左边或上一个表达式求值. Ctrl-c Ctrl-x: 中断当前求值. Ctrl-a: 移动到行首. Ctrl-e: ...

  8. h5标签canvas关于getImageData跨域的问题

    h5标签canvas关于getImageData跨域的问题 在学习h5的时候,canvas标签中getImageData()报错:security error! 具体代码如下(chrome浏览器): ...

  9. POJ 3273 Monthly Expense(二分查找+边界条件)

    POJ 3273 Monthly Expense 此题与POJ3258有点类似,一开始把判断条件写错了,wa了两次,二分查找可以有以下两种: ){ mid=(lb+ub)/; if(C(mid)< ...

  10. uva 1595 - Symmetry

    思路:首先,如果这些点对称,那么它们的对称轴是x = m(m是所有点横坐标的平均值):   把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面.   如果有 ...