1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

идентификация программы

Тема в разделе "WASM.HEAP", создана пользователем spencer, 23 апр 2007.

  1. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    суть проблеммы состоит в том что необходимо определить запущенна ли та или иная программа либо нет причем есть контингент людей чья заинтересованность в том чтобы я этого не мог определить. Делать это по имени процесса весьма наивно ибо его всегда можно сменить. Думал вычислить CRC и позже проверять CRC всех файлов запущенных процессов на совпадение с искомым однако этоот вариант ведь тоже легко обойти если изменить пару нулей (коих немало в концах секцих) на что угодно. Если отвергнуть вариант с црц то единственным еще вижу вариант определить сигнатуру (некую последовательность байт) искомого процесса как это делает скажем PE Tools для определения компилера/пакера. Однако тут я боюсь что могу прогадать с этой последовательность и моя прога среагирует на нечто совершенно иное нежели то что необходимо.
    Какие есть мысли по этому поводу, стоит ли отвергать вариант с црц и есть ли какие либо советы по поводу того как грамотно выделить некую последовательность байт чтоб она однозначно идентифицировала некую программу (что я называю сигнатурой)?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Можно немножко подробнее - что это за программа? Если это уже готовая программа, скачанная откуда-то, то можешь вычислять CRC не по всему файлу, а, скажем, по первым 10-100 байтам. Если эта программа компилится и ее могут изменить как угодно, то тут сложнее.

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

    Мое мнение - лучше частичный CRC.

    Насчет PEiD - генерируешь несколько копий программ, упакованных одним и тем же пакером с разными опциями. Потом сравниваешь побайтно. Где байты совпадают - в сигнатуру. Где нет - пропуск. Чем больше сравнений, тем точнее сигнатуры. Так очень легко, кстати, обмануть PEiD.
     
  3. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    первые 10 байт это же DOS HEADER! какраз то они почти всегда одинаковы. Боюсь с первыми 100 байтами ситуация может быть похожая если к примеру компилер одинаковый. Во всяком случае я проверил две разных программы собранные masm32 и начало у них обеих одинаковое хотя точное количество байт не считал.
    Может попробовать что то вроде первых сколько то там байт от начала первой секции которая указанна в таблице секций и у которой стоят атрибуты на исполнение. Ну я немного абстрактно выразился.
    Вот еще вопрос насколько это сильно будет тормозить машину если все эти проверки црц проводить для каждого запущенного процесса и каждой его загруженной библиотеки. Тоесть я то понимаю что как напишу так и будет тормозить но все же, есть ли шанс при этом остатся незаметным?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    :)) Я имел ввиду, что первые 10 байт секции кода или хотя бы после точки входа :) Что же касается тормозов, то CRC32 - не такой уж и медленный алгоритм, особенно если считать по 10 байтам. А процессов в системе, я полагаю, не так уж и много. Так шо, если ты не заменишь CRC на SHA512 или MD5, не выставишь приоритет реального времени, а, если программа будет работать в цикле, сделаешь хотя бы Sleep(10), то тормозов видно не будет
     
  5. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    я решил делать не от точки входа а от начала секции кода, поскольку код от начала точки входа во всяком случае у MC++6 почти постоянно одинаков, так вот те н байт + кое что из таблицы секций, вероятно так можно уже будет сказать что именно тот процесс который я ищу.
    насчет производительности спасибо что успокоил )
     
  6. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    кстате вот набросал код который будет перебирать все процессы и все подключенные к ним модули и вставил в этот код счетчик который по окончанию имел значение 1052 что означает что мне прийдётся произвести именно столько проверок. (раз на раз не приходится но около того)

    Попутно ворос, имея ID некоего модуля некоего процесса как мне получить доступ к его коду? я так полагаю в начале прийдётся открыть тот процесс которому принадлежит тот модуль но что дальше?
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    spencer
    Как что дальше. Тормозишь потоки, обрабатываешь заголовок, меняшь атрибуты страниц памяти, делаешь что хочешь.
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.387
    Адрес:
    Ukraine
    зачем тормозить... разве чтение может както на выполнение влиять?
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    FreeManCPM
    Я думал ему надо код на лету менять.
     
  10. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    А вроде-бы есть информация с полным путем к запущеному файлу. Открой этот файл, сравни...

    А насчет сигнатур - случайным образом выбери в файле несколько областей со случайным размером, вычисли кнотрольную сумму. Вероятность коллизии довольно низкая будет...
     
  11. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    писать мне не нужно мне нужно лишь прочесть и проанализировать. Путь к запущенному файлу мне в данный момент не поможет поскольку речь идет о подключенной к процессу библиотеке. В принципе проблема решена, базовый адрес необходимой библиотеки в контексте конкретного процесса имеется в структуре MODULEENTRY32 с которой работают Module32First & Module32Next Так что проблемма в принципе решена. Всем спасибо.
     
  12. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    2Ultrin Faern я выделил два участка памяти по 8 байт каждый в разных областях памяти программы. а также их смещение. Так полная сигнатура у меня имеет размер 24 байт. Думаю так можно будет гарантировать с высокой долей вероятности что алгоритм не опознается.
     
  13. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    MapFileAndCheckSumm CheckSumMappedFile
     
  14. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    2dag thnx, теперь буду медитировать над тем что все таки лучьше реализовать MapFileAndCheckSum либо мой вариант с сигнатурами.
     
  15. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Скрыть библиотеку в чужом контексте - как 2 байта переслать! Так шо если программа "своя", а не чужая, можно добавить пару строк кода и библиотеку ты не найдешь!
     
  16. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    MSoft
    Не так уж оно и просто. Можно и без апи библу найти достаточно просто.
     
  17. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    А шо там сложного? PEB подправил и фсе - ничем ты ее не найдешь.

    Ну если совсем извратиться и MZ заголовок затереть... :)

    П.С.: я это все для третьего кольца говрю. Что там возможно драйверами я не знаю
     
  18. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Если очень хочется найти - простой скан памяти. И даже затирание mz не спасёт - есть ведь сигны на других участках, которые затереть нельзя.
     
  19. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    например? мне аж интересно стало :)
     
  20. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    MSoft

    Чем тебе не сигна?