Как отследить работу с диском ?

Тема в разделе "WASM.BEGINNERS", создана пользователем asmlamo, 18 фев 2008.

  1. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Возможно ли отследить ее работу используя API шпион ?

    Если да то какой лучше использовать ? kerberos или API Monitor 1.5 (Beta) by Rohitab ?
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    А FileMon не рулит?
     
  3. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    нет он не ловит ...
     
  4. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    asmlamo а procmon'ом пробовали?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    возможно, как правило мониторы отличаются только интерфейсом и логом, здесь на вкус и цвет...
     
  6. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    asmlamo
    Во-первых он не работает с диском через DeviceIoControl, а просто отдает команды определённому девайсу.
    Во-вторых чтобы отследить какие команды он дает, какие инпут\оутпут буферы передает, можно перехватить, как в ринг3 (NtDeviceIoControlFile) так и в ринг0 ( похукав обработчики драйвера, который создает девайс).

    Ты подробнее опиши, что тебе надо, может быть мы придумаем лучший вариант.
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Есть аще вариант - использовать IRPTracer.
     
  8. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
  9. boobl

    boobl New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2008
    Сообщения:
    18
    Сделать программу загрузчик защищенной программы.
    Она будет создавать процесс в тормознутом состоянии (CREATE_SUSPENDED), брать контекст процесса и запоминать точку входа, она вроде в eax там.
    Потом создавать область памяти и сувать туда свой код, менять eax на точку входа своего кода.
    В коде:
    Перехватывать DeviceIoControl сплайсингом.
    создавать окошки/открывать файлы для вывода информации/whatever.
    прыгать на оригинальную точку входа.

    Типа того что FreeCap и иже с ними делает.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    boobl
    Процесс не может быть в заторможенном или другом состоянии. При его создании в нём нет потоков.
    Win32StartAddress меняется с помощью ZwSetInformationThread, поток не с нёё начинает своё исполнение.
    Вообщем понятно - надо выполнить наш код до того, как первая инструкция программы получит управление.
    И вообще загрузчик здесь не нужен(а если нужен - их множество, мне нравится оля), можно присоеденить к программе модуль или выполнить патчь её модуля, если нет самозащиты.
     
  11. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Как вариант, можно перехватить работу на самом низком уровне -- с портами. Если известно, на каком порте сидит винчестер, то его можно перехватить. Возможность установки точек останова на пространство ввода/вывода появилась еще в P6, так что сейчас на всех процессорах есть. Наличие этой возможности определяется по cpuid. Далее надо установить точку входа на командный регистр и ждать команды IDENTIFY_DEVICE/IDENTIDY_ATAPI_DEVICE. Далее будет идти считывание из регистра данных в котором вернется серийник и номер модели -- самое время подменить его.

    Беда в том, что способ не простой -- надо знать как идет считывание данных, по прерыванию, или нет, инструкциями rep insw/insd, или просто чтение из регистра в цикле. Ну и к сожалению это только в ring0.
     
  12. boobl

    boobl New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2008
    Сообщения:
    18
    Clerk
    У меня вот это довольно неплохо работало в свое время
    Код (Text):
    1. int main(int argc, char *argv[])
    2. {
    3.     PROCESS_INFORMATION pInfo;
    4.     STARTUPINFO sInfo;
    5.     CONTEXT tContext;
    6.     char iCode[0xFB];
    7.    
    8.     ZeroMemory(&sInfo, sizeof(sInfo));
    9.     sInfo.cb = sizeof(sInfo);
    10.    
    11.     CreateProcess("portal.exe", NULL, NULL, NULL, 0, CREATE_SUSPENDED, NULL, NULL, &sInfo, &pInfo);
    12.    
    13.     tContext.ContextFlags = CONTEXT_FULL;
    14.     GetThreadContext(pInfo.hThread ,&tContext);
    15.    
    16.     VOID *iAddr = VirtualAllocEx(pInfo.hProcess, NULL, 0xFB, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    17.    
    18.     Compile(iCode, (DWORD)iAddr, tContext.Eax);
    19.     WriteProcessMemory(pInfo.hProcess, iAddr, (LPCVOID)iCode, 0xFB, NULL);
    20.     tContext.Eax = (DWORD)iAddr;
    21.    
    22.     SetThreadContext (pInfo.hThread, &tContext);
    23.     ResumeThread(pInfo.hThread);
    24.     return EXIT_SUCCESS;
    25. }
     
  13. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    это очень сложно ...
     
  14. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    boobl
    Clerk имел в виду что "объект" процесс, вообще не работает, это всего лишь контейнер для потоков.
    Код (Text):
    1. CreateProcess("portal.exe", NULL, NULL, NULL, 0, CREATE_SUSPENDED, NULL, NULL, &sInfo, &pInfo);
    Тут самый первый рабочий поток, создается засупсенденным.
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    WIN32
    +1
    CreateProcess - не только процесс создаёт, но и поток в нём, 6-й параметр в CreateProcess определяет в каком состоянии будет поток. Этот параметр и передаётся в ZwCreateThread.
     
  16. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Спасиб.
     
  17. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Отнють.