/* Copyright (C) 2023 John Törnblom This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, see . */ #pragma once #include #include __BEGIN_DECLS // absolute kernel pointers extern const intptr_t KERNEL_ADDRESS_TEXT_BASE; extern const intptr_t KERNEL_ADDRESS_DATA_BASE; extern const intptr_t KERNEL_ADDRESS_ALLPROC; extern const intptr_t KERNEL_ADDRESS_PRISON0; extern const intptr_t KERNEL_ADDRESS_ROOTVNODE; extern const intptr_t KERNEL_ADDRESS_SECURITY_FLAGS; extern const intptr_t KERNEL_ADDRESS_UTOKEN_FLAGS; extern const intptr_t KERNEL_ADDRESS_QA_FLAGS; extern const intptr_t KERNEL_ADDRESS_TARGETID; extern const intptr_t KERNEL_ADDRESS_BUS_DATA_DEVICES; // struct proc field offsets extern const off_t KERNEL_OFFSET_PROC_P_UCRED; extern const off_t KERNEL_OFFSET_PROC_P_FD; extern const off_t KERNEL_OFFSET_PROC_P_PID; extern const off_t KERNEL_OFFSET_PROC_P_VMSPACE; // struct ucred field offsets extern const off_t KERNEL_OFFSET_UCRED_CR_UID; extern const off_t KERNEL_OFFSET_UCRED_CR_RUID; extern const off_t KERNEL_OFFSET_UCRED_CR_SVUID; extern const off_t KERNEL_OFFSET_UCRED_CR_RGID; extern const off_t KERNEL_OFFSET_UCRED_CR_SCEAUTHID; extern const off_t KERNEL_OFFSET_UCRED_CR_SCECAPS; extern const off_t KERNEL_OFFSET_UCRED_CR_SCEATTRS; // struct filedesc field offsets extern const off_t KERNEL_OFFSET_FILEDESC_FD_RDIR; extern const off_t KERNEL_OFFSET_FILEDESC_FD_JDIR; // struct vmspace field offsets extern const off_t KERNEL_OFFSET_VMSPACE_VM_PMAP; uint32_t kernel_get_fw_version(void); int32_t kernel_copyin(const void *udaddr, intptr_t kaddr, size_t len); int32_t kernel_copyout(intptr_t kaddr, void *udaddr, size_t len); int32_t kernel_setlong(intptr_t addr, uint64_t val); int32_t kernel_setint(intptr_t addr, uint32_t val); int32_t kernel_setshort(intptr_t addr, uint16_t val); int32_t kernel_setchar(intptr_t addr, uint8_t val); uint64_t kernel_getlong(intptr_t addr); uint32_t kernel_getint(intptr_t addr); uint16_t kernel_getshort(intptr_t addr); uint8_t kernel_getchar(intptr_t addr); intptr_t kernel_get_proc(pid_t pid); intptr_t kernel_get_proc_thread(pid_t pid, pid_t tid); intptr_t kernel_get_proc_ucred(pid_t pid); intptr_t kernel_get_proc_filedesc(pid_t pid); intptr_t kernel_get_proc_file(pid_t pid, int fd); int kernel_proc_copyin(pid_t pid, const void *buf, intptr_t addr, size_t len); int kernel_proc_copyout(pid_t pid, intptr_t addr, void *buf, size_t len); uint64_t kernel_proc_getlong(pid_t pid, intptr_t addr); uint32_t kernel_proc_getint(pid_t pid, intptr_t addr); uint16_t kernel_proc_getshort(pid_t pid, intptr_t addr); uint8_t kernel_proc_getchar(pid_t pid, intptr_t addr); int kernel_proc_setchar(pid_t pid, intptr_t addr, char val); int kernel_proc_setshort(pid_t pid, intptr_t addr, short val); int kernel_proc_setint(pid_t pid, intptr_t addr, int val); int kernel_proc_setlong(pid_t pid, intptr_t addr, long val); int kernel_get_vmem_protection(pid_t pid, intptr_t addr, size_t len); int kernel_set_vmem_protection(pid_t pid, intptr_t addr, size_t len, int prot); int kernel_mprotect(pid_t pid, intptr_t addr, size_t size, int prot); int kernel_overlap_sockets(pid_t pid, int master_sock, int victim_sock); int kernel_dynlib_handle(pid_t pid, const char* basename, uint32_t *handle); intptr_t kernel_dynlib_dlsym(pid_t pid, uint32_t handle, const char *sym); intptr_t kernel_dynlib_resolve(pid_t pid, uint32_t handle, const char *nid); intptr_t kernel_dynlib_mapbase_addr(pid_t pid, uint32_t handle); intptr_t kernel_dynlib_entry_addr(pid_t pid, uint32_t handle); intptr_t kernel_dynlib_init_addr(pid_t pid, uint32_t handle); intptr_t kernel_dynlib_fini_addr(pid_t pid, uint32_t handle); uint64_t kernel_get_ucred_authid(pid_t pid); int32_t kernel_set_ucred_authid(pid_t pid, uint64_t authid); int32_t kernel_get_ucred_caps(pid_t pid, uint8_t caps[16]); int32_t kernel_set_ucred_caps(pid_t pid, const uint8_t caps[16]); int32_t kernel_get_ucred_attrs(pid_t pid, uint8_t attrs[32]); int32_t kernel_set_ucred_attrs(pid_t pid, const uint8_t attrs[32]); int32_t kernel_get_qaflags(uint8_t qaflags[16]); int32_t kernel_set_qaflags(uint8_t const qaflags[16]); intptr_t kernel_get_root_vnode(void); intptr_t kernel_get_proc_rootdir(pid_t pid); int32_t kernel_set_proc_rootdir(pid_t pid, intptr_t vnode); intptr_t kernel_get_proc_jaildir(pid_t pid); int32_t kernel_set_proc_jaildir(pid_t pid, intptr_t vnode); uid_t kernel_get_ucred_uid(pid_t pid); int32_t kernel_set_ucred_uid(pid_t pid, uid_t uid); uid_t kernel_get_ucred_ruid(pid_t pid); int32_t kernel_set_ucred_ruid(pid_t pid, uid_t ruid); uid_t kernel_get_ucred_svuid(pid_t pid); int32_t kernel_set_ucred_svuid(pid_t pid, uid_t svuid); gid_t kernel_get_ucred_rgid(pid_t pid); int32_t kernel_set_ucred_rgid(pid_t pid, gid_t rgid); gid_t kernel_get_ucred_svgid(pid_t pid); int32_t kernel_set_ucred_svgid(pid_t pid, gid_t svgid); intptr_t kernel_get_ucred_prison(pid_t pid); int kernel_set_ucred_prison(pid_t pid, intptr_t prison); __END_DECLS