Всем привет! Подскажите 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) { ... } Заметил следующий момент: если у файла имеются ограничения на доступ (только для запуска), то Винда позволяет запустить этот файл, что собственно и является открытием и чтением. Интересно какими механизмами она пользуется?
Раз админ, то дай сперва файлу доступ на чтение, или запускай, а потом пробуй debug_attach и прочитать, а без админа вообще сомневаюсь
Админ то я только на своей машине. Я под админом просто пытаюсь выяснить каким же образом можно с флагом FILE_EXECUTE прочитать файл. Если винда и под админом мне не даёт почитать содержимое, то видимо я что-то не правильно делаю... А вообще задача следующая: есть сетевая шара, на ней я имею права простого смертного, т.е. читать содержимое каталога, запускать файлы, но НЕ ЧИТАТЬ содержимое файлов. Когда я запускаю файл из explorer'а, то он перекачивается на мою машину и запускается!!! С помощью Network Monitor'а я посмотрел SMB запрос, все флаги открытия. Оказалось, что запрос открытия файла содержит флаг FILE_EXECUTE... Вобщем процедуру открытия файла для запуска я сэмулировал (см. код выше). Но ReadFile возвращает ошибку доступа. Решил потренироваться на локальной ФС, где я бог и царь Но и тут всплыл AccessDenied! PS Ещё пытался достучаться до данных файла с помощью CreateFileMapping, но та же ошибка всё портит... Куда бежать?
Для админа тоже можно права урезать, но в том то он и админ, что может сам их себе добавить. А контролируются права из ядра (ring 0), именно ядро проверяет, читает, проецирует файлы для исполнения, а ReadFile просто обертка в ring 3 Exe'шки выполняются "из сети", т.е. измененные страницы подкачиваются из свопа, а не измененные подкачиваются с сетевой шары. Думаю быстрее поможет или сниффер или самому кодить общение с сетевым серваком
Можешь сделать так: 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, там будет ещё "чистый" образ файла
Дело в том, что судя по отчетам сетевого монитора прога перекачивается не полностью ко мне, а отдельными кусками, причем эти куски расположены вразброс, а не один за другим. Видимо винда, получая очередной кусок кода, тут же выполняет его. И в конце концов, когда код проги обращается к недоступному ресурсу (напр. хочет подгрузить библиотеку dll) выпадает с ошибкой. Т.е. полного образа исполняемого файла я не получаю. Тут, как я думаю, никакой OllyDbg не поможет, придется "кодить общение с сетевым серваком".
И нафиг я распинался, блин, ты попробуй! з.ы. а ты хочешь ещё и все dll олли в руки, как сдампишь exe (там надо будет урезать размер дампа), потом жми F9 и смотри в статус-баре строку типа "LDR: test.dll used by test.exe" или "LDR: test.dll bound to ..." и можешь сразу дампить dll. Это нормальный способ, винда сама подкачает чего нужно