Комментарии 22
Спасибо!
Было интересно!
Было интересно!
0
Интересно, почему авторы этого crackme задействовали всю эту тему с драйверами? Если суть задачи именно в анализе хэш-функции, то для чего все эти сложности гонять данные через драйверы?
0
мы видим стандартный заголовок… «MZ». Также видно, что файл… написан на C++.А какие бывают другие заголовки?
А как определить язык? Там осталась debug-информация?
+2
У исполняемых файлов Windows формат заголовка один и тот же, на то он и стандартный заголовок.
Язык программирования выдаёт совокупность признаков. С++ особенно выдаёт библиотека crt. К примеру, на точке входа вызывается функция 0004072EB инициализации канареек. Далее идёт jmp, в котором в самом низу идёт вызов функции main. Это характерные признаки для исполняемых файлов, собранных в visual studio. А если посмотреть на строки, то можно увидеть что-то типа: " delete[], vector constructor iterator", чтобы убедиться, что это C++.
Язык программирования выдаёт совокупность признаков. С++ особенно выдаёт библиотека crt. К примеру, на точке входа вызывается функция 0004072EB инициализации канареек. Далее идёт jmp, в котором в самом низу идёт вызов функции main. Это характерные признаки для исполняемых файлов, собранных в visual studio. А если посмотреть на строки, то можно увидеть что-то типа: " delete[], vector constructor iterator", чтобы убедиться, что это C++.
0
Строго говоря, MZ — Это досовский заголовок 16 битного исполняемого файла. В нынешних исполняемых файлах он для совместимости) вдруг вы в досе запустите, а оно там выведет красивое «This program can not be run in DOS mode.»
Виндовый заголовок — PE.
Язык на 100% не определить. Но если известно, что файл после компилятора не модифицировался, можно по косвенным признакам узнать компилятор. Например секции TEXT, DATA капсом, любят компиллеры Borland. А еще более детально компилятор узнают по сигнатурам стандартных функций. (В IDA — ромашка вроде.) При нахождении более 100 системных функций из одной библиотеки сигнатур, можно с большой вероятностью сказать что оно писалось на таком-то языке.
Виндовый заголовок — PE.
Язык на 100% не определить. Но если известно, что файл после компилятора не модифицировался, можно по косвенным признакам узнать компилятор. Например секции TEXT, DATA капсом, любят компиллеры Borland. А еще более детально компилятор узнают по сигнатурам стандартных функций. (В IDA — ромашка вроде.) При нахождении более 100 системных функций из одной библиотеки сигнатур, можно с большой вероятностью сказать что оно писалось на таком-то языке.
0
Все языки обладают спецификацией и как правило моделью памяти. Уже по расположению функций, классов, структур и стэка можно достаточно ясно определить язык. Подключаемые файлы и сборки тоже обычно стандартные и как следствие используют один и тот же код, а такие дизассемблеры как IDA уже давно детектируют их на лету.
Компилятор это множество (под)программ, включая линкер, оптимизатор и саму генерацию кода. На ассемблере можно по разному записать некоторые действия(кто бы мог подумать?),
к примеру:
и т.д. так же есть внутренние соглашения о вызовах.
Анализируя всё это можно определить даже компилятор, его версию и версию его компонентов.
Компилятор это множество (под)программ, включая линкер, оптимизатор и саму генерацию кода. На ассемблере можно по разному записать некоторые действия(кто бы мог подумать?),
к примеру:
mov ax, 0;поместить 0 в регистр 'ax'
mul ax, 0;умножить 'ax' на 0
xor ax, ax; обнулить совпадающие биты из ax(совпали все => все нули: ax = 0)
и т.д. так же есть внутренние соглашения о вызовах.
Анализируя всё это можно определить даже компилятор, его версию и версию его компонентов.
0
Может быть ZM
0
Поменял MZ на ZM — Win7 не запускает такую прогу.
Я думал, что заголовок MZ единственный для .exe, просто предложение в статье даёт усомниться в этом.
Я думал, что заголовок MZ единственный для .exe, просто предложение в статье даёт усомниться в этом.
0
В досе работало, возможно для винды в какой-то момент подкрутили.
MZ это инициалы какого-то польского программиста, Марека Не-помню-фамилию, который в 80 лохматом году разрабатывал формат EXE. Тогда ещё писали на асме и экономили каждый байт, и там был хитрый трюк через XOR, экономивший пару байт на сравнении. Но он пропускал как MZ, так и ZM.
MZ это инициалы какого-то польского программиста, Марека Не-помню-фамилию, который в 80 лохматом году разрабатывал формат EXE. Тогда ещё писали на асме и экономили каждый байт, и там был хитрый трюк через XOR, экономивший пару байт на сравнении. Но он пропускал как MZ, так и ZM.
0
А почему бы было просто не подменить драйвер, что бы он всегда возвращал true?
Как головоломка хорошо, как система защиты — плохо.
-1
Очень полезное занятие.
0
Спасибо за разбор. Было интересно читать.
Было бы здорово, если бы вы опубликовали аналогичные статьи с описанием процесса исследования простых вирусов, т.к. разборов различного рода crackme и keygenme в интернете хватает, а вот живой malware analysis встречается редко.
Было бы здорово, если бы вы опубликовали аналогичные статьи с описанием процесса исследования простых вирусов, т.к. разборов различного рода crackme и keygenme в интернете хватает, а вот живой malware analysis встречается редко.
0
а можно ссылку для скачивания этого crackme?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Взлом ядерного Crackme