Logo 逆向知识库

概述

安卓逆向#

安卓环境#

真机或者模拟器,最好用备用机器作为真机,需要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

wpvsyou/mprop

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

 

参考资料#