Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 101, средняя оценка - 4.96
Akkanee
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
#1

декомпиляторы С++ - C++

26.02.2013, 09:55. Просмотров 14180. Ответов 27
Метки нет (Все метки)

Здравствуйте,
интересен такой вопрос - существуют ли декомпиляторы в С++ ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 09:55     декомпиляторы С++
Посмотрите здесь:

Декомпиляторы - C#
Ребята, какой на ваше мнение лучший декомпилятор, какой максимально точно код востанавливает??? если знаете дайте ссылочку.........на...

Декомпиляторы С++ кода - C++
Декомпиляторы С++ кода Доброго вечера!! Перечислите поджалуста, назовите. Ссылки, это, крайне приветствую! Очень хочу...

Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex) - Программирование Android
Есть приложение, которое требует ввести пароль, задача его узнать. Имеем файл Test.apk и полученные исходники (jar). (Все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
26.02.2013, 10:07     декомпиляторы С++ #2
существуют только дизассембляторы), любой бинарник можно перевести в ассемблерный код, а вот собрать из него более высокоуровневый язык (и так что бы было правильно) я про такое не слышал
Akkanee
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
26.02.2013, 10:12  [ТС]     декомпиляторы С++ #3
А бинарник в ассемблер переводится правильно? Если знать ассемблер можно понять всю логику EXE-шника?
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
26.02.2013, 10:24     декомпиляторы С++ #4
да правильно, ибо бинарник это почти и есть набор ассемблерных команд,
Цитата Сообщение от Akkanee Посмотреть сообщение
Если знать ассемблер можно понять всю логику EXE-шника?
да ты совершенно прав, но это не очень тривиальная задача
Akkanee
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
26.02.2013, 10:40  [ТС]     декомпиляторы С++ #5
Какие есть качественные дизассемблеры?
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
26.02.2013, 10:42     декомпиляторы С++ #6
знаю 2, CheatEngine и OllyDebugger, в обоих можно посмотреть дизассемблированый бинарь
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
26.02.2013, 13:03     декомпиляторы С++ #7
Цитата Сообщение от Akkanee Посмотреть сообщение
Какие есть качественные дизассемблеры?
IDA Pro. В нем и декомпилятор Hex-Rays есть, который в си код перемалывает.
Только вот если ассемблер и внутреннее устройство типичной С++ программы не знаешь, то пока не разберешься можешь даже не пытаться восстановить исходник.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 14:09     декомпиляторы С++ #8
Цитата Сообщение от Akkanee Посмотреть сообщение
А бинарник в ассемблер переводится правильно?
Зависит от качества дизассемблера. Некоторые могут код с данными спутать, и например строку "Hello, World" могут интерпретировать как последовательность инструкций ассемблера.
Akkanee
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 65
26.02.2013, 14:29  [ТС]     декомпиляторы С++ #9
А какие дизассемблеры наиболее качественные? Не обязательно чтоб в дизассемблере был декомпилятор.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 15:13     декомпиляторы С++ #10
Уже ж ответили выше - из известных IDA Pro и OllyDebuger.
iifat
2219 / 1372 / 101
Регистрация: 05.06.2011
Сообщений: 3,771
26.02.2013, 15:37     декомпиляторы С++ #11
Цитата Сообщение от Kastaneda Посмотреть сообщение
Зависит от качества дизассемблера. Некоторые могут код с данными спутать
Зависит, но совершенно другое: как часто он это будет проделывать и вообще -- удобство работы. Спасибо фон Нейману, код от данных ничем и никак не отличить, так что не стоит надеяться, что дизассемблер сам чего-нить осмысленное сделает -- половина работы твоя, если не 90%.
Кстати, помнится, есть ещё один -- SR чего-то там, полностью пакетный -- дизассемблирует, смотришь результат, правишь, снова пропускаешь, он, с учётом твоих правок, дизассемблирует чуть правильнее и т.п.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 16:16     декомпиляторы С++ #12
Цитата Сообщение от iifat Посмотреть сообщение
Спасибо фон Нейману, код от данных ничем и никак не отличить, так что не стоит надеяться, что дизассемблер сам чего-нить осмысленное сделает
Можно отличить когда код и данные в разных сегментах (не те сегменты, которые в сегментных регистрах, а те, которые в PE файле) и компиляторы это умеют делать.
Когда данные наперемешку с кодом, то тут уже конечно задача лежит на человеке.
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
26.02.2013, 16:32     декомпиляторы С++ #13
Цитата Сообщение от iifat Посмотреть сообщение
Зависит, но совершенно другое: как часто он это будет проделывать и вообще -- удобство работы. Спасибо фон Нейману, код от данных ничем и никак не отличить, так что не стоит надеяться, что дизассемблер сам чего-нить осмысленное сделает -- половина работы твоя, если не 90%.
Зависит напрямую от кода.
По косвенным признакам всегда можно с определенной вероятностью определить где данные, а где код. Причем вероятность довольно высока. Если файл собран со стандартными опциями, то первая подсказка - секции (кода, данных и т.д) и их атрибуты (разрешены чтение, запись, выполнение). Вторая подсказка - ссылки на области памяти, т.е. если код читает в регистр байты по какому-то адресу и производит с ними некоторые вычисления - скорее всего это данные (понятно, что это может быть дешифровка кода, пермутация и т.п., но в реальном стандартном коде такое встречается мягко говоря не часто (чуть чаще чем никогда). IDA Pro вполне успешно определяет код и данные плюс еще и стандартные функции опознает. IDA как раз и позволяет интерактивно работать с кодом (Interactive DisAssembler).
Ко всему прочему - процессор ведь как-то выполняет именно код, и можно это сэмулировать в крайнем случае (ясно, что 100% покрытие кода вряд ли получится, но хотя бы так).
iifat
2219 / 1372 / 101
Регистрация: 05.06.2011
Сообщений: 3,771
26.02.2013, 16:40     декомпиляторы С++ #14
Скажем так, это, конечно, помогает. Но если, например, в переменных хранить адрес процедуры... В общем, декомпиляция сколь нибудь серьёзной программы -- тот ещё геморрой. Кому интересно, возьмите хоть Hello, world и попробуйте декомпилить. Удачи!

Добавлено через 6 минут
Цитата Сообщение от WhiteP Посмотреть сообщение
дешифровка кода, пермутация и т.п., но в реальном стандартном коде такое встречается мягко говоря не часто
Нечасто? Защита коммерческой проги от воровства, кряка, отладки? Ну, не знаю. Просто не знаю. Но таки, помнится, уже через сотню-другую команд начинается такая каша... В общем, люди справляются, конечно. Но занятие не из лёгких.
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
26.02.2013, 16:48     декомпиляторы С++ #15
Цитата Сообщение от iifat Посмотреть сообщение
Нечасто? Защита коммерческой проги от воровства, кряка, отладки?
Ну если дизассемблирование применять исключительно для взлома/исследования защиты, где код специально написан так, чтобы запутывать исследователя и в эту защиту вложено тысячи $ (крупными софтверными компаниями типа... ну там адоб), то да - непросто. Дизассемблируют ведь не только для этого...
А простые шароварщики либо навесную защиту вешают, которую можно ломать тупо по статьям если есть немного знаний, либо пишут свой велосипед, который опытные исследователи снимают за день в худшем случае.
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,285
Записей в блоге: 17
26.02.2013, 17:23     декомпиляторы С++ #16
Цитата Сообщение от WhiteP Посмотреть сообщение
ну там адоб
У Адоб кстати к примеру для фотошопа защита фиговая ибо достаточно подменить один файл...

Не помню название, но есть декомпилятор, который по мимо ASM кода, еще составляет приблизительный код на языке Си
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 18:09     декомпиляторы С++ #17
Цитата Сообщение от WhiteP Посмотреть сообщение
По косвенным признакам всегда можно с определенной вероятностью определить где данные, а где код
Assembler
1
2
3
4
5
6
7
mov eax, ebx
jmp lbl
str:
db 'H', 'e', 'l' ; и т.д.
lbl:
print str ; допустим есть какой то макрос print
cmp eax, ebx
тут нереально отличить данные от кода

Цитата Сообщение от WhiteP Посмотреть сообщение
процессор ведь как-то выполняет именно код
если данные вшиты в секцию кода, то программист (или компилятор) позаботиться о том, чтобы они не выполнялись (как в примере выше).
А так системе известно, что есть секция _text, которую и нужно выполнять.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
компиляторы это умеют делать.
конечно же я имел ввиду "дизассемблеры"

WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
26.02.2013, 18:21     декомпиляторы С++ #18
Цитата Сообщение от Kastaneda Посмотреть сообщение
print str ; допустим есть какой то макрос print
"Какой-то макрос" в дизассемблере раскроется в последовательность команд, (под Windows ведущие к API WriteFile в конечном итоге (либо сразу к ядреным (syscall, int 2e) сервисам в очень хитром коде), а под дос либо к собстаенному коду записи в видеопамять, либо к соотв. прерываниям), которые будут напрямую обращаться к адресу со строкой (push 00402100, например, либо lea eax, xxx push eax).

Цитата Сообщение от Kastaneda Посмотреть сообщение
если данные вшиты в секцию кода, то программист (или компилятор) позаботиться о том, чтобы они не выполнялись (как в примере выше).
Именно. Если трейсить программный код - можно сформировать представление о том, где данные, а где код.
Можно и сэмулировать работу процессора для обхода всяческих антиотладочных/антидизасмовых уловок (сложно, медленно, но можно).

Ко всему - компиляторы высокоуровневых языков редко проворачивают такие фокусы, что становится сложно определить код/данные. Когда код самописный ассемблерный/сишный и написан с целью усложнить исследование - тут другой разговор.
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,653
26.02.2013, 18:35     декомпиляторы С++ #19
Цитата Сообщение от WhiteP Посмотреть сообщение
либо пишут свой велосипед, который опытные исследователи снимают за день в худшем случае.
это смотря какой велосипед
у Касперски описано в "Фундаментальные основы хакерства" как он ломал компилятор Харона
защита, шифрование проверка кода
и даже без защиты восстановить Сишный исходник нереально, оптимизатор постарается
например
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
public:
 int x;
A(int m){x=m;};
};
int main ()
{
A a(5);
return a.x;
}
превратит в
Assembler
1
2
3
main:
mov eax,5;
ret
что соответствует
C++
1
2
3
4
int main ()
{
return 5;
}
очень похоже на исходный код?
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 18:37     декомпиляторы С++ #20
Цитата Сообщение от WhiteP Посмотреть сообщение
"Какой-то макрос" в дизассемблере раскроется в ...
да это понятно, просто я не стал писать код вывода строки на экран, т.к. суть примера не в этом.

Цитата Сообщение от WhiteP Посмотреть сообщение
Именно. Если трейсить программный код - можно сформировать представление о том, где данные, а где код.
Это да, но пример был с целью показать, что не всегда "на глаз" можно отличить данные от кода.
Цитата Сообщение от WhiteP Посмотреть сообщение
Ко всему - компиляторы высокоуровневых языков редко проворачивают такие фокусы, что становится сложно определить код/данные.
Я бы даже сказал они такого вообще не делают. Ну может какой-то специфичный компилятор под специфичную платформу может такое сделать (и то с каким-нибудь хитрым ключом компиляции )
Yandex
Объявления
26.02.2013, 18:37     декомпиляторы С++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru