type
status
date
slug
summary
tags
category
icon
password

so函数调试

普通的so层函数的调试步骤如下:
step1:运行android_server并设置端口转发。
step2:用ida attach上应用进程
notion image
notion image
关键是接下来会弹出same的弹窗,如果没弹就说明对应的/data/app/*****/lib目录下没有相应的so文件,这个时候需要手动复制进去并修改权限(我在这里卡了很久🥺🥺🥺)
notion image
step3:接下来会停在libc.so文件里面,这个时候F9重新运行一下,app就可以正常的输入,然后就可以愉快的调试了。
notion image

init_array函数调试

调试init_array函数比较复杂,因为需要在模块初始化的过程中来断下。我们先需要了解一下so函数的加载流程,这里直接查看AOSP里面的源代码。
首先在bionic/linker/linker.cpp文件里面的do_dlopen函数看到调用了call_constructors 函数。
notion image
接着在bionic/linker/linker_soinfo.cpp 文件里面找到soinfo::call_constructors,这个函数里面调用了call_array,这个函数通过递归调用cal_function 来实现对so的初始化的函数的调用。
notion image
我们可以根据上面的字符串特征来在linker64里面找到call_function函数。嗯……接下来的操作就是将在你需要调试的so的初始化函数里面下断点,然后执行以下步骤(android_server和端口转发已经做好):
adb shell am start -D -n com.fei3ei.babyandroid/.MainActivity -> IDA attach(这个时候需要记下进程的PID,后面需要使用到) -> adb forward tcp:8700 jdwp:29729(pid) -> jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700 ,如果你的机器不是使用的共享内存更换命令 jdb -attach localhost:8700 ,之后就F9断在初始化函数里面了。
2024年度总结n1ctf-2018 babyUnity3d
Loading...