Нередко возникают ситуации, когда нужно выяснить, что делает программа, а исходного кода нет, или его сложно читать. На помощь приходит реверс-инжиниринг (англ. reverse engineering — обратная разработка) — процесс исследования готовой программы с целью понять принцип её работы.
С помощью методов реверс-инжиниринга мы можем определить недокументированные возможности, изменить программу или даже воссоздать её аналог. В этой главе мы разберёмся, как устроены программы, как они взаимодействуют с операционной системой, как можно изучать принцип их работы и изменять их.