Страницы

Поиск по вопросам

Показаны сообщения с ярлыком дизассемблирование. Показать все сообщения
Показаны сообщения с ярлыком дизассемблирование. Показать все сообщения

вторник, 17 марта 2020 г.

Дизассемблирование програмики

#c_sharp #дизассемблирование #reverse_engineering


Доброго времени суток.
Возникла у меня потребность, получить исходный код программки на шарпе, в универе
дали задание написать прогу, и дали пример (.exe). Самому писать лень. Заюзал дизассемблер,
что поставляется вместе со студией, не очень понравился резуальтат. Слишком много пальце-двежений
нужно для создания проекта. Попробовал Dis#, уже лучше, выдало мне много кода и ничего
лишнего, на радостях копи-пастнул все это дело, но возникла ожидаемая проблема с Гуем.
Зато посмотрев код, понял что мне нужно то всего ничего пару значений переменных там
поменять, да кнопочки в другие места расставить. В связи с чем прошу помощи:

Как мне из .exe скомпиленным в более
   старой версии c# создать проект в c#
   2010 с возможностью мышкой потыкать
   вин форму?
    


Ответы

Ответ 1



dotPeek попробуйте

пятница, 27 декабря 2019 г.

Чтение байткода, генерируемого интерпретатором PHP

#php #ассемблер #дизассемблирование


Есть ли возможность "влезть" в этап выполнения PHP кода между считыванием высокоуровневого
скрипта и компиляцией его в непосредственный ассемблер и посмотреть, какие оп-коды
генерируются? 
    


Ответы

Ответ 1



раз тебе оп-коды нужны, смотри сюда: https://stackoverflow.com/questions/1795425/how-to-get-opcodes-of-php и вот хорошая ссылка: https://ctors.net/2015/09/11/php_opcodes, говорят, работает с php7 тоже короче, тебе нужен Vulcan Logic Disassembler если бы были нужны байткоды - запустить bcompiler_write_file на нужном файле

среда, 18 декабря 2019 г.

Скрытие кода *.exe-файла

#шифрование #обфускация #дизассемблирование #обратная_разработка


Как можно скрыть код exe-файла (написаного, например, на Delphi) от расшифровки под
дизассемблером и, впоследствии, от реверса.

Строки, например, можно просто XOR-ить или смещать каждый символ на k позиций по
таблице ASCII (первое лучше, ИМХО). А вот как скрыть имена функций или даже целые блоки
кода? Ведь многие разработчики (особенно вирусописатели) любят это делать, тем самым
скрывая свои «творения» от исследования посторонними лицами. Таким же образом скрывается
от антивирусов всем известный SpyEye. А как этого добиться мне?
    


Ответы

Ответ 1



(Некоторое время не занимался реверсингом, поэтому информация может быть outdated) Если говорить о серьезной обфускации, то имеет смысл рассматривать только языки, которые компилируются в машинный код (C++, например). Языки с промежуточным слоем байт-кода обычно легко поддаются реверсингу и, судя по всему, пока нет более-менее адекватных способов запротектить написанные на них приложения. Адекватные протекторы совершают некоторую последовательность действий для защиты готового приложения от реверсинга: Вставляют в готовый бинарник готовые антиотладочные фрагменты кода (например, дешифрующий его в рантайме), путают секции, совершают хитрые джампы, в общем, совершают атомарные изменения (не меняющие поведение программы!) над исполняемым кодом, которые затрудняют отладку человеку. Человек - это reverse engineer, который открывает ваше приложение в IDA, зрительно выцепляет знакомые паттерны из дизассемблерного листинга, трейсит приложение, подменяя содержимое стека и патча это самое приложение в его рантайме. И основная цель этих защитных действий протектора - заставить реверсера сказать "Тьфу, пошло оно в ж*пу, задолбало", поскольку последовательность действий протектора всегда можно совершить в обратную сторону, был бы опыт и знания. Более серьезная защита, иногда останавливающая даже крутых и опытных реверсеров - это виртуализация кода приложения для того, чтобы исполнять его на собственной виртуальной машине (обычно сочетается со стандартным антиотладочными приемами, описанными выше). При этом виртуальная машина внедряется в бинарник вместе с некоторым IL-кодом, который может выглядеть абсолютно произвольно. Параметры создаваемой машины также можно варьировать в некоторых пределах - при желании можно и виртуалку с троичной логикой написать. Бонус такого подхода в том, что для полноценного реверсинга такого приложения необходимо каким-либо образом воспроизвести эту самую виртуальную машину. В такой ситуации (если виртуалка оказывается достаточно хитрой), большая часть стандартных тулзов и приемов реверсера перестает работать "из коробки". Что, опять же, приближает этого самого потенциального реверсера к состоянию "Спасибо, с меня хватит". С точностью до деталей таким образом протектит Themida. В соответствии с написанным выше - если есть желание запротектить свою программу более-менее достойно, то напишите свою виртуалку и сгенерируйте для нее IL-код из имеющихся объектных файлов вашего приложения. Это действие поможет отсеять большую часть реверсеров, которым недавно рассказали и показали, что такое IDA и как применять patch. Quick test - для того, чтобы понять, сможете ли вы создать более-менее адекватную защиту с виртуализацией, попробуйте сломать CrackMe от ESET. Если поймете, причем здесь SSE и общую механику проверки, то можно браться за дело. Всегда есть набор готовых public и private пакеров, которыми можно воспользоваться. Themida, ASProtect, FSG. Понятно также, что всегда найдется набор людей, которые эти или иные протекторы в состоянии снять.

вторник, 30 октября 2018 г.

Скрытие кода *.exe-файла

Как можно скрыть код exe-файла (написаного, например, на Delphi) от расшифровки под дизассемблером и, впоследствии, от реверса.
Строки, например, можно просто XOR-ить или смещать каждый символ на k позиций по таблице ASCII (первое лучше, ИМХО). А вот как скрыть имена функций или даже целые блоки кода? Ведь многие разработчики (особенно вирусописатели) любят это делать, тем самым скрывая свои «творения» от исследования посторонними лицами. Таким же образом скрывается от антивирусов всем известный SpyEye. А как этого добиться мне?


Ответ

(Некоторое время не занимался реверсингом, поэтому информация может быть outdated) Если говорить о серьезной обфускации, то имеет смысл рассматривать только языки, которые компилируются в машинный код (C++, например). Языки с промежуточным слоем байт-кода обычно легко поддаются реверсингу и, судя по всему, пока нет более-менее адекватных способов запротектить написанные на них приложения. Адекватные протекторы совершают некоторую последовательность действий для защиты готового приложения от реверсинга: Вставляют в готовый бинарник готовые антиотладочные фрагменты кода (например, дешифрующий его в рантайме), путают секции, совершают хитрые джампы, в общем, совершают атомарные изменения (не меняющие поведение программы!) над исполняемым кодом, которые затрудняют отладку человеку. Человек - это reverse engineer, который открывает ваше приложение в IDA, зрительно выцепляет знакомые паттерны из дизассемблерного листинга, трейсит приложение, подменяя содержимое стека и патча это самое приложение в его рантайме. И основная цель этих защитных действий протектора - заставить реверсера сказать "Тьфу, пошло оно в ж*пу, задолбало", поскольку последовательность действий протектора всегда можно совершить в обратную сторону, был бы опыт и знания. Более серьезная защита, иногда останавливающая даже крутых и опытных реверсеров - это виртуализация кода приложения для того, чтобы исполнять его на собственной виртуальной машине (обычно сочетается со стандартным антиотладочными приемами, описанными выше). При этом виртуальная машина внедряется в бинарник вместе с некоторым IL-кодом, который может выглядеть абсолютно произвольно. Параметры создаваемой машины также можно варьировать в некоторых пределах - при желании можно и виртуалку с троичной логикой написать. Бонус такого подхода в том, что для полноценного реверсинга такого приложения необходимо каким-либо образом воспроизвести эту самую виртуальную машину. В такой ситуации (если виртуалка оказывается достаточно хитрой), большая часть стандартных тулзов и приемов реверсера перестает работать "из коробки". Что, опять же, приближает этого самого потенциального реверсера к состоянию "Спасибо, с меня хватит". С точностью до деталей таким образом протектит Themida. В соответствии с написанным выше - если есть желание запротектить свою программу более-менее достойно, то напишите свою виртуалку и сгенерируйте для нее IL-код из имеющихся объектных файлов вашего приложения. Это действие поможет отсеять большую часть реверсеров, которым недавно рассказали и показали, что такое IDA и как применять patch Quick test - для того, чтобы понять, сможете ли вы создать более-менее адекватную защиту с виртуализацией, попробуйте сломать CrackMe от ESET. Если поймете, причем здесь SSE и общую механику проверки, то можно браться за дело. Всегда есть набор готовых public и private пакеров, которыми можно воспользоваться. Themida, ASProtect, FSG. Понятно также, что всегда найдется набор людей, которые эти или иные протекторы в состоянии снять.