Открытие файла с флагом FILE_EXECUTE

Тема в разделе "WASM.WIN32", создана пользователем andfly, 29 ноя 2004.

  1. andfly

    andfly New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2004
    Сообщения:
    3
    Всем привет!

    Подскажите plz, мож кто сталкивался с подобной проблемой:

    Нужно открыть файл с атрибутом FILE_EXECUTE, а потом как-нибудь считать из него данные. Открыть-то получается, а вот считать - ошибка, мол Access Denied. Залогинился я под админом, т.е. права по идее должны быть...

    Вот примерный кусок неработающего кода:



    hFile = CreateFile("c://example.exe",

    FILE_EXECUTE, //0x20

    FILE_SHARE_READ | FILE_SHARE_DELETE, //0x5

    NULL,

    OPEN_EXISTING ,

    SECURITY_CONTEXT_TRACKING | SECURITY_EFFECTIVE_ONLY,

    NULL);



    if (ReadFile(hFile,buff,0x1,&cb,NULL) == 0)

    {

    ...

    }



    Заметил следующий момент: если у файла имеются ограничения на доступ (только для запуска), то Винда позволяет запустить этот файл, что собственно и является открытием и чтением. Интересно какими механизмами она пользуется?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Раз админ, то дай сперва файлу доступ на чтение, или запускай, а потом пробуй debug_attach и прочитать, а без админа вообще сомневаюсь
     
  3. andfly

    andfly New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2004
    Сообщения:
    3
    Админ то я только на своей машине. Я под админом просто пытаюсь выяснить каким же образом можно с флагом FILE_EXECUTE прочитать файл. Если винда и под админом мне не даёт почитать содержимое, то видимо я что-то не правильно делаю...



    А вообще задача следующая: есть сетевая шара, на ней я имею права простого смертного, т.е. читать содержимое каталога, запускать файлы, но НЕ ЧИТАТЬ содержимое файлов. Когда я запускаю файл из explorer'а, то он перекачивается на мою машину и запускается!!!

    С помощью Network Monitor'а я посмотрел SMB запрос, все флаги открытия. Оказалось, что запрос открытия файла содержит флаг FILE_EXECUTE... Вобщем процедуру открытия файла для запуска я сэмулировал (см. код выше). Но ReadFile возвращает ошибку доступа.



    Решил потренироваться на локальной ФС, где я бог и царь :) Но и тут всплыл AccessDenied!



    PS Ещё пытался достучаться до данных файла с помощью CreateFileMapping, но та же ошибка всё портит...

    Куда бежать?
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Для админа тоже можно права урезать, но в том то он и админ, что может сам их себе добавить. А контролируются права из ядра (ring 0), именно ядро проверяет, читает, проецирует файлы для исполнения, а ReadFile просто обертка в ring 3







    Exe'шки выполняются "из сети", т.е. измененные страницы подкачиваются из свопа, а не измененные подкачиваются с сетевой шары. Думаю быстрее поможет или сниффер или самому кодить общение с сетевым серваком
     
  5. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Можешь сделать так:

    1. В OllyDbg выставить "break on debug string"

    2. Запустить рег-файл



    REGEDIT4



    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\test.exe]

    "GlobalFlag"="0x00000002"

    "Debugger"="c:\\masm32\\tools\\ollydbg\\ollydbg.exe"



    Где test.exe - имя сетевой проги (без пути)



    3. Запустить test.exe и снять в олли дамп по адресу 00400000h, там будет ещё "чистый" образ файла
     
  6. andfly

    andfly New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2004
    Сообщения:
    3
    Дело в том, что судя по отчетам сетевого монитора прога перекачивается не полностью ко мне, а отдельными кусками, причем эти куски расположены вразброс, а не один за другим.



    Видимо винда, получая очередной кусок кода, тут же выполняет его. И в конце концов, когда код проги обращается к недоступному ресурсу (напр. хочет подгрузить библиотеку dll) выпадает с ошибкой.



    Т.е. полного образа исполняемого файла я не получаю.

    Тут, как я думаю, никакой OllyDbg не поможет, придется "кодить общение с сетевым серваком".

    :dntknw:
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    И нафиг я распинался, блин, ты попробуй!



    з.ы. а ты хочешь ещё и все dll :) олли в руки, как сдампишь exe (там надо будет урезать размер дампа), потом жми F9 и смотри в статус-баре строку типа "LDR: test.dll used by test.exe" или "LDR: test.dll bound to ..." и можешь сразу дампить dll. Это нормальный способ, винда сама подкачает чего нужно