Skip to main content
ZombieMutex

30 results · ↑ ↓ navigate · Enter open · Esc close

Projects / Right now

What I'm doing now

Current focus
Work·Active

Demonic Binary

Mobile and backend engineering: iOS/Android authentication, API integration, authorization boundaries, encrypted storage, and practical security reviews. The fun part is finding what breaks before somebody else does.

View project
Personal project·Building

Robotics & hardware

Microcontrollers, Raspberry Pi, GPIO, sensors, firmware state machines, and the messy boundary between physical inputs and software. Yes, debounce is still a thing.

View project
Personal project·Building

Apps made for fun

Side projects in SwiftUI, Jetpack Compose, APIs, and interface experiments—building little things, testing the edge cases, and occasionally shipping a wonderfully unnecessary feature.

View project

Engineering notebook

Also building: ZombieMutex

Project roadmap

Backlog0

No published items.

Building2

Robotics & hardware

Microcontrollers, Raspberry Pi, GPIO, sensors, firmware state machines, and the messy boundary between physical inputs and software. Yes, debounce is still a thing.

Apps made for fun

Side projects in SwiftUI, Jetpack Compose, APIs, and interface experiments—building little things, testing the edge cases, and occasionally shipping a wonderfully unnecessary feature.

Testing0

No published items.

Shipped2

Living activity feed

Public engineering notes, genuine screenshots and GitHub activity are published.

From the workbench

Public code, notes & life
Weekly noteWeek of Nov 2, 2026

Weekly experiment

Making this page feel less like a changelog and more like a workbench: real code activity, screenshots, small bugs, and the occasional life detour.

What I'm trying

The fiddly bit is knowing what belongs in public. Public commits should link to the actual changes, private builds should stay private, and a photo only goes up if I actually took it. Also trying to keep the whole thing from turning into an airline cockpit.

My current projects

DeadPineapple from the workbench

Security engineering
Put the proof next to the code

Captured fresh Rust and Go test output and a live browser policy trace, then put each next to the implementation it actually tests.

Read more

ELFGuard's six tests and the bounded mutation regression remain local static-analysis evidence. AuthRace's 24 competing HTTP mutations show 120 units in the deliberately vulnerable handler versus 5 with atomic idempotency. For agent security, the browser trace demonstrates a denied tool request; it is not a Linux sandbox attestation.

DeadPineapple from the workbench

Architecture notes
The boundary is not just a diagram box

Mapped three actual implementation paths: bytes into the ELF parser, identity through the API mutation ledger, and agent intent into a policy decision.

Read more

A box marked 'secure' doesn't help anyone review a system. The useful parts are where untrusted input crosses into authority, what stops it, and what the implementation cannot prove. The Go container runner stays documented as a local reference; no end-to-end Linux kernel isolation claim.

DeadPineapple published a post

Writing
I built a tiny neural audio codec. Then I listened to the results.

A trained nonlinear encoder, vector-quantized codebook and decoder are interesting. An idealized low bitrate is not the sa…

Read more

A trained nonlinear encoder, vector-quantized codebook and decoder are interesting. An idealized low bitrate is not the same thing as good reconstructed speech.

DeadPineapple published a post

Writing
Audio ML engineering: what the numbers actually mean

I built five small speech and audio implementations and measured their behavior. ASR errors, turn detection, codecs, proso…

Read more

I built five small speech and audio implementations and measured their behavior. ASR errors, turn detection, codecs, prosody and classifier ablations each have different ways to mislead you.

DeadPineapple published a post

Writing
Mobile voice agents: keep the backend in charge

How I connected Swift and Kotlin clients to agent workflows, built Core ML and TensorFlow Lite integration boundaries, and…

Read more

How I connected Swift and Kotlin clients to agent workflows, built Core ML and TensorFlow Lite integration boundaries, and kept authorization on the backend.

DeadPineapple published a post

Writing
Voice agents are distributed systems with microphones

Building an agent that talks is the easy demo. The harder work is authenticated tools, retries, evaluation, telemetry, CRM…

Read more

Building an agent that talks is the easy demo. The harder work is authenticated tools, retries, evaluation, telemetry, CRM synchronization and the people who have to operate it.

DeadPineapple published a post

Writing
Retry storms: when resilience multiplies a failure

Retry logic looks harmless in isolation. When a gateway, application service and SDK each apply their own retry policy, a…

Read more

Retry logic looks harmless in isolation. When a gateway, application service and SDK each apply their own retry policy, a single failed operation can multiply into a dependency outage. That interaction is the starting point for my retry-storm analysis.

DeadPineapple published a post

Writing
AEAD design review: ciphertext still needs an identity and context

An encrypted database value can be perfectly unreadable to an attacker and still end up in the wrong record. If a service…

Read more

An encrypted database value can be perfectly unreadable to an attacker and still end up in the wrong record. If a service moves ciphertext between tenants without binding the record's context, the system may de

DeadPineapple published a post

Writing
ROS 2 node lifecycles: when a robot is allowed to become active

When a robotics node starts, I don't want "the process launched" to be confused with "the robot is ready to move." The ROS…

Read more

When a robotics node starts, I don't want "the process launched" to be confused with "the robot is ready to move." The ROS 2 managed-node design makes this difference explicit with lifecycle states. That's a be

DeadPineapple published a post

Writing
Stuxnet: malware crossed from Windows into industrial control

I traced Stuxnet as a boundary-crossing problem: from Windows software into industrial control commands. Calling it sophis…

Read more

I traced Stuxnet as a boundary-crossing problem: from Windows software into industrial control commands. Calling it sophisticated Windows malware misses the physical-system risk. The attack path targeted software used to supervise and program indust

DeadPineapple published a post

Writing
Raspberry Robin: the USB worm and what came afterward

Raspberry Robin showed why incident timelines need separate columns for initial access and what attackers do later. Micros…

Read more

Raspberry Robin showed why incident timelines need separate columns for initial access and what attackers do later. Microsoft's October 2022 research described a USB-propagating worm that was connected to a bro

DeadPineapple published a post

Writing
Melissa: a document macro virus and an email outage

Melissa demonstrates why I include document and user-interaction boundaries in propagation analysis, not only remotely exp…

Read more

Melissa demonstrates why I include document and user-interaction boundaries in propagation analysis, not only remotely exploitable network services. In March 1999, a Microsoft Word document with a malicious macro relied on someone o

DeadPineapple published a post

Writing
Mirai: what default passwords did to the IoT

In my analysis of Mirai, the failure starts with a simple hardware assumption: devices that ship with weak or default remo…

Read more

In my analysis of Mirai, the failure starts with a simple hardware assumption: devices that ship with weak or default remote-management credentials will eventually be found by automated scanners. In 2016, many cameras, recorders and routers were ex

DeadPineapple published a post

Writing
NotPetya and the poisoned accounting software update

The starting point I emphasized in my NotPetya review is a trusted enterprise distribution path: the update path for Ukrai…

Read more

The starting point I emphasized in my NotPetya review is a trusted enterprise distribution path: the update path for Ukrainian accounting software M.E.Doc. It then moved laterally and disrupted organizations well beyond its initial target geography.

DeadPineapple published a post

Writing
WannaCry: the worm, the patch window and the SMB boundary

In my review of WannaCry's propagation path, the network boundary matters as much as the payload. The May 2017 outbreak co…

Read more

In my review of WannaCry's propagation path, the network boundary matters as much as the payload. The May 2017 outbreak combined ransomware with self-propagation across vulnerable Windows SMB services.

DeadPineapple published a post

Writing
Android toll fraud: when the app can intercept consent

The trust failure I examined in Android toll-fraud reporting is the confirmation step: an OTP does not protect a purchase…

Read more

The trust failure I examined in Android toll-fraud reporting is the confirmation step: an OTP does not protect a purchase if malicious software on the same device can intercept or submit it. Microsoft documented Android toll-fraud workflows in which malware tried to subscribe victim

DeadPineapple published a post

Writing
Joker / Bread and the Android billing fraud problem

In reviewing the Joker/Bread campaigns, I focused on the separation between an app doing its advertised job and subscripti…

Read more

In reviewing the Joker/Bread campaigns, I focused on the separation between an app doing its advertised job and subscription activity the owner never authorized. Google's 2020 report on Bread—often called Joker—documented that exact billing-fraud problem. The family kept adapting as defenses a

DeadPineapple from the workbench

Security lab
A lab that lets you break the assumptions

The device-trust lab is a lot more useful when you can flip the inputs and watch the decision change.

Read more

A real capture of the live lab below. Try a replay, a forged integrity signal, or an unauthorized object request. The server is still the one that has to make the authorization decision. The client can be very persuasive; it doesn't get a vote.

Screenshot of ZombieMutex's actual device-integrity decision lab running in a browser
The live device-trust lab, captured from ZombieMutex.

DeadPineapple from the workbench

Bug notes
The GitHub badge rabbit hole

Tried pulling public build results. GitHub's anonymous API limit had other ideas.

Read more

The first pass hit HTTP 403 on a shared IP. Rather than fake a green check, the site now uses official GitHub badges when a repository and workflow are genuinely public. My private builds stay private. Unexciting fallback, correct result. That's a win.

Site & activity

Refreshes every 2 min
Checking site…Checking public GitHub…