概述
安卓逆向#
安卓环境#
真机或者模拟器,最好用备用机器作为真机,需要root和安装Magisk
环境 | 优点 | 缺点 |
---|---|---|
真机 | 稳定,arm64架构 | root的过程比较麻烦 |
蓝叠模拟器 | 稳定 | 仅支持x64架构,不能安装Magisk |
WSA - github | 和Windows无缝衔接 | 不稳定,遇到崩溃的app会导致WSA系统重启 |
Android-Sdk | 稳定,原生安卓 | 仅支持 x86 或 x86_64 架构。 |
打开调试总开关#
即把
ro.debuggable
设置成1,就不需要修改AndroidManifest.xml中的debuggable
使用Magisk resetprop#
需要root;需要安装Magisk;真机、WSA均可
重启后失效
adb shell "su -c magisk resetprop ro.debuggable 1"
adb shell "stop;start;"
MagiskHidePropsConf模块#
🌟最佳方案;需要root;需要安装Magisk;重启后依然生效
Magisk-Modules-Repo/MagiskHidePropsConf
安装模块之后
adb shell "su -c props ro.debuggable 1" # 然后按y回车
adb shell "su -c props service.adb.tcp.port 1337" # 顺便把 adb 远程调试默认开了
adb shell "su -c magisk resetprop ro.debuggable" # 检查是否设置成功
使用mprop#
需要root;不需要安装Magisk;重启后失效;只有armv8和v7
adb push mprop /data/local/tmp/
adb shell "su -c chmod +x /data/local/tmp/mprop"
adb shell "su -c /data/local/tmp/mprop ro.debuggable 1"
反编译工具Jeb#
JEB Decompiler Pro 5.13 免费下载 (softoroom.org)
这个链接是持续更新的,隔段时间可以去看看有没有更新
动态调试SO#
Segment - rebase program
即可重置基址
调试#
不允许调试的app,强行调试
adb shell am start -D -n com.example.ctf/.MainActivity
然后就可以 Jeb Attach 了
大部分调试失败的原因,都是遇到了反调试,这里需要多总结一些经验。
IDA调试so#
准备、测试#
adb push android_server64 /data/local/tmp/
adb shell "su -c chmod +x /data/local/tmp/android_server64"
adb forward tcp:23946 tcp:23946
adb shell "su -c /data/local/tmp/android_server64"
$package="jp.anima.app"
adb shell am start -D -n $package/.MainActivity # 启动
# IDA Attach
# 查看pid
# $tmp_pid=(adb shell "ps | grep '$package' | tr -s ' ' | cut -d ' ' -f 2")
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
一步到位#
$package="com.example.re11113"
adb shell am start -D -n $package/.MainActivity # 启动
$tmp_pid=$(adb shell "ps | grep '$package' | tr -s ' ' | cut -d ' ' -f 2")
echo "attach_process($tmp_pid)"
# 复制到这里,IDA Attach
adb forward tcp:8700 jdwp:$tmp_pid
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
# connect之后会卡住,在IDA按F9就可以继续运行了
查看日志#
$tmp_pid=(adb shell "ps | grep '$package' | tr -s ' ' | cut -d ' ' -f 2")
adb shell "su -c logcat | grep $tmp_pid" > logcat.log