2026-09-01 (Payload Output Channel Activation: libkernel Base & Symbol Resolution) (D306)
Analyzed hardware test logs
(reports/hardware/injector-klog.txt and .klog
lines 105-131):
- Diagnosis of Successful Detach & Silent
Execution:
- In Run #18,
PT_DETACH ret=0,detach return=0! The retail game remained alive and did NOT crash or close. - However, no
obscene: ...lines appeared in the kernel log or socket output. - Analysis of
src/probe/start.candruntime.c:sceKernelDebugOutTextandsceKernelWriteinobscene-payload.elfare weak unresolved symbols.- In raw payload mode,
obscenerelies onpayload_args[0](sys_dynlib_dlsym) containinggetpid's address to bootstraplibkernel_base(getpid - 0x5b0) andsceKernelWrite(base + 0x16e00). - The injector was staging a zeroed
target_argsstruct wheresys_dynlib_dlsymwas0, soobs_bootstrap_payload_outputrefused to initialize output channels. - In addition,
loader.conly handledR_X86_64_RELATIVErelocations, leaving the GOT and PLT slots forsceKernelDebugOutTextandsceKernelWriteat0.
- In Run #18,
- Remediation:
- Target
libkernelBase Resolution (src/injector/krw.c): Implementedkrw_find_target_libkernel_base(), which inspects the target process's kernel module list attarget_kproc + 0x3E8(matchingsel == 0x2001 || sel == 1) with fallback to0x800000000. - Staging
getpidinpayload_args(src/injector/injector.c): Initializedtarget_args.sys_dynlib_dlsym = target_libkernel_base + 0x5b0. - Dynamic Symbol Resolution in Loader
(
src/injector/loader.c): Updatedloader_load_into_proc()to parse.dynsym/.dynstrduring relocation processing, resolving GOT/PLT entries forsceKernelDebugOutText(0x2b020),sceKernelWrite(0x16e00),getpid(0x5b0),sceKernelOpen(0x16d60),sceKernelClose(0x16dc0), andsceKernelUsleep(0x16f00). - Kernel Log Output Fallback
(
src/probe/start.c): Added fallback inobs_boot_note()usingobs_libkernel_base() + 0x2b020when&sceKernelDebugOutTextis not directly linked.
- Target
Verified: make payload injector HARDWARE=1
(9,410,912 bytes) compiles 100% clean with zero warnings
and zero errors.