Реверсинг функции, скидывающей данные драйверу ядра

Тема в разделе "WASM.RESEARCH", создана пользователем XyrurgAss, 31 июл 2006.

  1. XyrurgAss

    XyrurgAss New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    4
    Хочу покопаться во внутренностях файла.
    Скажу сразу - я не занимался реверсингом, но есть желание этим заниматься.
    Так что сильно не пинать, если тока в нужном направлении.
    Есть файл, написан на Дельфях.(Приложу попозже, пока канал узкий).
    Использует функции ключа Guardant. Вызывает функции GrdSetFindMode и GrdFind. Но это не главное. Меня интересует содержимое GrdFind.
    Точная постановка задачи: функция GrdFind шифрует какие-то данные и отправляет их драйверу под прозвищем GrdKey. Надо вытащить алгоритм шифрования. Сам алгоритм меня не сильно интересует, а интересует сам процесс. Что делать, в какой последовательности, от чего отталкиваться.
    Может кто чего посоветовать?
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Функции ключа в отдельной библиотеке или в самом файле? В любом случае загружаешь искомый файл в IDA, пробуешь получить дополнительную инфу из DeDe, находишь функции, подлежащие анализу и пробуешь реверсить. Последнее требует некоторых навыков.
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Неплохо было бы на файлик взглянуть тоже...
     
  4. XyrurgAss

    XyrurgAss New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    4
    Вот файлец - http://rapidshare.de/files/27741302/Project1.zip.html
    Функция скидывает драйверу через DeviceIOControl.
    Как я понимаю можно вычислить где это делаеться, найти данные и посмотреть рашьше что с ними делают?
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Обрати внимание, что все вызовы идут через функцию sub_478906, которая, мягко выражаясь, немножко запутана. У меня такое впечатление, что расшифровываются данные, расположенные рядом с вызовами твоих GrdFind, GrdSetFindMode, GrdSetAccessCode, CgrCreateHandle. Попробуй для начала подебужить, чтобы понять, как выполняется расшифрование.
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Подебужив, понял, что весьма все запутано, но разобраться можно. Даже до простых вызовов типа jmp VirtualAlloc приходится добираться ручками, пока не составлю описание. Вообще идея простая - ищется заголовок программы в памяти, и начиная с него находится некий шаблон из 16 байт, вслед за которым следует требуемый переход. Аргументы передаются тоже запутанно - берется адрес, отстоящий на заданное смещение от следующего за вызовом процедуры адреса и видимо там хранится аргумент (надо уточнить - вечером посмотрю, времени не было).
    Неплохо было бы посмотреть код программы EvilsInterrupt, он искал способы маскирования смысла кода.