While we all know what fun reverse engineering of code can be, I am wondering what legitimate industries, besides the anti-X industry, reverse engineer code? While this may sometimes be needed in many technical roles, I am speaking more of jobs where this is a primary responsibility. I suspect there are very few jobs where reverse engineering is a necessary skill, or few that would be admitted to, but don't know that for certain. Yes, it is of course always a complementary skill!
Community wiki: feel free to edit
As a main skill
- malware analysis
- digital forensics and Incident response
- security assessment, pen testing
- is this website/software/cpu really secure? which one is the most secure?
- si vis pacem, para bellum
plagiarism detection (if a company sues another one because they claim they stole their source code)
- source code recovery
- because backup may fails
- business logic recovery / process recovery (regarding Legacy Systems)
- because documenting all the quirks, workarounds and clever solutions adequately is hard
As a side skill
- understanding what a program is about
- because too often, one doesn't have the time to document how an internal tool works
Here's a few that you may not usually think about:
- Car tuning shops. A lot of modern car tuning is basically firmware hacking.
- Compiler development. When you're making a toolchain that produces code that other people will rely on, it's good to have an outside tool for sanity check.
- General software development. While debuggers are usually enough, sometimes you need to RE your own program to realize what's going on. Or look inside a library you're using when docs are incomplete, wrong, or just plain missing.
- Checking out what your competitors are doing (both software and hardware).
No one seems to have mentioned compatibility yet. I know this isn't the biggest thing reversing is used for, but making software that is compatible with proprietary file formats or protocols is very important, fairly common, and explicitly protected by law in some countries.
Often, a developer can use reversing as a "complementary skill", but in many cases it would make sense for this to be someone's job. For example, when using clean-room techniques, or if the file format or protocol is excessively complex.
Probably a niche but my RE skills often help to get (CR)Applications to work in virtual environments such as Citrix XenApp/XenDesktop.
I write a lot about these experiences on my blog.
self promo warning: here are a few recent examples:
It's rampant in the microprocessor industry; here are a few sources you might find interesting: