使用IDEA动态调试smali代码
来源:互联网 发布:航海家炒股软件 编辑:程序博客网 时间:2024/05/21 07:56
转:http://www.cnblogs.com/axiong/p/5939762.html
原创,转载请注明出处。
一般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代码
- 使用apktool + idea 调试smali
- Android逆向之路---IDEA动态调试smali语言
- eclipse动态调试smali
- androidstudio动态调试smali
- AndroidStudio调试smali代码
- Android Studio动态调试Smali
- Android studio动态调试smali
- Android学习---smali 动态调试
- smali代码插入和调试
- Android Studio调试smali代码
- 使用Smali代码注入
- smali 调试方法(动态调试)
- 反编译apk+eclipse中动态调试smali
- Android的smali动态调试方法
- Android Studio+ideasmali动态调试smali汇编
- AndroidStudio+ideasmali动态调试smali汇编
- Android APK程序的smali动态调试
- JVM内存模型及垃圾回收算法
- 总体上对JAVA一个全面的认识
- 关于 UGUI 字体花屏或乱码
- SVN服务的搭建和使用
- 简单谈谈JavaScript中的this
- 使用IDEA动态调试smali代码
- POJ 1789 Truck History (最小生成树)
- 前端面试题(待定)
- cf 662C Binary Table
- 日期相关---SimpleDateFormat的setLenient(true/false)-----自动计算日期
- USACO 2.1 健康的荷斯坦奶牛 Healthy Holsteins
- labview 串口开发遇到的问题
- hdoj1090
- 传纸条