Спрошу здесь, чтобы не создавать тему. Востанавливается ли гипотетически исходный код C++ программы, если асмовский файл прогнанный через IDA 6.8 (Windows вариант программы) в метках ассемблерного кода показывает их "имена". "Гипотетически" - т.к. есть предыдущие исходники слитой программы с "мета информацией" и возможность их сборки как под Windows так и под Linux и возможно как то использовать для озвученного вопроса. P.S. Утёкшие исходники Opera Presto 12.15 нормaльно собираются под Linux, но они менее функциональны от exe версии программы 12.18 под Windows отсюда и такой странный вопрос выше по возможности совмещения сделанного в варианте 12.18 под Windows (на сайте Opera можно её взять) от 12.15 (собираемых исходников) и под Linux. --- Сообщение объединено, 5 мар 2022 --- Тема обсуждения использования Opera 12.18 на сайте уже в 27-ой части http://forum.ru-board.com/topic.cgi?forum=5&topic=50403&start=0 P.S. Хочется иметь предсказуемый браузер с возможностью каких то его изменений для дополнения контролируемой дополнительной функциональностью и легко собираемый с поддержкой хорошей совместимостью со стандартами i-net и возможностью контроля его "стрессоустойчивости" в среде использования в i-net. --- Сообщение объединено, 5 мар 2022 --- Opera Presto к тому же собирается в один исполняемый файл под Linux с парой-тройкой дополнительных so библиотек.
Да, и нет. Сразу скажу, что инструментов для полностью автоматического восстановления исходного кода я не знаю. Это по большей части ручная работа. Со 100% идентичностью исходник восстановить невозможно, если этот исходник сам не был машинно сгенерен. Можно восстановить исходник до 100% идентичности скомпиленного бинарника, при условии что не применяются какие-нибудь подписи, шифрование, обфускация. Тут есть нюанс что по мере приближения к 100% оригинала трудозатраты по восстановлению возрастают геометрически. В абсолютном большинстве практических задач цели восстановить до 100% не стоит. Выдергивается, как правило, какой-то алгоритм, функциональость, апи. В вышеописанной ситуации - мое личное мнение - восстановление исходников до идентичности не нужно, даже вредно. Иначе можно уйти в некрофилию, как один местный любитель XP. Нужно на основе имеющегося кода развивать собственный браузер в опенсорсе (да я в курсе что код проприетарный, думаю эта проблема решаема если официально ничего не регистрировать и не хранить на ресурсах гугла, M$ и иже с ними). Как раз в этом случае вся необходимая функциональность при желании выдергивается и добавляется.
Друзья, го третий раунд! В этот раз вас ждет мистер "навесной протектор" и мистер "полноценный антидамп" (или как там было). Заранее прошу сильно ногами не пинать, сами понимаете я высокоуровневый магл и в этих ваших лоу-левелах не особо шарю, просто интересно было попробовать такую штуку сделать и посмотреть за сколько милисекунд ее спецы разберут и сломают. Дополнительный плюсик в респект, если это можно решить автоматикой, а не в ручную примитивными "отладчиками юзер мод". Шифрование данных пейлоуда там тоже номинальное и дополнительной обфускации тоже никакой нет, чтобы особо спецов не напрягать и можно было бы решить, так как я предполагаю это должно решаться (но это не отменяет "наивных программистских ошибок цэшного мышления", так что альтернативные пути решения тоже приветствуются). Ну и да, тестил на десятке и семерке, так что сорян, если на хр не заведется, и, наверняка, где то мог упустить какой-то баг, так что пишите, если какой косяк, может походу дела пофикшу.
Закономерный финал: своя поделка выкинута нахрен и начался спешиал олимпикс по прикручиванию навесных протов. Прот расшифровывает по одной инструкции и упираясь в дорожку из int3 обработчиком исключений чистит и вываливает следующую инструкцию. Весь крекмис на экране, дальше можно эту детскую хеш-функцию выписать и сбрутить слово из трех букв, хеш которого окажется 0xFABA414. Но тупо не хочу.
Так ты же сам хотел чего-то другого во втором раунде, жаловался, что мало что поменялось. И ты опять не доволен, странные вы - спецы, не угодишь вам. Ну можно было бы пропатчить jne в заксоренном кодесе (или в открытом). Автоматикой решал или с помощью примитивный "отладчиков юзермод"? Вангую, что просто занопил кодец, который int3 для предыдущей инструкции возвращает.
Я не жаловался. Было сказано, что теперь будет еще больше такого-то гавна и больше вот этого гавна, а его там не особо больше было. Может и можно пропатчить, вообще не смотрел это. Плевать. Это не вангование, а капитанствование. Вообще первой мыслью было вот это недоразумение заабузить: Код (Text): 0060F84C 30 30 36 30 66 38 33 63 20 38 39 65 35 20 20 20 0060f83c 89e5 0060F85C 20 20 20 20 20 20 20 20 20 6D 6F 76 20 20 20 20 mov 0060F86C 20 65 62 70 2C 65 73 70 0A 00 00 00 17 11 77 00 ebp,esp......w. Код (Text): 0060F84C 30 30 36 30 66 38 33 63 20 35 33 20 20 20 20 20 0060f83c 53 0060F85C 20 20 20 20 20 20 20 20 20 70 75 73 68 20 20 20 push 0060F86C 20 65 62 78 0A 00 E5 76 00 00 00 00 19 11 77 00 ebx..åv......w. За каким-то смыслом прот то ли ассемблирует код ($134D, esp+0x20), то ли дизассемблирует. Но лень было изучать как это в ексодии делается.
Там дизассемблер используется из dbgeng, чтобы длину инструкции получить, если я правильно понял, о чем ты, щас нет под рукой компа, чтобы посмотреть указанное смещение. Вообще, мне, конечно, не очень нравится решение брутить хеш, даже зная, что хеш предельно простой и быстро считается, это не красиво. По поводу автоматизации я думал, что можно разобраться в функции дешифрования и проэмулировать ее вызов для всей секции текста (остальные секции не шифрованные), благо для той же IDA и x86 уже были проекты, которые позволяли такое делать (хотя я не делал сам). То есть даже реверсить алгоритм по большему счету не надо, ну да ладно.
Крелк просил передать кому-то файл, зачем-то здесь. Пароль: vx https://dropmefiles.com/HAIhP Еле нашел что именно там надо было смотреть (Dy.exe), не понял что там надо ломать. Данную штуку наблюдал в 0x402000: Код (Text): invoke AllocConsole invoke SetConsoleTitle, addr $App invoke GetStdHandle, STD_OUTPUT_HANDLE mov ebx,eax invoke ZwQueryVirtualMemory, NtCurrentProcess, Check, MemoryBasicInformation, addr Mm, sizeof(MEMORY_BASIC_INFORMATION), NULL invoke RtlpPeHeaderHash, Mm.BaseAddress, Mm.RegionSize xor eax,edx mov edx,eax invoke udw2str, Edx, addr Buffer invoke WriteConsole, Ebx, addr $M1, lengthof $M1, addr N, 0 invoke WriteConsole, Ebx, addr Buffer, lengthof $M1, addr N, 0 помещается по одной инструкции с джампом за ней и исполняется. В принципе все то же самое, и если бы было чего чинить, починилось бы без особого труда.