@TAnonim

Как декомпилировать программу?

Здравствуйте. Только начал пробовать участвовать в ctf, возник вопрос, как декомпилировать простую программу, написанную на С, скомпилированную для linux? Скачал IDA, открыл файл и обнаружил много раздробленного кода на ассемблере:
QC38Nzz.png
Так и должно быть? Как во всём этом разобраться? Мне бы хотя бы примерно понять структуру программы.
На моём линуксе эта программа еще и не запускается почему-то - просто пишет "No such file or directory.", Linux Ubuntu x86_64, программа 32 битная. В чем может быть проблема?
Сама программа, на всякий случай тут.
  • Вопрос задан
  • 10786 просмотров
Решения вопроса 1
@asd111
Нужно начинать с чего то попроще. Например посмотрите уроки по взлому crackme. Так многое прояснится
https://habrahabr.ru/post/276149/
https://habrahabr.ru/post/99549/
https://habrahabr.ru/post/135255/

Написание кейгена:
https://habrahabr.ru/post/255935/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как разобраться? Для начала освоить ассемблер, хотя бы на базовом уровне, чтобы понимать смысл команд. Затем определить стандарт передачи данных в подпрограммы для варианта компиляции вашей программы. Потом изучать все эти подпрограммы sub_XXXX и пытаться понять, что они делают. По ходу изучения переименовывать подпрограммы и адреса данных в удобочитаемую форму. Когда смысл всех подпрограмм станет ясен, можно будет понять, что в целом делает программа.
Ответ написан
На моём линуксе эта программа еще и не запускается почему-то - просто пишет "No such file or directory.",

Как вы её запускаете то? Нужно указывать полный путь, или относительный. Но начальная компонента в пути обязательно должна быть.
Ответ написан
Rou1997
@Rou1997
Вы используете только дизассемблер, а необходим еще декомпилятор C++ (например Hex-Rays - скачайте и установить его в IDA), а также отладчик как средство отслеживания и контроля программы в работе, для UNIX очевидным выбором является отладчик gdb, да и для других ОС он тоже применяется хотя порой с меньшим успехом.
К тому же у вас совсем нет опыта иначе бы вы хотя бы догадались что сперва нужно открыть функцию main в списке слева, поскольку выполнение executable начинается с этой функции.

Сама программа, на всякий случай тут.

На тот случай, если я недостаточно устал от работы, чтобы еще и вами заниматься, а то нечего мне тут бездельничать на Новый год, да? :)

Только начал пробовать участвовать в ctf

Лучше бы вы работали.
Это сложное дело, для него требуется обрести новые навыки, а то и слегка перестроить мышление, для такой перестройки нужен серьезный стимул, например заказ на фрилансе на большую сумму и с уже выплаченным большим авансом, а не спонтанно захотел и сделал, как хотели бы многие.
Ответ написан
@vilgeforce
Раздолбай и программист
"много раздробленного кода" - так программы и пишутся: куча функций, а не одна простыня. Нормально у вас ида отработала, все так и должно быть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы