[mobile]真机+IDA调试apk中的so

[mobile]真机+IDA调试apk中的so

很多mobile题目需要逆向分析apk中的so(尤其我们公司的比赛),所以这里简单总结一下调试apk中的so的方法。

材料:adb调试工具、root的真机一台(模拟器无法调试so)、IDA

下载&安装adb

adb是Android platform tools中的工具,可以去Androiddevtools下载:https://www.androiddevtools.cn/
在这里插入图片描述
下载完解压出来:
在这里插入图片描述
在这里插入图片描述
里面的这个就是adb,使用方法可以直接在这个目录用命令号启动:
在这里插入图片描述
也可以把它改名成adb.exe,之后和AdbWinApi.dll一起放在C:\Windows\system32目录下:
在这里插入图片描述
然后就可以命令行直接启动adb了:
在这里插入图片描述

准备调试

首先将apk安装到手机上,然后手机usb连接电脑,插线的时候提示是否允许usb调试,选择允许:

接下来在adb查看是否有设备连接: adb devices
在这里插入图片描述
可以看到设备已经连接,然后我们要用IDA调试so文件,所以需要把IDA的远程调试server文件拷贝到手机中,使用adb 的push命令:

adb push .\android_server /data/local/tmp

接下来需要把手机的23946端口用adb forward命令转发到本机的23946端口:

adb forward tcp:23946 tcp:23946

开始调试

使用adb shell命令可以开启 一个手机的shell:
在这里插入图片描述
然后su到root,如果不su到root的话会发现一会IDA挂上去之后看不到可以挂的进程,这也是为什么要用root手机的原因:
在这里插入图片描述
然后在手机上运行我们需要调试的程序:

接下来在adb shell中cd 到刚刚传了android_server的目录/data/local/tmp 然后执行 android_server:
在这里插入图片描述
之后启动IDA,选择Debugger->attach->Remote ARM Linux/Android debugger:

debug options根据自己选择设置一下,然后选择自己要挂的进程:

在右侧寄存器窗口下面可以看到modules窗口,里面找到自己要调试的so:

双击之后可以查看so中的函数,选择自己要调试的函数下断点:
在这里插入图片描述
在这里插入图片描述
然后我这里要在手机中输入一些东西才能走到这:

成功断住:
在这里插入图片描述
然后可以调试了。

用到的命令:

adb devices  //查看链接设备
adb push .\android_server /data/local/tmp //往手机拷贝东西
adb forward tcp:23946 tcp:23946 //端口转发
adb shell //链接手机shell

补充:以调试模式启动

上面介绍的方法是先在手机中运行要调试的程序,然后用IDA挂在上去,但有时候可能会有一点点问题(比如一些检测是否被挂载的等等),这里我的推荐还是找到程序中所有的反调试,然后patch掉,之后对apk进行重打包重签名,然后安装调试。

除此之外还有一种方法是让apk直接以调试模式启动,这种可以绕过一部分反调试,进入adb shell,用am命令以调试模式启动程序:

am start -D -n  com.bin.MathGame/.MainActivity

在这里插入图片描述程序的名字可以启动一下,然后用ps查看
在这里插入图片描述
之后手机上已经启动了:

接下来再使用adb forward命令将这个进程的pid转发到8700端口上:

adb forward tcp:8700 jdwp:{pid}

然后再使用jdb 的命令给进程一个启动的信号:

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

在这里插入图片描述
然后用IDA挂载就可以正常调试了在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章