Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Преобразование .exe-файла в .cpp


Автор: KaraKum 3.12.2007, 16:22
Такой вопрос: как можно (если вообще можно) преобразовать файл формата .exe в файл формата .cpp?

Автор: zkv 3.12.2007, 16:24
можешь считать что никак.

Автор: KaraKum 3.12.2007, 16:32
А можно сделать как-нибудь так, чтобы хоть как-то понятен код стал. В формате .obj понять код, по-моему, нет шансов  smile .

Автор: zkv 3.12.2007, 16:35
Цитата(KaraKum @  3.12.2007,  16:32 Найти цитируемый пост)
В формате .obj понять код

а причем тут .obj ?

Цитата(KaraKum @  3.12.2007,  16:32 Найти цитируемый пост)
А можно сделать как-нибудь так, чтобы хоть как-то понятен код стал.

дизассемблируй и изучай (ехешник)

Автор: KaraKum 3.12.2007, 16:45
Цитата(zkv @ 3.12.2007,  16:35)
дизассемблируй

Вот-вот. А разве после дизассемблирования получается не файл формата .obj? Я имею в виду из .exe файла можно сделать файл формата языка C++?

Автор: zkv 3.12.2007, 16:47
Цитата(KaraKum @  3.12.2007,  16:45 Найти цитируемый пост)
Я имею в виду из .exe файла можно сделать файл формата языка C++?

можно, изучи логику и напиши программу заново. Других путей не вижу  smile 
Цитата(KaraKum @  3.12.2007,  16:45 Найти цитируемый пост)
А разве после дизассемблирования получается не файл формата .obj

получается файл формата .asm те программа на ассемблере.

Автор: JackYF 3.12.2007, 16:47
Цитата(KaraKum @  3.12.2007,  16:45 Найти цитируемый пост)
Я имею в виду из .exe файла можно сделать файл формата языка C++? 

дизассемблирование даёт ассемблерный код.

Автор: KaraKum 3.12.2007, 16:58
 smile . А ассемблерный код в формат языка C++ перевести никак нельзя?

Автор: zkv 3.12.2007, 17:13
Цитата(KaraKum @  3.12.2007,  16:58 Найти цитируемый пост)
А ассемблерный код в формат языка C++ перевести никак нельзя? 


Цитата(zkv @  3.12.2007,  16:47 Найти цитируемый пост)
можно, изучи логику и напиши программу заново. Других путей не вижу

 smile 

Автор: JackYF 3.12.2007, 17:19
Цитата(KaraKum @  3.12.2007,  16:58 Найти цитируемый пост)
А ассемблерный код в формат языка C++ перевести никак нельзя? 

а ты сначала головой и руками попробуй, а там увидишь, насколько легко переводить ассемблерный код в С++-ный. smile

Автор: Alexeis 3.12.2007, 17:26
Современные дизассемблеры типа Ida кой в чем может помочь. Например, определить что там присвоение строки, построить дерево вызовов функций. Иногда можно определить фрагмент стандартной библиотеки. Прожка DeDe может неплохо экзешник билдера разобрать. Но все это лишь частично.

Автор: KaraKum 3.12.2007, 17:31
5 минут назад дизассемблировал собственную программу размером в 2500 строк (160Кб) (на языке С++), а получилась программа на языке ассемблера, наверное, в миллиард строк, а что делать с прогами в десятки мегабайт? Стоит пытаться понять такие программы или жизни не хватит?

Автор: SABROG 3.12.2007, 17:33
Ассемблер - язык для творческих личностей, один и тот же алгоритм можно написать в большом количестве вариаций. Иногда эти вариации бывают такие, что точную логику программы ты понять не сможешь. Простой пример умножение на 2. На ассемблере для этого можно использовать mul/imul, а можно shl/sal.

Если компилятор оптимизировал код, то твой exe2cpp дизассемблер может выдать что-то вроде этого:

Код

unsigned char a = 1;
a = a << 1;


А не 

Код

unsigned char a = 1;
a *= 2;


Возникнут сразу мысли о том, какие программисты были хитрые, что так зашифровали свой код ;)

Автор: KaraKum 3.12.2007, 17:43
Мне понравилась фраза "exe2cpp дизассемблер". Она звучит как: "Существует программа, которая преобразует .exe файлы в .cpp файлы". Я прав?

Автор: bsa 3.12.2007, 17:45
SABROG, ха. очень может быть, что в результате выйдет unsigned char a = 2; smile

Добавлено через 49 секунд
Цитата(KaraKum @ 3.12.2007,  17:43)
Мне понравилась фраза "exe2cpp дизассемблер". Она звучит как: "Существует программа, которая преобразует .exe файлы в .cpp файлы". Я прав?

речь идет о гипотетической программе.

Автор: SABROG 3.12.2007, 17:47
Ну есть такая программа, сам не пробывал, возможно там есть вирус. Конвертит exe в Си и Asm: http://www.bbs.motion-bg.com/dl.php?file=19

Добавлено через 1 минуту и 34 секунды
Цитата(bsa @ 3.12.2007,  17:45)
SABROG, ха. очень может быть, что в результате выйдет unsigned char a = 2; smile

Верно, как вариант может быть и такое. В зависимости от степени оптимизации smile

Автор: KaraKum 3.12.2007, 17:58
Цитата(bsa @ 3.12.2007,  17:45)
Цитата(KaraKum @ 3.12.2007,  17:43)
Мне понравилась фраза "exe2cpp дизассемблер". Она звучит как: "Существует программа, которая преобразует .exe файлы в .cpp файлы". Я прав?

речь идет о гипотетической программе.

А, чёрт!  smile .
В дизассемблерном файле даже не понятно где кончается стандартный набор Windows функций и начинается текст самой программы  smile .

Автор: SABROG 3.12.2007, 18:03
Цитата(KaraKum @ 3.12.2007,  17:58)
Цитата(bsa @ 3.12.2007,  17:45)
Цитата(KaraKum @ 3.12.2007,  17:43)
Мне понравилась фраза "exe2cpp дизассемблер". Она звучит как: "Существует программа, которая преобразует .exe файлы в .cpp файлы". Я прав?

речь идет о гипотетической программе.

А, чёрт!  smile .
В дизассемблерном файле даже не понятно где кончается стандартный набор Windows функций и начинается текст самой программы  smile .

smile а если он еще запакован каким-нибудь UPX, то вы вообще получишь только код распаковщика вместо алгоритма программы.

Автор: KaraKum 3.12.2007, 18:21
То есть всё? Пиши пропало?
У меня есть такой пример: давным давно (ну поехали...) когда мне нравилась игра WarCraft3 и я в неё играл (и сейчас нравится) я встречал программу AMAI, сделанную поклонниками игры (как я слышал), которую нужно было устанавливать поверх игры и представляла она из себя противника который был гораздо сильнее компьютера от самого разроботчика игры "Blizzard".
Так вот, это правда фанаты дизассемблировали игру и создали к ней приложение AMAI (ужас! игра весит около гигабайта!) или вероятнее это продукт от "Blizzard"?

Автор: SABROG 3.12.2007, 18:34
Зависит от твоих задач. "Поклонники" и алгоритм запаковки определят и структуру файла и библиотеку напишут для распаковки и хуки расставят в нужных местах, чтобы найти адрес где вызывается искусственный интеллект и напишут свой интеллект, и напишут патчер памяти, чтобы приаттачиться к процессу и заменить 4 байта адреса оригинального AI на свой.

Мало кто дизассемблирует программу, чтобы понять какой алгоритм защиты стоит и попробывать найти в нем уязвимости. Обычно все идут по пути меньшего сопротивления, ищут слабые места, такие как поиск условий при которых программа думает, что она зарегистрирована.

Автор: MAKCim 3.12.2007, 18:45
Цитата(KaraKum @  3.12.2007,  18:21 Найти цитируемый пост)
То есть всё? Пиши пропало?

нет конечно
тут важны 3 составляющие: время, голова, желание  smile 

Автор: KaraKum 3.12.2007, 18:46
В принципе моя задача по принципу как у "поклонников": создать приложение к уже существующей программе и получить возможность получать данные о некоторых внутренних для программы объектах.
Получается мне остаётся до конца освоить ассемблер (немножко уже знаю!  smile   smile ), узнать что такое алгоритм запаковки, библиотека для распаковки, жуки, патчер памяти и приаттачиваться и всё я буду  smile ?

Автор: Dims 3.12.2007, 19:26
На современных технологиях, в автоматическом режиме, это невозможно.

Дело в том, что когда компьютер переводит с языка Си++ на машинный язык (это называется "компилированием") он выполняет операцию, которую можно было бы называть "аналитической". Он берёт конструкции на языке высокого уровня (например, Си++) и разбивает их на элементарные составляющие (машинные команды). 

Такие задачи с самого своего рождения компьютеры решали хорошо.

А вот обратную операцию, которую можно было бы назвать "синтетической", компьютеры решают плохо. Сюда относится и обратный перевод с машинного языка, и распознавание образов и речи. Многие из этих задач традиционно относятся к сфере так называемого "искусственного интеллекта". Эти задачи состоят в том, чтобы агрегировать множество частностей (например, машинных команд или пикселей) и распознать в них целостный образ (например, конструкцию языка Си++ или напечатанную букву).

Интересно заметить, что люди характеризуются обратным свойством: даже самые бестолковые из нас легко распознают образы (например, узнают знакомые лица, картины, символы и другое), и с большим трудом раскладывают образ на составляющие (например, способны узнаваемо нарисовать своего приятеля или выразить в словах какое-то переживание или впечатление).

Автор: KaraKum 3.12.2007, 20:20
Мда. Не обнадёживающий прогноз.
Можете посоветовать какую-нибудь литературу, что поможет в данном вопросе? Я вроде освоил ассемблер по учебнику В Юров. Assembler, но слова библиотека распаковки, жуки, приаттачиваться и патчер памяти для меня новые  smile .

Автор: bsa 3.12.2007, 20:23
Цитата(Dims @ 3.12.2007,  19:26)
Дело в том, что когда компьютер переводит с языка Си++ на машинный язык (это называется "компилированием") он выполняет операцию, которую можно было бы называть "аналитической". Он берёт конструкции на языке высокого уровня (например, Си++) и разбивает их на элементарные составляющие (машинные команды).

Если бы все было именно так, то давно бы были написаны декомпиляторы для всех компиляторов (конечно, шаблоны они бы не восстанавливали).
Компиляторы не просто раскладывают на "элементарные составляющие", но еще и оптимизируют. Так вот иногда после оптимизации код становится совершенно непохожим на оригинал.
Кому интересно, соберите какой-нибудь проект на C++ с помощью GCC указав опции -O2 -g3 (оптимизация + отладка) и попробуйте пройтись отладчиком. Будете сильно удивлены поведению отладчика. Я, например, как-то пол дня потратил на то, чтобы понять, почему у меня не входит в тело оператора if, хотя судя по переменным должно было.

Добавлено через 2 минуты и 16 секунд
Цитата(KaraKum @ 3.12.2007,  20:20)
но слова библиотека распаковки, жуки, приаттачиваться и патчер памяти для меня новые  smile .

не "жуки", а "хуки". Читай "перехватчики".
"Патчер памяти" - это программа, способная изменять память любого процесса.

Автор: KaraKum 3.12.2007, 20:34
Вот-вот. Я имею в виду где об этом можно узнать не понаслышке Есть какая-нибудь подходящая для такого дела литература?

Автор: MAKCim 3.12.2007, 22:06
KaraKum
ссылки на другие форумы - это конечно не хорошо, но все-таки советую заглянуть http://wasm.ru

Автор: Dims 4.12.2007, 00:12
Цитата(bsa @  3.12.2007,  20:23 Найти цитируемый пост)
Если бы все было именно так, то давно бы были написаны декомпиляторы для всех компиляторов (конечно, шаблоны они бы не восстанавливали).

Давным давно я что-то такое встречал. Когда ещё оптимизаторов было мало.

Автор: SABROG 4.12.2007, 12:54
Цитата(KaraKum @ 3.12.2007,  20:34)
Вот-вот. Я имею в виду где об этом можно узнать не понаслышке Есть какая-нибудь подходящая для такого дела литература?

Подумай лишний раз надо это тебе или нет. Многим геймерам хватает ArtMoney.
Я как-то в эти дебри лазил, использовал SoftIce, IDA Pro, программы для снятия дампа памяти процесса, чтобы на винт сбросить ту же программу в exe файл, но уже полностью распакованную.
Писал патчеры/тренеры на fasme, изучал алгоритмы шифрования, чтобы редактировать save файлы и т.п. Просто занимался кряком программ, кейгенами. 

Но, чтобы серьезно этим заниматься жизни не хватит и надо иметь математический склад ума.
Разработчики защит тоже на месте не стоят, один gameguard чего стоит, пока драйвер клавиатуры и мышки не напишешь ничего не сделать, они ведь ко всему прочему еще под каждую игру свою версию выпускают, поэтому универсальных патчей нету. 

Неблагодарное это дело ковырять чужие программы, если за это не планируется получать хороший доход.

Автор: KaraKum 7.12.2007, 10:30
С помощью какой программы можно дизассемблировать .exe файлы?

Автор: regis 7.12.2007, 13:09
Цитата(KaraKum @ 7.12.2007,  10:30)
С помощью какой программы можно дизассемблировать .exe файлы?

Ну вот, например, стандартная U*X-овская утилита "objdump" умеет (в числе прочего) и дисассемблировать машинный код. Поищите порт под Win -- он работает и с объектными файлами, и с EXE формата PE. Подробнее об этом: http://en.wikipedia.org/wiki/Objdump

А по поводу восстановления объектных файлов до исходников на языке высокого уровня, есть старая аналогия: "Это примерно так же просто, как восстановить живую корову из кучи говяжих котлет ." ;)


Автор: KaraKum 7.12.2007, 13:12
Цитата(regis @ 7.12.2007,  13:09)
А по поводу восстановления объектных файлов до исходников на языке высокого уровня, есть старая аналогия: "Это примерно так же просто, как восстановить живую корову из кучи говяжих котлет ." ;)

сложновато...

Автор: Loony 7.12.2007, 13:25
Цитата

В принципе моя задача по принципу как у "поклонников": создать приложение к уже существующей программе и получить возможность получать данные о некоторых внутренних для программы объектах.


А какого рода приложение и с какой целью это делается? Возможно уже есть SDK от разработчиков! 

Автор: W4FhLF 7.12.2007, 13:41
Ну вот буквально недельку назад небеизвестная в определённых кругах группа YAG зарелизила http://www.hex-rays.com/ от Ильфака(автор IDA) стоимостью 2k$. 

Вот примерчик:

user posted image

А вот результата работы над той же функцией шестнадцатиричныхлучей:

user posted image

Так, что можешь найти сие творение гениальных рук без проблем и облегчить себе жизнь, если совесть позволит конечно smile

Автор: Loony 7.12.2007, 13:47
Цитата

Ну вот, например, стандартная U*X-овская утилита "objdump" умеет (в числе прочего) и дисассемблировать машинный код. Поищите порт под Win -- он работает и с объектными файлами, и с EXE формата PE.


Помоему ему это не очень подходит! Получит он кучу ассемблерных листингов и что делать будет с ними!? Тут должны помочь либо IDA, либо Olly, т.е. дабагер. Только все равно тут работы, в зависимости от сложности защиты программы и наличия необходимых знаний, от нескольких дней до бесконечности! Имхо, не простая это задача в наше время!

Автор: Puoar 7.12.2007, 15:23
А я видел bat2asm от китайских вундеркиндов

Автор: SABROG 7.12.2007, 15:49
Цитата(Puoar @ 7.12.2007,  15:23)
А я видел bat2asm от китайских вундеркиндов

Скажем так, сейчас все языки программирования это HLL2ASM, а вот обратное фиг. Только Hex Rays, да и то из того что я увидел врятли он сильно поможет.

Автор: W4FhLF 7.12.2007, 16:10
Цитата(SABROG @  7.12.2007,  15:49 Найти цитируемый пост)
Только Hex Rays, да и то из того что я увидел врятли он сильно поможет.


exe2compilable_source - это сказка. В любом случае надо обтачивать результат руками и тут у HexRays проблемы, ибо интерактивность листинга с Pseudocode фактически нулевая. В любом случае сначала надо поработать над asm-листингом, а далее уже и псевдокод можно до ума довести. Т.е. без знания ассемблера и процесса дизассемблирования опять же никуда. Но плагин очень хороший, тем более пока только первая версия, если такие вот сливы на паблик не снизят инициативы в его развитии, со стороны автора, то продукт обещает быть очень полезным. 

Автор: KaraKum 9.12.2007, 07:51
Цитата(W4FhLF @ 7.12.2007,  16:10)
Т.е. без знания ассемблера и процесса дизассемблирования опять же никуда.

Основы ассемблера я знаю, но если будет нужно, то освою и весь - дело того стоит, но проблема в том, что я, например, скомпилировав такое консольное приложение :

Код

main()
{
     int a = 4+5;
     return a;
}


после его дизассемблирования получил текстовый файл размером почти 2 мегабайта! Это же роман "Война и мир"! Я понимаю, что и на ассемблере этот фрагмент состоит из нескольких строк, а остальное занимает код стандартных функций Windows, но всё же... 

Автор: JackYF 9.12.2007, 11:17
Цитата(KaraKum @  9.12.2007,  07:51 Найти цитируемый пост)
после его дизассемблирования получил текстовый файл размером почти 2 мегабайта!

оо... ты чем компилировал и с какими настройками?..

Автор: MAKCim 9.12.2007, 12:00
Цитата(KaraKum @  9.12.2007,  07:51 Найти цитируемый пост)
после его дизассемблирования получил текстовый файл размером почти 2 мегабайта! Это же роман "Война и мир"! Я понимаю, что и на ассемблере этот фрагмент состоит из нескольких строк, а остальное занимает код стандартных функций Windows, но всё же... 

что все же?  smile 
Цитата(KaraKum @  9.12.2007,  07:51 Найти цитируемый пост)
Основы ассемблера я знаю, но если будет нужно, то освою и весь - дело того стоит, но проблема в том, что я, например, скомпилировав такое консольное приложение :

кроме ассемблера обязательно нужно знание формата исполняемых файлов (или библиотек)
тогда можно быстро отметать ненужную тебе информацию

Автор: KaraKum 9.12.2007, 13:22
Цитата(JackYF @ 9.12.2007,  11:17)
оо... ты чем компилировал и с какими настройками?..

Visual C++ 7. Никакие настройки не менял. Есть возможность сократить размер конечного файла?

Автор: JackYF 9.12.2007, 14:25
Цитата(KaraKum @  9.12.2007,  13:22 Найти цитируемый пост)
Есть возможность сократить размер конечного файла?

Да. Раз у тебя визуалка, просмотри настройки компилятора, там их не мало и скомпиль в релиз-варианте.

Автор: KaraKum 11.12.2007, 17:29
Цитата

А какого рода приложение и с какой целью это делается? Возможно уже есть SDK от разработчиков!

Вобщем, всё что нужно - это возможность получать информацию о динамическом изменении уже созданной программы и способность отправлять этой программе сообщения, подобно пользователю.
Проблема заключается в получении информации из работающей программы. Декомпилированный .exe файл этой программы весит 7Mb в текстовом формате  smile !

Автор: Lycifer 6.5.2008, 14:13
Цитата

5 минут назад дизассемблировал собственную программу размером в 2500 строк (160Кб) (на языке С++), а получилась программа на языке ассемблера, наверное, в миллиард строк, а что делать с прогами в десятки мегабайт? Стоит пытаться понять такие программы или жизни не хватит?

Конечно, так как С++ тянет всё что ему пожелается(то и есть заголовочные файлы, стандартные функции...)

Дизассемблер тебе не поможет понять логику.
Можеш использовать отладчики(sowt-ice, с его установкой помочь не могу), ну или встроеный в Windows Debug(то и есть (отладчик==дзенщик)=true)
 smile 

Автор: dumb 6.5.2008, 14:26
Цитата(Lycifer @  6.5.2008,  15:13 Найти цитируемый пост)
Дизассемблер тебе не поможет понять логику.
серьезно? - а для чего тогда, как ты думаешь, дизассемблер вообще нужен?

Цитата(Lycifer @  6.5.2008,  15:13 Найти цитируемый пост)
Можеш использовать отладчики(sowt-ice
soft-ice.

Цитата(Lycifer @  6.5.2008,  15:13 Найти цитируемый пост)
или встроеный в Windows Debug
"встроенный" отладчик(debug.exe) не предназначен для отладки win32-приложений.

Автор: Solomon 6.5.2008, 14:44
...

Автор: Lycifer 6.5.2008, 15:02
Цитата

серьезно? - а для чего тогда, как ты думаешь, дизассемблер вообще нужен?


Не ну конечно когда программа в несколько сотен тысяч строк(так как они ассемблерские, то их  еще больше) то понять логику программы раз плюнуть(правда это не возможно)
но вот Dump - может. Так что с этих пор будем его называть сверх способный программист.

Вообщето Дизасемблер нужен для программного кода, ну а логику понять из него(без отладчика) невозможно.

Автор: dumb 6.5.2008, 15:32
Lycifer, задавая в одной ветке вопрос "как читать и изменять байты в .exe", не стоит здесь пытаться выдавать свое мнение за непреложную истину, да еще и в таких категоричных выражениях.
по поводу же твоего неуместного сарказма на тему моих возможностей я высказываться не буду. формат общения не тот.

Автор: d06osipov 6.5.2008, 18:35
Это сделать в точности невозможно, хотя бы потому, что в exe файле не хранятся никакие символы (если он не скомпилирован для отладки). То есть компилятор не сохраняет имена переменных, классов, функций и т. п., они просто не нужны в выходном файле.

А у меня есть ещё пример. Была такая игра --- TTD, Transport Tycoon Delux. Фанаты (а именно, Ludvig Strigeus, автор известной программы uTorrent, см. http://en.wikipedia.org/wiki/Ludvig_Strigeus) дизассемблировали её и переписали полностью на чистый С, получилось продолжение, Open TTD (кстати, Open Source). Я сомневаюсь что это возможно было всё переписать вручную, скорее всего, хоть какая-то автоматизация была. Но при желании, думаю, можно найти больше информации по этой теме.

Автор: bsa 6.5.2008, 23:06
d06osipov, если честно, я не очень понимаю смысла дизассемблирования кода игры - в ней нет, по моему, каких-то очень серьезных алгоритмов, требующих такого подхода, хотя про OpenTTD http://en.wikipedia.org/wiki/OpenTTD, что он был именно дизассемблирован с помощью IDA, но надо иметь в виду, что это Wiki. Хотя, возможно, что дизассемблированию подвергался код, ответственный за чтение файлов данных.

Lycifer, анализу подвергаются только определенные участки кода (остальные проглядываются "по диагонали" с целью определения точек входа в нужную процедуру). Поверь мне, например, сделать из shareware программы обычную можно минут за 30, если, конечно, сложных защит не понаставлено. И все это делается с помощью дизассемблера и hex-редактора. Никто никогда не будет разбираться в коде отрисовки окошек и пр., так как это можно сделать посвоему с тем же результатом.

Автор: Любитель 7.5.2008, 14:53
Цитата(W4FhLF @  7.12.2007,  13:41 Найти цитируемый пост)
Ну вот буквально недельку назад небеизвестная в определённых кругах группа YAG зарелизила декомпилер от Ильфака(автор IDA) стоимостью 2k$

Прикольно smile

Цитата(Lycifer @  6.5.2008,  15:02 Найти цитируемый пост)
ну а логику понять из него(без отладчика) невозможно. 

Чо правда?  smile 

Цитата(d06osipov @  6.5.2008,  18:35 Найти цитируемый пост)
кстати, Open Source

Эээ, а эт легально?

Цитата(W4FhLF @  7.12.2007,  16:10 Найти цитируемый пост)
exe2compilable_source - это сказка

Ну почему - не всегда smile Если экзешник от какого-нить py2exe, pl2exe, etc. - то достаточно спокойно. Да и дотнетовский - более-менее.

Автор: Lycifer 7.5.2008, 16:48
bsa, я с тобой согласен, конечно если нет защиты не какой(защита типа в файле лежит пароль), то nop забить легко, ну вот когда идёт речь например о подписи, то там не так всё просто, логику будеш понимать годами.(Это не считая что если программеры, не придумали защиты что-то вроде xml, а для получения которого требуется подключится к SQL - и сколько времени у тебя уйдёт?  - года)

Добавлено через 2 минуты и 30 секунд
Dump, если ты не понял я создал тему в которой речь идёт для получение программно инфу про исполняемый файлы(к примеру: контрольная сумма или изменить exe файл)

Автор: Любитель 7.5.2008, 17:27
Цитата(Lycifer @  7.5.2008,  16:48 Найти цитируемый пост)
Dump, если ты не понял я создал тему в которой речь идёт для получение программно инфу про исполняемый файлы

При таком подходе - чем он отличается от любого файла? smile

Добавлено через 17 секунд
Цитата(Lycifer @  7.5.2008,  16:48 Найти цитируемый пост)
не придумали защиты что-то вроде xml

Звучит smile 

Автор: bsa 7.5.2008, 22:33
Цитата(Lycifer @ 7.5.2008,  16:48)
bsa, я с тобой согласен, конечно если нет защиты не какой(защита типа в файле лежит пароль), то nop забить легко, ну вот когда идёт речь например о подписи, то там не так всё просто, логику будеш понимать годами.(Это не считая что если программеры, не придумали защиты что-то вроде xml, а для получения которого требуется подключится к SQL - и сколько времени у тебя уйдёт?  - года)

Ты хоть сам понял, что написал?
Я, например, один раз снимал защиту с одной библиотеки, которая хотела серийник. Делов было на 10-20 минут... просто отключил проверку ключа на валидность.
Логику понимать годами вообще не нужно. Алгоритмы цифровых подписей можно по пальцам пересчитать. Поэтому нужно определить какой из них и добыть ключ - остально дело техники.
Если у тебя "что-то вроде xml, а для получения которого требуется подключится к SQL" smile, то кто мешает найти в коде программы, адрес, логин и пароль для подключения к SQL?
Кстати, XML - это открытый текстовый файл, который взламывать смысла нет никакого.

Автор: d06osipov 8.5.2008, 14:24
Цитата(bsa @  6.5.2008,  23:06 Найти цитируемый пост)
если честно, я не очень понимаю смысла дизассемблирования кода игры - в ней нет, по моему, каких-то очень серьезных алгоритмов, требующих такого подхода


Ну, например, чтобы не перерисовывать графику. OpenTTD действительно использует графические файлы GRF из старого TTD. А как понять их формат?

Кроме того, TTD уже была сделана очень добротно и очень хорошо продумана, ведь кроме алгоритмов интерес могут представлять ещё и проектные решения (правда, меня бы очень удивило, если бы их можно было бы выкопать из готовой программы).


Кстати, у меня давно зреет вопрос по этой теме. 
Я сказал, что в exe файле нет никаких символов. Но RTTI позволяет получить по ходу выполнения программы строковое название типа! Откуда он их берёт? Неужели, действительно, названия всех классов лежат в исполняемом файле, если включён RTTI. 


Цитата(Любитель @  7.5.2008,  14:53 Найти цитируемый пост)
Цитата(d06osipov @  6.5.2008,  18:35 Найти цитируемый пост)
кстати, Open Source

Эээ, а эт легально?

А что, Microsoft уже добилась принятия закона о запрете бесплатного и Open Source ПО?

Добавлено через 8 минут и 10 секунд
Бал ещё забавный случай связанный с первыми версиями коммерческой программы FineReader. Разработчики тогда заявили об использовании новейших алгоритмов --- имеющие опыт чтения машинного кода могли убедиться в этом, отыскав их признаки в дизассемблированном коде. Однако, позже выяснилось, что никаких алгоритмов нет, а разработчики специально запутывали код.

Автор: Любитель 8.5.2008, 14:57
Цитата(d06osipov @  8.5.2008,  14:24 Найти цитируемый пост)
Неужели, действительно, названия всех классов лежат в исполняемом файле, если включён RTTI. 

А где же ещё? Читаем матчасть по typeinfo.

Цитата(d06osipov @  8.5.2008,  14:24 Найти цитируемый пост)
А что, Microsoft уже добилась принятия закона о запрете бесплатного и Open Source ПО?

Во-первых, причём тут МС?
Во-вторых, речь, конечно, про дизассемблирование какого-то продукта для осздания его аналога.

Автор: Lycifer 8.5.2008, 17:15
bsa, не выдумывай глупасти. ТО что ты проставил "nop" вместо проверки значения(а то и просто сделал переход к метке) - это все на энтуитивном уровне понятно. Так вот на счет подпись - почитай прежде чем писать(алгоритмы там не причем). Так что бы забить "nop", лучше  отладчиком чем дизассемблером.
Насчет xml: Защиту строят так что бы "ХАКЕРАМ"   было менее понятно(Например в .xml сохраняется класс и после чего требуется большое время что бы что-то из этого понять, так как его писал не человек, а машина) - так что дизассемблер это чисто так, что бы умнее казатся.

Добавлено через 1 минуту и 20 секунд
Любитель - ну я думаю тебе к дяди Билу

Автор: Любитель 8.5.2008, 17:30
Цитата(Lycifer @  8.5.2008,  17:15 Найти цитируемый пост)
Так что бы забить "nop", лучше  отладчиком чем дизассемблером

Не, ну вообще и отладчик, и дизасм для редактирования непосредественно не преданзначены (хот ьи обычно поддерживают его как расширение).

Цитата(Lycifer @  8.5.2008,  17:15 Найти цитируемый пост)
Насчет xml: Защиту строят так что бы "ХАКЕРАМ"   было менее понятно(Например в .xml сохраняется класс и после чего требуется большое время что бы что-то из этого понять, так как его писал не человек, а машина) - так что дизассемблер это чисто так, что бы умнее казатся.

При чём тут XML? XML наоброт упрощает разбор smile А дизасм нужен не чтоб умней казаться, а чтоб дизассемблировать smile Хотя ИМХО да - чаще используется в сочетании с отладчиком. Но опять-таки, зачастую проще по асм-коду найти и прореверсить несложный алгоритм проверки ключа (ну и поиск криптосигнатур в помощь иногда), чем бороться с заковыристым антидебагом.

Цитата(Lycifer @  8.5.2008,  17:15 Найти цитируемый пост)
Любитель - ну я думаю тебе к дяди Билу 

Ещё раз - ты это к чему сказал?
Цитата(Lycifer @  8.5.2008,  17:15 Найти цитируемый пост)
чисто так, что бы умнее казатся

?

Автор: Lycifer 8.5.2008, 17:50
Цитата
Цитата


Dump, если ты не понял я создал тему в которой речь идёт для получение программно инфу про исполняемый файлы


При таком подходе - чем он отличается от любого файла? smile
 - На счет дяди била.
На счет .xml туда стока всего можно заполнить что бкз отладчика разобраться не реально(бывает что просто не реально = человеческой жизни просто не хватит)
Всякие придуманные бинарные данные, если их будет сотен пять(строк) то что бы понять какой какой действительный.... Да, а еще прикольно когда выставляют последовательное сравнение этих строк в хаотическом порядки при чем можно очень долго улучшать защиту= большой логике что поломать в принципе не возможно.

Цитата


Цитата

чисто так, что бы умнее казатся





Я имел ввиду что забить нупами операцию, просто так что бы перед кемнибудь повепендриватся (например перед друзьями)

Автор: bsa 8.5.2008, 18:00
Цитата(Lycifer @ 8.5.2008,  17:15)
bsa, не выдумывай глупасти.
Я ничего не выдумываю.
Цитата(Lycifer @ 8.5.2008,  17:15)
ТО что ты проставил "nop" вместо проверки значения(а то и просто сделал переход к метке) - это все на энтуитивном уровне понятно.
А я как-то сильно этим не горжусь, я просто привел пример успешного взлома защиты.
Цитата(Lycifer @ 8.5.2008,  17:15)
Так вот на счет подпись - почитай прежде чем писать(алгоритмы там не причем).
Я прекрасно знаю, что такое подпись. Но кроме нее, существует еще процедуры, которые ее считают, проверяют и делают выводы. Кто мешает их отключить? Пусть даже там все шифруется, кто мешает узнать алгоритм с ключем и расшифровать своими методами?
Цитата(Lycifer @ 8.5.2008,  17:15)
Так что бы забить "nop", лучше  отладчиком чем дизассемблером.
Чтобы забить NOP, нужно пользоваться Hex-редактором, а чтобы найти куда забить, лучше всего пользоваться дизассемблером.
Цитата(Lycifer @ 8.5.2008,  17:15)
Насчет xml: Защиту строят так что бы "ХАКЕРАМ"   было менее понятно(Например в .xml сохраняется класс и после чего требуется большое время что бы что-то из этого понять, так как его писал не человек, а машина) - так что дизассемблер это чисто так, что бы умнее казатся.
Ты то сам про XML что-нибудь знаешь? Просто у меня в проекте этих XML несколько штук (и некоторые генерируются автоматически при сборке), но я бы не сказал, что это сильно кому-то затруднит взлом, скорее наоборот.
Кстати, когда содержимое класса куда-то сохраняется, то это, по моему, зовется сериализацией. Думаю, эта процедура не заслуживает, чтобы ей занимались через дизассемблер.

Ладно. Все это был оффтопик.
А по теме могу сказать, что существуют два типа действий: обратимые и необратимые. Так вот, компиляция - это необратимое действие, так как исходный текст программы получить невозможно в принципе, а при очень большом везении (компилятор в принципе не знает, что такое оптимизация) можно получить исходный текст похожий на оригинал только с относительно низкоуровневых языков (С, Pascal). А программу написанную на С++ еще сложнее преобразовать к исходному тексту, так как там используются шаблоны и пространства имен...

Автор: Lycifer 8.5.2008, 18:19
Цитата

А по теме могу сказать, что существуют два типа действий: обратимые и необратимые. Так вот, компиляция - это необратимое действие, так как исходный текст программы получить невозможно в принципе, а при очень большом везении (компилятор в принципе не знает, что такое оптимизация) можно получить исходный текст похожий на оригинал только с относительно низкоуровневых языков (С, Pascal). А программу написанную на С++ еще сложнее преобразовать к исходному тексту, так как там используются шаблоны и пространства имен...

С этим я стобой согласен

xml: у меня сейчас в проекте их тысячи(проект пишу понятное дело не сам), как раз  в этом проекте используется xml файл для защиты(правда не только он), Сначала программа была написана для сериализации ключа, в проекте xml дисиализуется и проверка происходит со сравнениями(при этом всем проверка в нескольких файлах), также идет  в набор к этом key.snk(если ты знаеш что это, если не знаеш то почитай)

Добавлено через 47 секунд
Насчет key.snk - товзлом отладчиком здесь ой как нужен

Автор: dumb 8.5.2008, 18:55
Цитата(Lycifer @  8.5.2008,  18:50 Найти цитируемый пост)
просто так что бы перед кемнибудь повепендриватся (например перед друзьями)
Цитата(Lycifer @  8.5.2008,  18:15 Найти цитируемый пост)
чисто так, что бы умнее казатся.

на воре шапка горит (с) народ

но ты выбрал не лучшее место для своего пальцо-загибательства.

Автор: Любитель 9.5.2008, 00:23
Цитата(Lycifer @  8.5.2008,  17:50 Найти цитируемый пост)
На счет .xml туда стока всего можно заполнить что бкз отладчика разобраться не реально(бывает что просто не реально = человеческой жизни просто не хватит)Всякие придуманные бинарные данные, если их будет сотен пять(строк) то что бы понять какой какой действительный.... Да, а еще прикольно когда выставляют последовательное сравнение этих строк в хаотическом порядки при чем можно очень долго улучшать защиту= большой логике что поломать в принципе не возможно.

При чём тут именно XML? ;) Короче весь разговор об XML реально ни о чём smile Дизасм часто полезен. И говорить, что дизасм нужен, чтоб "умней казаться" по меньшей мере глупо.

ЗЫ Предлагаю закончить обсуждение smile

Добавлено через 2 минуты и 18 секунд
Цитата(Lycifer @  8.5.2008,  18:19 Найти цитируемый пост)
Насчет key.snk - товзлом отладчиком здесь ой как нужен

Сам понял, что сказал? Понятия не имею, что за key.snk, знаю, что *.snk в .Net используются для цифровой подписи (strong name key). При чём отладчик и что значит "взлом key.snk"?

Автор: Lycifer 12.5.2008, 10:28
Если когото редактирования exe файла не повергает в шок - значит он совсем не знает что такое серьезная программа.
Я не хочу больше с вами спорить - это бесполезно

Автор: KaraKum 16.5.2008, 10:31
Именно.
Приблизительно можно посчитать время, которое потратится на перевод .exe-файла в .cpp: время её создания умноженное на количество людей, которые её делали + сложность, связанная с непониманием того как именно разроботчики реализовывали те или иные вещи. Вообщем на переделку какой-нибудь среднестатистической игры может уйти с десяток лет - проще самому написать новую.

Автор: bsa 16.5.2008, 12:38
KaraKum, а никто не пытается восстанавливать исходный код программы - это бессмысленно. Дизассемблирование нужно исключительно с целью "понять, как же они это сделали" и не более того. Большинство функций можно восстановить просто зная входные и выходные данные.

Автор: klfd 18.5.2008, 11:22
...

Автор: 500mhz 18.5.2008, 11:40
http://boomerang.sourceforge.net/
вот вам "преобразователь"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)