Программирование – одна из тех профессий, где возможны сотни специализаций, причем среди них как изначально противозаконные, так и самые благородные. Реверс-инжиниринг (RE) – не самый законный метод заработка на жизнь, но иногда он бывает нужен и для законных применений.
RE стоит ближе всего к хакингу, причем хакинг может быть связан не только с программным обеспечением, но и с аппаратным. Задача RE – понять, как работает объект взлома, какие в нем заложены алгоритмы и секреты, чтобы потом воспроизвести аналог, который не будет иметь явно заимствованных из оригинала частей. Создание полного аналога или заимствование алгоритма в чистом виде в современном мире почти всегда противозаконно, но даже в годы войны, когда на это никто не обращал внимание, оружие врага изучалось и внедрялось подобным же образом – не напрямую, а с применением собственных новаций. Еще позже дело дошло до микросхем, компьютеров, машин и даже одежды: кому интересно, пусть спросят у китайцев и японцев, а нам ближе программное обеспечение.
Все читали лицензионные соглашения (хотя бы название), и все знают, что его нельзя вскрывать, исследовать и вообще проявлять к нему нездоровый интерес. Но бывают случаи, когда это делать просто необходимо. К примеру, в целях национальной безопасности – а ну как в программу внедрен шпионский модуль? Или наоборот – остался ли НАШ шпионских модуль у НИХ? Если не играть в разведчиков, то RE постоянно занимаются разработчики антивирусных программ, исследуя поведение вирусов, ну чем же это не законный метод? Бывает, что программа крайне нужна, а ее разработчики прекратили поддержку. В этом случае нужно создавать свой вариант, и почему бы при этом не поинтересоваться – а как работал оригинал?
Как правило, софт, написанный на традиционных языках (C++, Delphi, Modula-2, Fortran и т.д.), плохо подготовлены к реинжинирингу, так как неплохо оптимизированы, почти не имеют отладочной информации. Более того, в особо сложных случаях авторы применяют динамические архиваторы, обсфукаторы и кодировщики для того, чтобы затруднить исследование. В результате приходится использовать дизассемблеры, отладчики, эмуляторы исполняющей среды и прочие штуки, которые сложны для понимания – это не ВКонтакте взламывать. А вот для Java- и NET-языков, где используется особый промежуточный код, уже давно созданы автоматические декомпиляторы, воссоздающие программу почти в исходном виде. Как и для программ баз данных – FoxPro, Clipper, dBase, Clarion и тому подобных. Декомпиляторы нужны и самим авторам программ – они тоже иногда теряют свои исходные коды (особенно школьники и студенты за день до сдачи лабораторной работы). И, что более всего интересно, RE чрезвычайно высоко оплачивается, так что никакой кризис RE-специалистам не страшен.