【Android安全- 使用 Waydroid 过朴素反调试】此文章归类为:Android安全。
使用 Waydroid 过朴素反调试
在一些 Linux 发行版中,可以让 Android 系统运行在容器中。比如 docker/podman 容器可以使用 Redroid,LXC 容器可以使用 Waydroid 或 Anbox
容器技术隔离和限制了容器内对宿主系统资源的访问,但是宿主系统却可以访问容器内的资源。
那么在宿主系统中,对容器的进程进行跟踪调试,是否会被感知?做个测试验证就知道了。
测试环境
处理器:飞腾D2000 ARM64
操作系统:Fedora Workstation 39
显卡:RX580

Fedora 安装 Waydroid 方便,只需要一行命令
|
1
|
sudo
dnf
install
waydroid
|
然后就可以下载镜像资源、初始化系统之类的
再安装一个 golang 编译器
验证
使用 golang 写一个朴素的反调试功能,通过 TracerPid 识别调试器
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package main
import
(
"log"
"os"
"strconv"
"strings"
"time"
)
func main() {
for
{
data, err :
=
os.ReadFile(
"/proc/self/status"
)
if
err !
=
nil {
panic(err)
}
lines :
=
strings.Split(string(data),
"\n"
)
for
_,
str
:
=
range
lines {
if
strings.HasPrefix(
str
,
"Pid:"
) {
log.Println(
str
)
}
if
strings.HasPrefix(
str
,
"TracerPid:"
) {
log.Println(
str
)
items :
=
strings.Split(
str
,
"\t"
)
tracePid, _ :
=
strconv.Atoi(items[
1
])
if
tracePid !
=
0
{
log.Fatalf(
"found debugger pid: %d"
, tracePid)
}
break
}
}
time.Sleep(time.Second
*
2
)
}
}
|
保存为 simple_antidebug.go
在 Fedora 中运行这个代码,然后再开一个终端运行 strace 对进行附加跟踪。

可以发现反调试功能正常工作,检测出调试器,然后退出了进程。
然后将反调试代码构建为 Android ARM64 程序,文件名 antidebug_android
|
1
|
GOOS=android GOARCH=arm64 go build -o antidebug_android .
/simple_antidebug
.go
|
通过 adb 推送到 waydroid 的 /data/local/tmp 目录。
在 adb shell 中运行 antidebug_android ;同时也开一个终端进入 adb shell,对 antidebug_android 的进程进行附加跟踪。
可以观察到反调试功能正常。
最后测试在宿主系统中使用 strace 附加跟踪 waydroid 中的 antidebug_android 进程

antidebug_android 进程没有检测到调试器
结论
容器中的朴素反调试无法检测到来自宿主系统的附加跟踪,这同样适用于 redroid。
使用容器化 Android 系统可以提高分析效率,按需选择使用 Waydroid 和 Redroid,不够再定制化。
更多【Android安全- 使用 Waydroid 过朴素反调试】相关视频教程:www.yxfzedu.com