Looking to get the most out of Binary Ninja? Join one of our upcoming trainings or request a private class for your organization today!
Reverse engineering is the process of understanding a system from its final form. Whether a programmer made a mistake that went undetected in the source, the compiler itself introduced unexpected behavior, or the original source code is unavailable, there are countless properties of programs that can only be uncovered through analyzing their final, compiled form. Which in today's software-dependent world, makes reverse engineering crucial to understanding the true behavior of complex systems and serves a fundamental role in a robust cybersecurity ecosystem.
But again, reverse engineering is a process. Merely being able to see what lies underneath is not enough to reason about how a program behaves. The intent of assembly code, in contrast to its possible source, is inexplicit, hard to reason about, and insecure. Compilers need to map a theoretically infinite number of variables to a finite number of registers, and most processors use memory models that do not differentiate among different data structures, arrays, types, and sometimes even code. Simply put, a tremendous amount of information that is vital in understanding a program is irrecoverably lost through the process of compilation. Consequently, the process of identifying and recovering those structures, variables, types, and everything else that gets lost, is the process of reverse engineering.
Over the course of this training, students will learn the methodologies employed by seasoned experts to deduce and recover nearly all aspects of compiled programs. They will become proficient in recognizing common code patterns, structures, types, and algorithms on sight, while also learning how to effectively record their analysis data to achieve a better understanding of their targets.
To account for the many applications of reverse engineering, the curriculum spans a wide array of optional intermediate topics that students can choose from to allow them to focus on precisely what they require to excel in their role. For those focused on finding bugs, we'll leverage modern analysis techniques to locate and verify them faster than ever before. For those explorers of strange new architectures and platforms, we'll build tooling that works agnostically across all systems. For engineers interested in automation, we'll write cutting-edge analysis scripts to reduce or completely eliminate the need for human interaction. And for anyone feeling restricted by their current tools or workflow, we'll get under the hood and completely customize the reversing experience.
Truly, wherever you are, this course covers everything you need to boost your skills to the next level!
Students must be able to read and write intermediate-level Python scripts. A foundation in reverse engineering, vulnerability research, firmware analysis, or similar is strongly recommended (see our "Which Class Is Right for You?" quiz). Students should be familiar with how the stack works, what the heap is, and some basic vulnerability classes (buffer overflow, stack smashing, etc). Guided exercises reminiscent of low-point reversing CTF challenges are integrated into the course, and students should be able to derive their own solutions.
A laptop that can run Binary Ninja (Ubuntu 20.04/22.04 x64; Windows 10/11 x64; MacOSX 11+ x64, MacOSX 12+ arm64).
(Optional) A VM to run binaries (most binaries are also provided for Linux, Mac, and Windows, though we often focus on just the Linux versions)