Стоит ли учить ассемблер если хочу научиться реверсингу? Или достаточно понимать какой код ассемлера соответствует коду языка Си? Если да, то какие книги посоветуете?
Почему именно си? Программы же не только на нём пишутся. Учится писать программы на языке ассемблера стоит, потому что при реверсинге вам придётся анализировать вывод дизассемблера, а без опыта написания собственного кода это будет проблематично.
Это не отменяет того факта, что куча программ написана не на си. В реверсинге нужно не ассемблерный код в сишный переводить, а понимать семантику того, что делает конкретный ассемблерный код. Правда для этого бывает полезно знать, какой примерно код выдаёт компилятор языка, на котором написана программа. Например, в том же c++ в отличие от си есть vtables, а в каких нибудь языках со сборщиком мусора и рантаймом есть обращения к рантайму и сборщику мусора. И все эти нюансы надо иметь в виду, когда занимаешься реверс-инженерингом
Мне кажется, прям "учить" не нужно. Главное уметь читать листинги и понимать что происходить.
В общем случае сопоставить ассемблер с сишкой не получится.
Тут зависит от целей автора. Если он собрался реверсить что-то, что по сложности сопоставимо с типичным "Hello world", то, возможно, базового понимания и хватит.
А если что-то уровня коммерческих протекторов типа Oreans, то придется потратить достаточно времени на обучение.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.