ida动态调试APK的so文件
一个apk分为两层,java层和so层,一般的重要的算法都会放在so层为了效率和安全,所以用一道简单的题目来学习ida对so文件的调试。
题目来源:攻防世界移动安全新手区:easyjni,算法简单,学习动调。
ps:不要用华为或者荣耀的全系列手机进行调试,即使你开了root权限
方法一、直接打开
建立通信
工具
adb(android studio自 带或者 独立安装),安卓(root)环境。
文件导入
1 | adb connect 127.0.0.1:62001 #真机调试没有这部,62001夜神的端口 |
进入安卓的shell之后,命令和ubuntu基本一致。
1 | chmod 777 /data/local/tmp/android_server |
执行到这里,会发现:
这时已经在android上成功开启了端口监听,但是还需要一个端口转发,把android的端口消息转发到本机上来:
1 | adb forward tcp:23946 tcp:23946 |
可以用ida去远程连接了。
ida连接
打开对应位数的新的ida
找到对应的调试器。
然后在弹出的进程框中搜得你要调试的apk的包名字,在jeb中获得或者在jadx中找到,比如:
这就是包名,搜索jni即可。
可能有许多,这里找到之后直接通过搜索来确定就行。
动调
找到进程之后,进入调试界面,ctrl+s,找到对应so文件,这里会有许多的so文件,还是要自己搜一下名字,然后附加上去。
这里我的so文件libnative.so
但是找到三个,都试一试,看一下特征。
找到正确的so文件后,另开一个ida,静态分析so,找到对应的函数的对应的地址的偏移,回到动调ida,直接G过去。
可能没有识别成函数,直接p一下就好,就可以正常的F5了。
可能的失败
1.如果报错,或者找不到进程,可能是没有开启全局调试指令(真机)
1 | magisk resetprop ro.debuggable 1 #设置debuggable |
2.前面都正常,但是最后无法调试原因:
不要用华为或者荣耀系列的真机。
夜神模拟器是x86架构,如果调试arm的话夜神会强制转换架构出问题,用真机即可。
方法二、进程附加
建立通信
步骤同上
ida连接
so文件直接拖进ida中打开静态分析
修改一下debug选项,然后
这里选择远程安卓arm调试,如上图。
debug选择附加进程
要是这里报错就随便写点参数,基本都是默认的
之后会有一个弹窗问你这俩文件一不一样,直接选same就行了。
动调
就和别的程序一样动调了,注意ARM架构的ip指针是PC指针。