Сейчас на форуме: user99, _MBK_, ManHunter, Magister Yoda, rtsgreg1989 (+9 невидимых)

 eXeL@B —› Основной форум —› Доступ к файлу
Посл.ответ Сообщение

Ранг: 16.3 (новичок), 3thx
Активность: 0.010.06
Статус: Участник

Создано: 15 октября 2005 11:40
· Личное сообщение · #1

Прога при работе испульзует файл который надо исправить ВО ВРЕМЯ РАБОТЫ проги
но винда ругается что файл уже испульзуется
Можно-ли получитьк нему доступ и сменить этот файл на другой и как ?



Ранг: 51.9 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 15 октября 2005 12:49
· Личное сообщение · #2

Если файл открыть на шару, то его можно изменять. Поэтому достаточно в проге изменить права на открытие файла (FILE_SHARE_READ | FILE_SHARE_WRITE). Смотри функцию CreateFile. Проблема может быть тогда, когда прога использует что-то типа CFile, ведь вызов уйдёт глубоко в библиотеку. Но и в таком случаи достаточно добавить константу CFile::shareDenyNone.



Ранг: 16.3 (новичок), 3thx
Активность: 0.010.06
Статус: Участник

Создано: 15 октября 2005 13:03
· Личное сообщение · #3

Проблема в том что прогу писал далеко не я
и исходников естественно нет



Ранг: 51.9 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 15 октября 2005 13:25
· Личное сообщение · #4

ZLOFENIX пишет:
и исходников естественно нет

Я догадался Найди место в проге где осуществляется открытие файла, и поменяй тип доступа. Скажем с помощью Иды или Айса (поиск текстовой строки или брейкпоинт). А дальше Hiew.



Ранг: 16.3 (новичок), 3thx
Активность: 0.010.06
Статус: Участник

Создано: 15 октября 2005 14:32
· Личное сообщение · #5

А можно-ли не правя прогу ?
Если нет то вот она: [url=http://www.theabyss.ru/files/abyss.exe][/url]
Или подскажите как и желательно где убрать проверку на файлы verdata и tiledata чтоб работала с любыми
Не люблю я abyss



Ранг: 51.9 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 15 октября 2005 15:23
· Личное сообщение · #6

1) Да там 11 метров.
2) Вероятно тебе в топик на запрос для взлома
3) Если хочешь сам это сделать то для начала покажи что ты вообще искал, какие способы пробывал...




Ранг: 230.5 (наставник)
Активность: 0.180
Статус: Участник
Norg

Создано: 15 октября 2005 19:01
· Личное сообщение · #7

Windows блокирует ПОЛНЫЙ доступ ко многим файлам, которые в данный момент использует система. К таким файлам относятся выполняемые программы, используемые библиотеки, шрифты и т.д. При поиске вирусов, к примеру, эти файлы представляют наибольший интерес.

Обдурить Windows и получить доступ к этим файлам крайне просто - нужно открывать их в режиме ReadOnly.

В Delphi за режим открытия файлов отвечает системная переменная FileMode. Boзможные значения:


0 Read only
1 Write only
2 Read/Write

По умолчанию FileMode==2, поэтому открытие заблокированых файлов нарывается на неприятность. При доступе ReadOnly доступ блокируется только д так что этот случай приходится контролировать отдельно.

В общем случае, если Вы хотите лазить по всем файлам подряд - применима следующая последовательность действий.



program pfileMode;
{$APPTYPE CONSOLE}
uses SysUtils;

var
oldFM: integer;
var
SR: TSearchRec;

begin
if FindFirst('C:\*.*', faAnyFile, SR) = 0 then
repeat
try
oldFM := FileMode;
FileMode := 0;
WriteLn(SR.Name);
//работаем с файлом
finally
FileMode := oldFM;
end;
until FindNext(SR) < > 0;
FindClose(SR);
readLn;
end.

-----
M&#225 enginn renna undan &#254v&#237 sem honum er skapa&#240




Ранг: 16.3 (новичок), 3thx
Активность: 0.010.06
Статус: Участник

Создано: 16 октября 2005 00:50
· Личное сообщение · #8

Виноват ошибся, вот ссылка [url=http://www.theabyss.ru/files/client.zip][/url]



Ранг: 16.3 (новичок), 3thx
Активность: 0.010.06
Статус: Участник

Создано: 16 октября 2005 02:05 · Поправил: ZLOFENIX
· Личное сообщение · #9

Попробовал вот что получилось:

program pfileMode;
{$APPTYPE CONSOLE}
uses
SysUtils;

var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
oldfm:integer;
begin
oldfm:=filemode;
filemode:=0;
AssignFile(FromF, 'xxx.fgh');
Reset(FromF, 1); { Record size = 1 }
AssignFile(ToF, 'original.fgh');
Rewrite(ToF, 1); { Record size = 1 }
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
filemode:=oldfm;
CloseFile(FromF);
CloseFile(ToF);
end.

НЕСРАБОТАЛО
или я кривой ?
т.к. я незнаю как переписать файл через Write/Read списал через BlockWrite/BlockRead
или еще как то можно переписать чтобы это все работало ?
НЕ ИЗМЕНЯЯ EXE !




Ранг: 78.0 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 16 октября 2005 04:26 · Поправил: cbs
· Личное сообщение · #10

ZLOFENIX
Не издевайся над собой и окружающими
Измени .exe по совету Barakuda. Так быстрее будет

НЕСРАБОТАЛО
И не должно работать. В примере выше файл открыт в режиме Read Only.

-----
crypto.freak




Ранг: 16.3 (новичок), 3thx
Активность: 0.010.06
Статус: Участник

Создано: 16 октября 2005 05:00
· Личное сообщение · #11

тогда почему WriteLn(SR.Name); //работаем с файлом ?
Я бы изменил... только где ?????



Ранг: 88.0 (постоянный)
Активность: 0.070
Статус: Участник

Создано: 16 октября 2005 12:50
· Личное сообщение · #12

В ольке bp CreateFile, выходишь из процедуры. Если оказываешься в файле(а не MFC библиотеке), то должен будешь увидеть что-то типа этого:

push 0 ;цифры могут быть разными
push 80
push 3
push 0
push 1 ;вот тут и надо править
push 80000000
push eax
call CreateFileA
... ;ты тут

А вот если окажешься в MFC библиотеке, то нажимаешь Debug->Execute till user code и смотришь номер той функции которая была вызвана. С ней и надо будет разбираться.


 eXeL@B —› Основной форум —› Доступ к файлу
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати