最近在做一个沙箱,来收集应用的一些对抗行为。
一、桩点
1 bionic
Get Find | /bionic/libc/system_properties/system_properties.cpp | 监控应用获取的prop字段 |
popen | /bionic/libc/upstream-netbsd/lib/libc/gen/popen.c | 监控应用执行的popen指令 |
open | /bionic/libc/bionic/open.cpp | 监控应用打开过的文件路径 |
stat | /bionic/libc/bionic/stat.cpp | 监控应用读取的 目录或文件 信息 |
mmap | /bionic/libc/bionic/mmap.cpp | 监控内存映射信息 |
fork | /bionic/libc/bionic/fork.cpp | 监控应用运行期间创建的子进程信息 |
pthread_create | /bionic/libc/bionic/pthread_create.cpp | 监控应用native层创建的所有线程的线程函数地址 |
ptrace | /bionic/libc/bionic/ptrace.cpp | 监控应用运行期间ptrace信息 |
strstr | /bionic/libc/upstream-openbsd/libc/string/strstr.c | 监控应用运行期间进行的所有字符串比对 |
strcmp | /bionic/libc/upstream-openbsd/libc/string/strcmp.c | 监控应用运行期间进行的所有字符串比对 |
connect | /bionic/libc/bionic/connect.cpp | 监控应用进行的所有链接socket操作 |
readlink | /bionic/libc/bionic/readlink.cpp | 监控应用读取的所有文件链接 |
access | /bionic/libc/bionic/access.cpp | 监控应用读取的文件访问状态 |
__fgets_chk | /bionic/libc/include/bits/fortify/stdio.h | 监控应用读取的文本信息 |
dlopen_ext | /bionic/linker/dlfcn.cpp | 监控应用打开的库文件 |
dlsym_impl | /bionic/linker/dlfcn.cpp | 监控应用获取的库文件函数 |
2 kernel 内核桩点,现在很多应用都会使用svc调用,故内核桩点也得打
__NR_inotify_add_watch | fs/notify/inotify/inotify_user.c |
__NR_openat | fs/open.c |
__NR_mmap2 | mm/mmap.c |
__NR_socket | net/socket.c |
__NR_newfstatat | fs/stat.c |
__NR_mprotect | mm/mprotect.c |
__NR_readlinkat | fs/stat.c |
__NR_connect | net/socket.c |
__NR_faccessat | /fs/open.c |
__NR_ptrace | /kernel/ptrace.c |
3 其他桩点
call_function | /bionic/linker/linker_soinfo.cpp | 打印所有动态库 init_array函数地址 |
RegisterNative | /art/runtime/art_method.cc | 打印所有动态注册的函数地址 |
InvokeWithArgArray | /art/runtime/reflection.cc | 打印JNI call的函数调用关系 |
DoCall | /art/runtime/interpreter/interpreter_common.cc | 打印Java call的函数调用关系 |
效果:
打印init_array节函数地址
打印动态注册函数名及地址
检测虚拟机
检测root
检测frida
ptrace反调试