Software protection, explained
Plain-English writing on how Windows software is reverse-engineered and how it is defended — the ideas behind code virtualization, string encryption, anti-debugging and packers. No marketing, just how it works. Subscribe via RSS.
How code virtualization protects software
Why turning a function into bytecode for a custom virtual machine defeats a disassembler — and what virtualization does and doesn't hide.
LicensingHow crackers attack license checks — and how to defend them
The patch-the-jump, follow-the-string and breakpoint-the-API playbook that breaks naïve license validation, and the layers that stop each step.
Anti-analysisAnti-debugging techniques on Windows, explained
How a program can tell it is being debugged — PEB flags, timing, hardware breakpoints — and why any single check is never enough on its own.
String encryptionWhy your binary's strings betray it
A plain strings scan is the fastest way into an unprotected program. What leaks, why, and how per-string encryption closes the gap.
What an exe packer actually does (and doesn't)
Compression, encryption, import hiding and a loader stub — what packing buys you, where it stops, and why pack-only is weaker than pack-plus-virtualize.
WalkthroughProtecting a C++ application step by step
A start-to-finish walkthrough: mark the sensitive functions, virtualize them, encrypt strings, pack the build, and verify the protected result.