首页
社区
课程
招聘
[原创] 使用 Waydroid 过朴素反调试
发表于: 2024-3-6 00:21 3670

[原创] 使用 Waydroid 过朴素反调试

2024-3-6 00:21
3670
目录

使用 Waydroid 过朴素反调试

在一些 Linux 发行版中,可以让 Android 系统运行在容器中。比如 docker/podman 容器可以使用 Redroid,LXC 容器可以使用 Waydroid 或 Anbox

容器技术隔离和限制了容器内对宿主系统资源的访问,但是宿主系统却可以访问容器内的资源。

那么在宿主系统中,对容器的进程进行跟踪调试,是否会被感知?做个测试验证就知道了。

测试环境

处理器:飞腾D2000 ARM64
操作系统:Fedora Workstation 39
显卡:RX580

Fedora 安装 Waydroid 方便,只需要一行命令

1
sudo dnf install waydroid

然后就可以下载镜像资源、初始化系统之类的

再安装一个 golang 编译器

1
sudo dnf install 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,不够再定制化。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-3-6 09:50
1
雪    币: 507
活跃值: (1742)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这就很棒了
2024-3-6 11:21
0
雪    币: 2685
活跃值: (3680)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
有点意思。没检测到是因为在宿主调试没走容器内核?
2024-3-6 14:42
0
雪    币: 1110
活跃值: (3244)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5

Fedora 系统 和 Waydroid 的安装流程


2024-3-6 16:32
0
游客
登录 | 注册 方可回帖
返回
//