Fundamentals 3: Intro to Reverse Engineering
by Mark Epstein & Jason An
Reverse engineering is a field of cybersecurity that involves figuring out what a program, often compiled, does, in order to achieve some kind of goal, like bypassing a license check or finding a vulnerability in the software. From professional positions like vulnerability research and malware analysis, to hobbyist activities like game modding or DRM cracking, reverse engineering has a wide variety of interesting applications in cybersecurity. We'll start off by learning basic reverse engineering principles on programs with full to nearly-full source code access, and then move towards learning how to reverse engineer compiled executables later on.
Slides
Challenges
A set of challenges with increasing difficulty are deployed to platform.acmcyber.com to practice the concepts covered in the slides. You can filter for them on the platform by checking "rev" under "Categories", and "week 2" under "week". They are:
rev/Character Numbers
rev/just-dance
rev/brick-maze
rev/salsa69
Resources
The following resources are great tools for some of the reversing challenges:
- Online Java Decompiler: An entirely online tool that can decompile Java jar/class files back to decent-quality source code.
- repl.it: A website that lets you run many different programming languages online, which you can use to play around with programs if you don't want to install them locally.
- CyberChef: An online tool that has a variety of different encoding and encryption schemes, which may be useful.