Перейти к содержанию

Нужна помощь


Alex34001

Рекомендуемые сообщения

Приветствую. Нужна помощь! :blink:

Зашифровал важный для меня файл.

Алгоритм шифровки:

procedure TForm1.Button4Click(Sender: TObject);
var fname:String;f:file; t,ps,pp:integer;
fl:integer;
begin
if (Length(Edit5.Text)=0) or (Length(Edit6.Text)=0)
then Begin
MessageDlg('Не введены нужные данные.',
mtWarning, [mbOK], 0); exit end;
For pp:=1 to length(Edit6.Text) do Begin
ps:=ps+ ord(Edit6.Text[pp]); end;
t:=ps+length(Edit6.Text);
fname:=Edit5.Text; AssignFile(f,fname);
Reset(f,1);
while eof(f)=false do Begin
BlockRead(f,fl,1); fl:=fl+1;
BlockWrite(f,fl,1);
end; closeFile(f);
MessageDlg('Процесс успешно завершен.',
mtInformation, [mbOK], 0);
end;

 

На кривой код не обращайте внимания, нужна только расшифровка.

Ребята, помогите, расшифруйте обратно ;) , файл прикрепляю.

Заодно можете(если не трудно) прекрипить алгоритм расшифровки.

 

Unit1.rar

 

Подсказка, вдруг поможет помочь мне:

текст: 12345 шифруется тем же алгоритмом как 113355

 

Добавлено

BlockRead(f,fl,1); -Считать один байт в fl, в позицию x.

fl:=fl+1; - прибавляем к fl - 1

BlockWrite(f,fl,1); - Записать полученное fl в файл, но в позицию x+1.

Вот и ошибка.

Алгоритм необратим?

Изменено пользователем Alex34001
Ссылка на комментарий
Поделиться на другие сайты

Alex34001 Я малость не понял, это к чему вообще и как используется? Как я понял, к остальному коду это отношения не имеет:

For pp:=1 to length(Edit6.Text) do Begin

ps:=ps+ ord(Edit6.Text[pp]); end;

t:=ps+length(Edit6.Text);

Далее

BlockRead(f,fl,1); -Считать один байт в fl, в позицию x.

fl:=fl+1; - прибавляем к fl - 1

BlockWrite(f,fl,1); - Записать полученное fl в файл, но в позицию x+1.

Вот и ошибка.

Да. Ошибка. В подопытном файле каждый чётный байт заменяется предыдущим нечётным.

 

Алгоритм необратим?
Да. Необратим. Это не шифрование, это потеря информации (ибо шифрование - это обратимое преобразование с целью сокрытия смысла информации)

 

Маленький совет по ходу:

ps:=ps+ ord(Edit6.Text[pp]);
Такие конструкции (переменная:=переменная+что-то) должны предваряться обнулением переменной, т.к. не гарантируется, что в первый раз использованный Integer будет равен нулю или string будет пустым.

 

P.S. глянул приложенный файл - это .dfm - описание формы Delphi. Восстановить его имхо почти невозможно. А Delphi делает резервные копии и модулей, и форм! Если в настройках резервные копии не отключали и вручную не удаляли, поищите в том же каталоге, где Вы запортили Unit1.dfm, файл Unit1.~dfm. Если есть такой - просто переименуйте, в нём будет всё, кроме последнего изменения.

 

Успехов в программировании, не расстраивайтесь, ошибок не делает тот, кто ничего не делает :blink:

Изменено пользователем C. Tantin
Ссылка на комментарий
Поделиться на другие сайты

C. Tantin, Спасибо за ответ.

Я малость не понял, это к чему вообще и как используется? Как я понял, к остальному коду это отношения не имеет:

Да не имеет. Но это только тут.

Да. Ошибка. В подопытном файле каждый чётный байт заменяется предыдущим нечётным.

Это значит что после вызова BlockRead(f,fl,1) нужно от Filepos(f) вычесть 1 ? и кстати как перейти на эту позицию в файле?

Да. Необратим. Это не шифрование, это потеря информации (ибо шифрование - это обратимое преобразование с целью сокрытия смысла информации)

Знаю, просто только основываюсь в программировании, делаю ошибки....

Такие конструкции (переменная:=переменная+что-то) должны предваряться обнулением переменной, т.к. не гарантируется, что в первый раз использованный Integer будет равен нулю или string будет пустым.

Хорошо, буду знать.

Если есть такой - просто переименуйте, в нём будет всё, кроме последнего изменения.

К сожалению нет, форму рисую заново.

 

Ошибки свои понял. Огромное спасибо!

Изменено пользователем Alex34001
Ссылка на комментарий
Поделиться на другие сайты

Хорошо, буду знать.

Буратино дали два яблока. Потом еще два. Затем три забрали. Сколько яблок осталось у Буратино? Одно? Неверно - мы же не знаем, сколько яблок у него было до этого. Вывод - обнуляйте переменные.

  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

Это значит что после вызова BlockRead(f,fl,1) нужно от Filepos(f) вычесть 1 ? и кстати как перейти на эту позицию в файле?
В Вашем случае нужно пользоваться процедурой Seek для перемещения по файлу.

 

Пара советов: если экспериментируете с шифрованием, записывайте шифрованное в отдельный файл (например, читаете из myfile.txt, а записываете в myfile.txt.crypted), и почитайте про класс TFileStream.

Ссылка на комментарий
Поделиться на другие сайты

Вот код дешифровщика:

while eof(f)=false do Begin
 BlockRead(f,ii,10);
 for t1:=1 to 10 do begin
 ii[t1]:=ii[t1]-t;
  end;
 Seek(f,Filepos(f)-10);
 BlockWrite(f,ii,10);
 (*Application.ProcessMessages;*)
 end;
 closeFile(f);

Вопрос: Почему последние байты не расшифровываются, и как это исправить?

Изменено пользователем Alex34001
Ссылка на комментарий
Поделиться на другие сайты

Вопрос: Почему последние байты не расшифровываются, и как это исправить?
Код уже получше!

 

1) на будущее (сейчас это не нужно) следует указывать тип переменных.

 

2) вот это

BlockRead(f,ii,10);

for t1:=1 to 10 do begin

ii[t1]:=ii[t1]-t;

end;

Seek(f,Filepos(f)-10);

BlockWrite(f,ii,10);

практически эквивалентно этому
BlockRead(f,ii,1);

ii[1]:=ii[1]-t;

Seek(f,Filepos(f)-1);

BlockWrite(f,ii,1);

при условии, что файл открывался как Reset(f, 1). И ошибки не будет :blink:

А если всё-таки хочется читать файл не по 1 байту, а блоками, то буфер в 10 байт - мало, надо хоть килобайт 8... (если интересует скорость - можно поэкспериментировать с размерами буферов)

 

3) Ошибка из-за того, что у Вас цикл с предпроверкой условия (while...do), а нужен с постпроверкой (repeat...until), плюс файл редко бывает кратен 10 байтам, из-за этого "остаток" (SizeOf(f) mod 10) не обрабатывается приведённым кодом.

 

4) Если нужно обрабатывать считанный остаток (меньший чем буфер), количество считанных байт возвращается через var-параметр AmtTransferred процедуры BlockRead.

Изменено пользователем C. Tantin
Ссылка на комментарий
Поделиться на другие сайты

А теперь нормально? У меня теперь расшифровывает все! :blink:

Repeat
  BlockRead(f,ii,64,x);
  for t1:=1 to x do begin
  ii[t1]:=ii[t1]-t;
end;
  Seek(f,Filepos(f)-x);
  BlockWrite(f,ii,x);
  (*Application.ProcessMessages;*)
Until eof(f)=true;
closeFile(f);

x,t1-integer, ii - array of integer,f-file.

Изменено пользователем Alex34001
Ссылка на комментарий
Поделиться на другие сайты

Буратино дали два яблока. Потом еще два. Затем три забрали. Сколько яблок осталось у Буратино? Одно? Неверно - мы же не знаем, сколько яблок у него было до этого. Вывод - обнуляйте переменные.
:)! Пример - супер! +1!

 

А теперь нормально? У меня теперь расшифровывает все!
Хо-ро-шо! С технической точки зрения - всё ок! Алгоритм шифрования, конечно, не самый крутой, но просто прочитать помешает...

 

Кстати, "Until eof(f)=true;" эквивалентно "Until eof(f);" ;)

Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Похожий контент

    • Alexk6
      От Alexk6
      После криворукого админа возникли проблемы. Поймали шифровальщик. Админ сделал терминальный сервер из Win 11 Home на котором работали 6-7 человек, все с админскими правами. Браузером пользовались все с этого сервера. Файлы меньше 8 мб не затронуты. Ссылка на шифрованный файл и его орегинал https://cloud.mail.ru/public/a4nf/zJDX69Qs9
    • Vopj
      От Vopj
      В определенный момент начала возникать большая нагрузка на CPU, возник сильный перегрев. RogueKiller обнаружил PuzzleMedia, CureIt не запускается ввобще, к сожалению по причине отсутствующих навыков, самостоятельно разобраться не получилось, прошу помощи.
      CollectionLog-2024.11.13-21.04.zip
    • tr01
      От tr01
      Добрый день
      Подскажите, пожалуйста, сможете ли вы помочь в ситуации, если сервер в зломали и упаковали файлы в архив rar?После этого был Backdoor, но вроде бы уже удален антивирусом, восстановить файлы с диска не получается (затерты архивами). 
      Addition.txt FRST.txt отчет.txt пароль к архиву - копия (72) — копия — копия.txt
    • КираРи
      От КираРи
      Я не знаю что нужно прилагать и что должно быть, но вирус удалить или вылечить не смогла даже с помощью Dr. Web, ноутбук пыхтит даже когда не нагружен работой, помогите я не знаю что делать 
    • KakoeImyaSdelat
      От KakoeImyaSdelat
      Добрый день, программа "RogueKiller" выявляет майнер "PuzzleMedia" и у меня самостоятельно удалить не получается. Ощущение, что вирусы блокируют некоторые сайты, помогите, пожалуйста
       
×
×
  • Создать...