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

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

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

Декомпиляторы C#
Android Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex)
Декомпиляторы С++ кода C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
26.02.2013, 18:38     декомпиляторы С++ #21
Цитата Сообщение от Avazart Посмотреть сообщение
который по мимо ASM кода, еще составляет приблизительный код на языке Си
Hex-Rays прилуда для IDA Pro.
но чаше всего такое дает, что лучше бы не создавал
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WhiteP
605 / 203 / 23
Регистрация: 20.11.2012
Сообщений: 419
26.02.2013, 18:41     декомпиляторы С++ #22
и даже без защиты восстановить Сишный исходник нереально, оптимизатор постарается
например
ValeryS, да понятно, я знаю это. Декомпилирование != дизассемблирование. Алгоритм восстановить возможно тем не менее. Один к одному исходник - нет.

Вот пример со строкой в коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
int main()
{
    int a;
    char * str;
    __asm
    {
        mov a, 78
        add eax, 77
        jmp jmphere
lbl: 
        _emit 's'
        _emit 't'
        _emit 'r'
        _emit 0
jmphere:
        lea eax, lbl
        mov str, eax
 
    }
    std::cout<<str;
 
    return 0;
}

Вот листинг IDA как он есть. Правда с PDB символы есть. Но cout оно и так знает.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.text:00401276                 mov     [ebp+a], 4Eh
.text:0040127D                 add     eax, 4Dh
.text:00401280                 jmp     short jmphere
.text:00401282 ; ---------------------------------------------------------------------------
.text:00401282
.text:00401282 lbl:                                    ; DATA XREF: _main:jmphereo
.text:00401282                 jnb     short loc_4012F8
.text:00401284                 jb      short $+2
.text:00401286
.text:00401286 jmphere:                                ; CODE XREF: _main+10j
.text:00401286                 lea     eax, lbl
.text:0040128C                 mov     [ebp+str], eax
.text:0040128F                 mov     edx, [ebp+str]  ; _Val
.text:00401292                 mov     ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; _Ostr
.text:00401298                 call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char const *)
Видно, что хотя IDA задизасмила строку - ссылка указывает, что к данному участку есть обращение как к данным. Так это я вручную строку в код влепил. Часто такое компиляторы вытворяют?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 18:42     декомпиляторы С++ #23
Цитата Сообщение от ValeryS Посмотреть сообщение
и даже без защиты восстановить Сишный исходник нереально
Тот же Касперски не помню в какой книге рассказывал, что именно так исходники Unix попали в Россию.
В каком-то институте группа программистов дизассемблировала Unix и восстановила сишный код, который при компиляции давал один в один ассемблерный код.
Но тогда компиляторы, конечно же, были совершенно другие. С сегодняшним уровнем оптимизации восстановить сишный код наверное реально невозможно, хотя можно постараться, чтоб твой код компилировался в такой же (или очень похожий) ассемблерный код.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
26.02.2013, 18:43     декомпиляторы С++ #24
Цитата Сообщение от WhiteP Посмотреть сообщение
Часто такое компиляторы вытворяют?
очень даже
компиляторы под микроконтроллеры
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 18:46     декомпиляторы С++ #25
Цитата Сообщение от WhiteP Посмотреть сообщение
Часто такое компиляторы вытворяют?
Что? Вставляют данные в секцию кода? Наверное ни один вменяемый компилятор такого делать не будет.

Добавлено через 28 секунд

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
компиляторы под микроконтроллеры
а ну хз, я с такими не знаком)

ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
26.02.2013, 18:48     декомпиляторы С++ #26
Цитата Сообщение от WhiteP Посмотреть сообщение
Алгоритм восстановить возможно.
приблизится к нему
например
отличи вот эту структуру
C++
1
2
3
4
5
6
7
struct A
{
int A1;
int A2;
int A3;
int A4;
}
от массива
C++
1
int B[4];
но чаще всего это и не нужно главное логику понять и написать свое
WhiteP
605 / 203 / 23
Регистрация: 20.11.2012
Сообщений: 419
26.02.2013, 19:02     декомпиляторы С++ #27
Цитата Сообщение от ValeryS Посмотреть сообщение
отличи вот эту структуру
Ну да, не отличишь. Ибо это одно и то же по сути. По определенным характеристикам все же можно попробовать определить структура это или массив (например, если данные разного типа в структуре и обращаются к ним по разному, соответственно). По обращению с неким указателем можно попытаться понять что это (хотя не всегда возможно).
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,692
27.02.2013, 02:21     декомпиляторы С++ #28
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вставляют данные в секцию кода? Наверное ни один вменяемый компилятор такого делать не будет
Смутно припоминаю, правда, не помню уж, на каких компах, возможно, ЕС -- параметры складывались сразу за вызовом процедуры, так что адрес возврата на них указывал. Подпрограмма перед возвратом сдвигала адрес.
Yandex
Объявления
27.02.2013, 02:21     декомпиляторы С++
Ответ Создать тему
Опции темы

Текущее время: 22:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru