""" go_binary_re.py — Go binary reverse engineering module for ablation Targets: Go 1.16/1.17+ Mach-O and ELF binaries (x86_64 / arm64) Capabilities: - Mach-O / ELF section extraction - pclntab full function table parsing (Go 1.16/1.17/1.18/1.19/1.20+) - Capstone disassembly with RIP-relative pointer resolution - Command dispatch map reconstruction (mapassign_fast64 pattern) - Message frame format inference from bufio.Reader call chains - vmnetd-specific handler mapping and message body construction - go.string.* section extraction (hardcoded path strings) - Docker socket HTTP-over-unix client Primary RE target: /path/to/target/com.docker.vmnetd === Go Binary Patterns (from book corpus) === Unix domain socket (Go): conn, _ := net.Dial("unix", "/var/run/foo.sock") # client ln, _ := net.Listen("unix", "/var/run/foo.sock") # server defer os.Remove(sockPath) # cleanup on exit Same interface as TCP: conn.Read/Write, net.Conn Newline-framed protocol (vmnetd ReadString pattern): r := bufio.NewReader(conn) line, _ := r.ReadString('\\n') # reads until '\\n', includes delimiter line = strings.TrimRight(line, "\\n") # strip trailing newline : wire: each field = []byte(value) + []byte{'\\n'} Exact-N-byte reads: io.ReadFull(conn, buf) # errors if < len(buf) bytes available binary.Read(r, binary.LittleEndian, &val) # typed read from io.Reader Varint (Go binary.Uvarint): Each byte: low 7 bits = data, high bit = more bytes follow Encode: while n >= 0x80: out.append((n & 0x7f) | 0x80); n >>= 7; out.append(n) Go register calling convention (1.17+, x86_64): AX=arg0, BX=arg1, CX=arg2, DI=arg3, SI=arg4, R8=arg5, R9=arg6 Go string header layout (64-bit): {data *byte [8], len int64 [8]} = 16 bytes at struct field offset goroutine-per-connection server model: for { conn, _ := ln.Accept(); go handleConn(conn) } launchd AF_UNIX socket activation: Sockets key in plist → launchd creates socket, passes fd → daemon calls syscall.Getenv("LISTEN_FDS") or net.FileListener(os.NewFile(fd, "")) macOS SIP (Catalina): Protected: /usr/bin, /usr/sbin, /sbin, /bin, /System/*, /Library/Apple/* NOT protected: /usr/local/*, /Users/*, /var/*, /private/etc/* (by default) vmnetd writes to /usr/local/bin/ (not SIP-protected) and /var/run/ macOS Privileged Helper (vmnetd model): - Binary in /Library/PrivilegedHelperTools/