Skip to main content

Teaching programme

Twelve weeks

One argument in four blocks. Each week takes the same small C program a step further from its source and asks what is left of its meaning.

The course runs a two-hour studio every week, and a spine lecture at the start of each block. Weeks are cumulative: week 10 is only legible because week 9 built the dispatcher, and week 9 is only legible because week 6 separated a genuine branch from an injected one. If you are dipping in, read the block claim first.

The question the twelve weeks answer together: How much program meaning survives a change of representation, and which deobfuscation methods generalise beyond one implementation?

Four words we keep apart

Almost every wrong conclusion in this field is one of these four being mistaken for another. They are the vocabulary of every week, every ledger and every marking rubric here.

Analysis success
A tool ran, produced output, and did not error.
Semantic proof
A property holds — under a stated model, state and path prefix.
Binary rewriting
Bytes changed and a file still loads.
Runtime correctness
The program answered correctly, on the inputs that were actually run.

Block IRepresentation

One computation has several truthful descriptions, and obfuscation is a change of description before it is anything else.

Opens with the spine lecture Same program, four stories.

Block IISimplification

Something usually simplifies the obfuscation for you — the algebra, the compiler backend, or your own reading — and each of the three proves a different thing.

Opens with the spine lecture Something always simplifies it for you.

Block IIIProof

A solver can prove a branch impossible and that proof can be turned into changed bytes; neither step covers what flattening hides.

Opens with the spine lecture What a proof is worth.

Block IVLimits

The methods that generalise are the ones that carry their assumptions with them, and every output still needs validating at the level of its claim.

Opens with the spine lecture The smaller graph problem.

Enlarged evidence

Open the file