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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,672
Записей в блоге: 17
26.02.2013, 17:23 #16
Цитата Сообщение от WhiteP Посмотреть сообщение
ну там адоб
У Адоб кстати к примеру для фотошопа защита фиговая ибо достаточно подменить один файл...

Не помню название, но есть декомпилятор, который по мимо ASM кода, еще составляет приблизительный код на языке Си
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 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 Посмотреть сообщение
компиляторы это умеют делать.
конечно же я имел ввиду "дизассемблеры"

0
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 Посмотреть сообщение
если данные вшиты в секцию кода, то программист (или компилятор) позаботиться о том, чтобы они не выполнялись (как в примере выше).
Именно. Если трейсить программный код - можно сформировать представление о том, где данные, а где код.
Можно и сэмулировать работу процессора для обхода всяческих антиотладочных/антидизасмовых уловок (сложно, медленно, но можно).

Ко всему - компиляторы высокоуровневых языков редко проворачивают такие фокусы, что становится сложно определить код/данные. Когда код самописный ассемблерный/сишный и написан с целью усложнить исследование - тут другой разговор.
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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;
}
очень похоже на исходный код?
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
26.02.2013, 18:37 #20
Цитата Сообщение от WhiteP Посмотреть сообщение
"Какой-то макрос" в дизассемблере раскроется в ...
да это понятно, просто я не стал писать код вывода строки на экран, т.к. суть примера не в этом.

Цитата Сообщение от WhiteP Посмотреть сообщение
Именно. Если трейсить программный код - можно сформировать представление о том, где данные, а где код.
Это да, но пример был с целью показать, что не всегда "на глаз" можно отличить данные от кода.
Цитата Сообщение от WhiteP Посмотреть сообщение
Ко всему - компиляторы высокоуровневых языков редко проворачивают такие фокусы, что становится сложно определить код/данные.
Я бы даже сказал они такого вообще не делают. Ну может какой-то специфичный компилятор под специфичную платформу может такое сделать (и то с каким-нибудь хитрым ключом компиляции )
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
26.02.2013, 18:38 #21
Цитата Сообщение от Avazart Посмотреть сообщение
который по мимо ASM кода, еще составляет приблизительный код на языке Си
Hex-Rays прилуда для IDA Pro.
но чаше всего такое дает, что лучше бы не создавал
0
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
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 задизасмила строку - ссылка указывает, что к данному участку есть обращение как к данным. Так это я вручную строку в код влепил. Часто такое компиляторы вытворяют?
1
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
26.02.2013, 18:42 #23
Цитата Сообщение от ValeryS Посмотреть сообщение
и даже без защиты восстановить Сишный исходник нереально
Тот же Касперски не помню в какой книге рассказывал, что именно так исходники Unix попали в Россию.
В каком-то институте группа программистов дизассемблировала Unix и восстановила сишный код, который при компиляции давал один в один ассемблерный код.
Но тогда компиляторы, конечно же, были совершенно другие. С сегодняшним уровнем оптимизации восстановить сишный код наверное реально невозможно, хотя можно постараться, чтоб твой код компилировался в такой же (или очень похожий) ассемблерный код.
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
26.02.2013, 18:43 #24
Цитата Сообщение от WhiteP Посмотреть сообщение
Часто такое компиляторы вытворяют?
очень даже
компиляторы под микроконтроллеры
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
26.02.2013, 18:46 #25
Цитата Сообщение от WhiteP Посмотреть сообщение
Часто такое компиляторы вытворяют?
Что? Вставляют данные в секцию кода? Наверное ни один вменяемый компилятор такого делать не будет.

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

Не по теме:

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

0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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];
но чаще всего это и не нужно главное логику понять и написать свое
0
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
26.02.2013, 19:02 #27
Цитата Сообщение от ValeryS Посмотреть сообщение
отличи вот эту структуру
Ну да, не отличишь. Ибо это одно и то же по сути. По определенным характеристикам все же можно попробовать определить структура это или массив (например, если данные разного типа в структуре и обращаются к ним по разному, соответственно). По обращению с неким указателем можно попытаться понять что это (хотя не всегда возможно).
0
iifat
2235 / 1388 / 103
Регистрация: 05.06.2011
Сообщений: 3,822
27.02.2013, 02:21 #28
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вставляют данные в секцию кода? Наверное ни один вменяемый компилятор такого делать не будет
Смутно припоминаю, правда, не помню уж, на каких компах, возможно, ЕС -- параметры складывались сразу за вызовом процедуры, так что адрес возврата на них указывал. Подпрограмма перед возвратом сдвигала адрес.
0
Yandex
Объявления
27.02.2013, 02:21
Ответ Создать тему
Опции темы

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