Custom VMs in CTF: When the Binary Speaks Its Own Language

Some CTF reversing challenges hide the flag behind a custom virtual machine: a program that interprets its own bytecode. This post shows you how to spot them, reverse the instruction set, and write a solver.

August 25, 2026 · 6 min · Hanh Pham

Your First Crackme: A Walkthrough from strings to Flag

A crackme is a small binary that asks for a password and checks your input. This post walks through solving one, from downloading the binary to extracting the flag, with every tool click explained so you can follow along.

August 22, 2026 · 6 min · Hanh Pham

REST, gRPC, GraphQL, or a Broker: Picking Your Communication Tech

The communication style (sync/async, request-response/event-driven) narrows the field. Here’s how the actual technologies stack up once you’re choosing among them.

August 20, 2026 · 7 min · Hanh Pham

Ghidra in 30 Minutes: Reading Assembly Without Hating It

Ghidra’s decompiler turns machine code into something that looks like C. But the output is full of strange variable names, weird casts, and functions that look nothing like what you’d write. Here’s how to read it anyway.

August 18, 2026 · 6 min · Hanh Pham

Debugging Microservices: Where Did That Request Go?

In a monolith, a stack trace tells you what went wrong. In microservices, you’re grepping across three services’ logs at 2 AM trying to figure out which one lost the request. Here’s how to make that possible instead of painful.

August 15, 2026 · 9 min · Hanh Pham

Versioning Microservices Without Breaking Everyone

In a monolith, renaming a field means updating all callers in one commit. In microservices, consumers upgrade on their own schedule, so your API has to evolve without breaking the ones that haven’t upgraded yet. Here’s how.

August 13, 2026 · 9 min · Hanh Pham

Running Microservices Locally Without Docker Compose Hell

You split the monolith into twelve services. Now a new developer’s first week is spent getting Docker Compose to run all twelve on their laptop, and half of them crash because of a port conflict. Here’s how to make local development work without the pain.

August 11, 2026 · 7 min · Hanh Pham

Deploying Microservices Without the Fear

In a monolith, deploy means pushing one thing. In microservices, every service deploys independently, which is the whole point, until you realize that ‘independently’ also means ‘without knowing what the other services are doing right now.’

August 8, 2026 · 8 min · Hanh Pham

Database Per Service: The Pattern That's Harder Than It Sounds

Each service owns its database. That’s the rule. But when a report needs data from four services, or a customer wants to see their complete order history, you’ve got a query problem that a single SELECT can’t solve. Here’s how to handle it.

August 6, 2026 · 8 min · Hanh Pham

Service Mesh: When You Actually Need One (and When You Don't)

A service mesh gives you mTLS, traffic management, and observability without changing application code. It also gives you another piece of infrastructure to operate, debug, and explain to new hires. Here’s how to tell whether the trade-off is worth it.

August 4, 2026 · 8 min · Hanh Pham