2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
|
|
1 | |
декомпиляторы С++26.02.2013, 09:55. Показов 39293. Ответов 27
Метки нет Все метки)
(
0
|
|
26.02.2013, 09:55 | |
Ответы с готовыми решениями:
27
Декомпиляторы Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
26.02.2013, 10:07 | 2 |
существуют только дизассембляторы), любой бинарник можно перевести в ассемблерный код, а вот собрать из него более высокоуровневый язык (и так что бы было правильно) я про такое не слышал
![]()
0
|
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
|
|
26.02.2013, 10:12 [ТС] | 3 |
А бинарник в ассемблер переводится правильно? Если знать ассемблер можно понять всю логику EXE-шника?
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
26.02.2013, 10:24 | 4 |
да правильно, ибо бинарник это почти и есть набор ассемблерных команд,
да ты совершенно прав, но это не очень тривиальная задача ![]()
0
|
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
|
|
26.02.2013, 10:40 [ТС] | 5 |
Какие есть качественные дизассемблеры?
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
26.02.2013, 10:42 | 6 |
знаю 2, CheatEngine и OllyDebugger, в обоих можно посмотреть дизассемблированый бинарь
0
|
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 794
|
|
26.02.2013, 13:03 | 7 |
IDA Pro. В нем и декомпилятор Hex-Rays есть, который в си код перемалывает.
Только вот если ассемблер и внутреннее устройство типичной С++ программы не знаешь, то пока не разберешься можешь даже не пытаться восстановить исходник.
0
|
26.02.2013, 14:09 | 8 |
Зависит от качества дизассемблера. Некоторые могут код с данными спутать, и например строку "Hello, World" могут интерпретировать как последовательность инструкций ассемблера.
0
|
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
|
|
26.02.2013, 14:29 [ТС] | 9 |
А какие дизассемблеры наиболее качественные? Не обязательно чтоб в дизассемблере был декомпилятор.
0
|
2680 / 1742 / 178
Регистрация: 05.06.2011
Сообщений: 5,048
|
|
26.02.2013, 15:37 | 11 |
Зависит, но совершенно другое: как часто он это будет проделывать и вообще -- удобство работы. Спасибо фон Нейману, код от данных ничем и никак не отличить, так что не стоит надеяться, что дизассемблер сам чего-нить осмысленное сделает -- половина работы твоя, если не 90%.
Кстати, помнится, есть ещё один -- SR чего-то там, полностью пакетный -- дизассемблирует, смотришь результат, правишь, снова пропускаешь, он, с учётом твоих правок, дизассемблирует чуть правильнее и т.п.
0
|
26.02.2013, 16:16 | 12 |
Можно отличить когда код и данные в разных сегментах (не те сегменты, которые в сегментных регистрах, а те, которые в PE файле) и компиляторы это умеют делать.
Когда данные наперемешку с кодом, то тут уже конечно задача лежит на человеке.
0
|
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 794
|
|
26.02.2013, 16:32 | 13 |
Зависит напрямую от кода.
По косвенным признакам всегда можно с определенной вероятностью определить где данные, а где код. Причем вероятность довольно высока. Если файл собран со стандартными опциями, то первая подсказка - секции (кода, данных и т.д) и их атрибуты (разрешены чтение, запись, выполнение). Вторая подсказка - ссылки на области памяти, т.е. если код читает в регистр байты по какому-то адресу и производит с ними некоторые вычисления - скорее всего это данные (понятно, что это может быть дешифровка кода, пермутация и т.п., но в реальном стандартном коде такое встречается мягко говоря не часто (чуть чаще чем никогда). IDA Pro вполне успешно определяет код и данные плюс еще и стандартные функции опознает. IDA как раз и позволяет интерактивно работать с кодом (Interactive DisAssembler). Ко всему прочему - процессор ведь как-то выполняет именно код, и можно это сэмулировать в крайнем случае (ясно, что 100% покрытие кода вряд ли получится, но хотя бы так).
0
|
2680 / 1742 / 178
Регистрация: 05.06.2011
Сообщений: 5,048
|
|
26.02.2013, 16:40 | 14 |
Скажем так, это, конечно, помогает. Но если, например, в переменных хранить адрес процедуры... В общем, декомпиляция сколь нибудь серьёзной программы -- тот ещё геморрой. Кому интересно, возьмите хоть Hello, world и попробуйте декомпилить. Удачи!
![]() Добавлено через 6 минут Нечасто? Защита коммерческой проги от воровства, кряка, отладки? Ну, не знаю. Просто не знаю. Но таки, помнится, уже через сотню-другую команд начинается такая каша... В общем, люди справляются, конечно. Но занятие не из лёгких.
0
|
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 794
|
|
26.02.2013, 16:48 | 15 |
Ну если дизассемблирование применять исключительно для взлома/исследования защиты, где код специально написан так, чтобы запутывать исследователя и в эту защиту вложено тысячи $ (крупными софтверными компаниями типа... ну там адоб), то да - непросто. Дизассемблируют ведь не только для этого...
А простые шароварщики либо навесную защиту вешают, которую можно ломать тупо по статьям если есть немного знаний, либо пишут свой велосипед, который опытные исследователи снимают за день в худшем случае.
0
|
![]() |
|
26.02.2013, 17:23 | 16 |
У Адоб кстати к примеру для фотошопа защита фиговая ибо достаточно подменить один файл...
Не помню название, но есть декомпилятор, который по мимо ASM кода, еще составляет приблизительный код на языке Си
0
|
26.02.2013, 18:09 | 17 | |||||
если данные вшиты в секцию кода, то программист (или компилятор) позаботиться о том, чтобы они не выполнялись (как в примере выше). А так системе известно, что есть секция _text, которую и нужно выполнять. Добавлено через 1 минуту
0
|
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 794
|
|
26.02.2013, 18:21 | 18 |
"Какой-то макрос" в дизассемблере раскроется в последовательность команд, (под Windows ведущие к API WriteFile в конечном итоге (либо сразу к ядреным (syscall, int 2e) сервисам в очень хитром коде), а под дос либо к собстаенному коду записи в видеопамять, либо к соотв. прерываниям), которые будут напрямую обращаться к адресу со строкой (push 00402100, например, либо lea eax, xxx push eax).
Именно. Если трейсить программный код - можно сформировать представление о том, где данные, а где код. Можно и сэмулировать работу процессора для обхода всяческих антиотладочных/антидизасмовых уловок (сложно, медленно, но можно). Ко всему - компиляторы высокоуровневых языков редко проворачивают такие фокусы, что становится сложно определить код/данные. Когда код самописный ассемблерный/сишный и написан с целью усложнить исследование - тут другой разговор.
0
|
Модератор
![]() 8873 / 6649 / 910
Регистрация: 14.02.2011
Сообщений: 23,409
|
||||||||||||||||
26.02.2013, 18:35 | 19 | |||||||||||||||
это смотря какой велосипед
у Касперски описано в "Фундаментальные основы хакерства" как он ломал компилятор Харона защита, шифрование проверка кода ![]() и даже без защиты восстановить Сишный исходник нереально, оптимизатор постарается например
0
|
26.02.2013, 18:37 | 20 |
да это понятно, просто я не стал писать код вывода строки на экран, т.к. суть примера не в этом.
Это да, но пример был с целью показать, что не всегда "на глаз" можно отличить данные от кода. Я бы даже сказал они такого вообще не делают. Ну может какой-то специфичный компилятор под специфичную платформу может такое сделать (и то с каким-нибудь хитрым ключом компиляции ![]()
0
|
26.02.2013, 18:37 | |