Android 系统属性
系统属性Android Property 实现解析与黑魔法 - 残页的小博客
bionic属性系统概述bionic/libc/bionic/system_property_api.cpp
bionic/libc/include/sys/_system_properties.h
属性系统实际上就是一个整个系统共享的键值对存储器,通过共享文件内存映射实现。
存放属性的文件位于 /dev/__properties__ ,这下面的多个文件,实际上是将属性按照前缀划分为不同的 SELinux 上下文,存放在对应的文件中。
划分的规则可以在 /{system,vendor,...}/etc/selinux/{plat,...}_property_contexts 等文件找到。
init 进程负责初始化属性存储区域,且是系统中唯一能够修改属性的进程(当然,只要某个进程能 rw 映射存放属性的文件,也是可以修改的),其他进程通过属性服务(一个名为 property_service 的 sock ...
Android ptrace
Android 上的 ptrace 实践前篇
dlopen获取 dlopen 有两种方法:
从 linker 获取 __loader_dlopen (或者 __dl___loader_dlopen),需要提供 caller_addr
从 libdl.so 获取 dlopen
详细代码:
https://github.com/5ec1cff/ptrace-examples/tree/android
实现了注入到任意进程,调用 __loader_dlopen 打开指定路径的 lib ,或者调用 __loader_dlclose 关闭指定 handle 的 lib 。目前只支持 x86-64 和 arm64 。
对齐问题一开始总是得到 SIGSEGV ,并且 fault addr 为 0 。出现问题的时候注入信号并 detach ,观察 crash dump :
123456789101112131415161718192005-02 13:13:59.534 18907 18907 F DEBUG : *** *** *** *** *** *** *** *** *** * ...
ptrace
ptraceptrace(2) - Linux manual page
wait(2) - Linux manual page
本文相关代码都在下面的仓库:
https://github.com/5ec1cff/ptrace-examples
tracee execve 时的行为当被跟踪者(tracee)进程成功调用 execve 后,会立即产生一个 SIGTRAP ,并进入 signal-delivery-stop 状态,允许我们在进程的所有新代码执行之前进行处理。
这个状态不好辨识,在 man ptrace 中已经不建议使用。我们可以用 PTRACE_O_TRACEEXEC 选项,这样当成功 execve 的时候,原先的 SIGTRAP 不会产生,取而代之的是另一个 stop ,status 满足 status >> 8 == (SIGTRAP | (PTRACE_EVENT_EXEC << 8)) ,并且我们可以通过 PTRACE_GETEVENTMSG 获得 execve 之前的 pid (在多线程中有用,因为在非主线程进行 execve ,pid 会发 ...
pwn-tv
Konka TV PWN
原文作于 2023.01.27, 整理于 2023.11.21
老家的 Konka 电视是个 Android 系统,曾经 nmap 扫描过,发现 adb 是开放的,这次过年回去研究了一下,发现可以提权。
分析使用 adb 是可以直接连接的,uid 是 shell ,不需要在 TV 上进行任何授权。
看看系统属性:
12345678910111213141516[ro.adb.secure]: [0][ro.allow.mock.location]: [1][ro.board.platform]: [bigfish][ro.boot.selinux]: [enforcing][ro.build.tags]: [release-keys][ro.build.type]: [user][ro.build.version.all_codenames]: [REL][ro.build.version.base_os]: [][ro.build.version.codename]: [REL][ro.build.version.incremental]: [eng. ...