IDA真机调试环境搭建及原理

来源:互联网 发布:java sdk 如何使用 编辑:程序博客网 时间:2024/05/16 07:12

IDA真机调试环境搭建及原理

如果想脱壳,使用IDA调试so文件是不可避免的。工欲善其事必先利其器,本文将详细介绍IDA调试的环境准备以及操作的步骤和原理,尽量做到知其然知其所以然。

手机环境

  • 1) 准备一台真机
    最好是真机,模拟器经常会遇到各种各样意想不到的坑。本身我们逆向分析加固程序就需要验证各种猜测,再加之模拟器的坑,很容易被迷惑。
  • 2) 手机系统版本android4.4之前的系统
    这个主要是dvm VS art的考虑,android 5.0以上系统使用art进行加载。现在网上很多教程,脱壳分析都是基于dvm虚拟机的。
  • 3) 手机已经ROOT
    这个是必须的,大家都知道。对应自己的手机型号,找度娘搞定。
  • 4) 设置好开发者模式

准备工作

  • 1) 将IDA android_server 放置到手机
    我使用的IDA 6.6,IDA6.8和最新的IDA7.0在我这里都出现些问题。
    目录如下图,这个东东将我们的手机和PC连接起来。
    android_server目录
    将文件push到手机/data/local/tmp/目录下
    adb push android_server /data/local/tmp/

  • 2) 将android_server修改赋予可执行权限
    adb shell “chmod 777 /data/local/tmp/android_server”

  • 3) 准备好DDMS
    红色圈使我们要调试的程序。为什么使用DDMS后面会讲到。
    DMMS
  • 4) 设置属性ro.debuggable
    在实际的操作中,打开DDMS,连接上手机是一般是看不到调试的应用的。
    这是因为APK的AndroidManifest.xml中debuggable没有设置为true。而且一般发布的程序都会设置为false,我们可以修改AndroidManifest.xml中debuggable属性软后重新打包,但加了壳的apk重新打包困难,这是个鸡生蛋,蛋生鸡的问题。网上有4中方案解决此问题,我选择的是使用mprop修改内存属性。由于是内存属性,因此每次重启手机时都需要设置一下,稍微麻烦了一点,可以接受哈。
    mprop下载地址 [ mprop ]

    mprop的使用:
    1、 将mproppush到手机
    adb push .\你的存放路径\ mprop /data/local/tmp/
    2、 修改权限
    adb shell “chmod 755 /data/local/tmp/mprop”
    3、 运行
    使用root权限运行mprop,设置ro.debuggable=1,查看ro.debuggable 属性是否为1,如下图:
    mprop设置属性

IDA附加

以上准备工作做好后,我们就可以真正使用IDA附件到程序,开始调试。

  • 1) 使用ROOT运行android_server
    最好把手机里乱七八糟的的应用全都卸载掉,然后以使用root运行android_serverr如下图:
    这里写图片描述
    当出现Listening on port #23946 说明android_server启动成功,它在监听23946端口,等着其他人来连接她。
    图中的as就是android_server,因为一般加固方案的反调试中有对“android_server”的检测,为了避免麻烦所以修改为as。你可以在后续实际脱壳中看到这部分。
  • 2) 端口转发
    不能让android_server等太久,我们使用adb forward tcp:23946 tcp:23946进行转接。这句命令的意思就是将PC端的23946端口转接到手机的23946端口,经过转接IDA附加调试的地址就是127.0.0.1(localhost)。
  • 3) 以debug模式打开应用
    1、可以在“开发者选项”中—>“选择待调试的应用程序”—>勾选”等待调试程序”进行设置待调试的apk
    AndroidManifest.xml中debuggable没有设置为true,设置个毛线啊!!其实这里我们可以骗骗手机。首先我们使用AndroidKiller将加壳待调试的apk设置debuggable=true,然后重新打包,进行安装。安装后进行上述开发者选项设置。设置完成后,卸载调apk,将原始待调试的加固apk进行安装。你会发现开发这选项还在。Debug模式打开应用妥妥的。
    2、使用命令以debug模式打开应用
adb shell am start -D -n com.example.test360_2/com.qihoo.util.StartActivity

其中:com.example.test360_2为包名,com.qihoo.util.StartActivity为程序入口
包名&程序入口
我们同样使用AndroidKiller可以很方便的找到报名和程序入口,你要熟悉AndroidManifest.xml那就随便了。
AndroidKiller下载地址:
[AndroidKiller ]

  • 4)IDA附加
    如图选择Remote ARMLinux/Android debugger进行IDA附加。
    这里写图片描述
    设置Hostname
    这里写图片描述
    选择需要调试的apk,选择进行附加
    这里写图片描述
  • 4)打开DDMS
    打开DMMS后,我们看到我们要调试的应用出现在这里,如果没有出现,请查看上面关于ro.debuggable属性有没有设置好。
    这里写图片描述
    红色小虫子:表示该程序是待调试程序
    8600/8700 :DDMS将PC端口转发到手机端口8606端口上
    如果没有打开DDMS,就需要我们自己进行转发了,如:
    adb forward tcp:8700 jdwp:8600
    建议还是使用DDMS进行转发,省事还稳当^_^

  • 6) 使用jdb恢复程序运行
    执行完该命令后,还需要在IDA里点击运行程序才会真正的运行起来。这也方便我们设置断点。

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

写在最后

通过以上步骤,我们就可以开始愉快的调试,脱壳了。理解了上述操作步骤的目的,我们总结一下每次debug的前戏,方便大家操作:
1、 运行android_server
2、 端口转发
adb forward tcp:23946 tcp:23946
3、 打开待调试应用
4、 打开DDMS
5、 IDA附加
6、 jdb恢复程序运行
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

移动安全逆向研究:
QQ群:211730239


阅读全文
1 0
原创粉丝点击