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

Нужна помощь


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);" ;)

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

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

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



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

    • AJIEKCAHDP
      Автор AJIEKCAHDP
      Утром (26.02.2025) Зашифровало абсолютно все.  Помогите пож. 
      26022025.rar
    • _1Artes1_
      Автор _1Artes1_
      В общем,во время поиска обхода блокировки дискорда,поймал себе какую-то гадость,вытащила мне все логины и пароли с устройства ,вроде,удалил,но сегодня не смог зайти в редактор реестра и понял,что еще не все исправлено
      CollectionLog-2025.05.08-21.00.zip
    • Ilya45
      Автор Ilya45
      Доброго времени суток.
      Зашифровали сегодня файлы на компе, ночью, предположительно подключились через рдп, вырубили каспера иначе думаю не отключить. винда 7.
      log.zip - логи под пользователем где все зашифровано,
      log2.zip - логи под созданным пользователем(добавил нового сам). со всеми галками в программе.
      files.zip - файл исходный и зашифрованный, плюс тхт с сообщением.
      log.zip files.zip log2.zip
    • vorosshilov_k
      Автор vorosshilov_k
      Здравствуйте! Процессор ноутбука начал хорошенько греться даже в идле на батарее и на зарядке. Решил проверить кьюритом и увидел NET:MALWARE.URL winnet.exe. Понял, что лучше оставить заявку на форуме, чем заниматься самодеятельностью. Все файлы прилагаю. Заранее спасибо!

      CollectionLog-2025.04.11-14.05.zip
    • CBUAleksandrK
      Автор CBUAleksandrK
      Добрый день! Знакомая, с ее слов, скачала книгу в формате doc/docx (Ворд, конкретно формат не знаю, к сожалению, она тоже, т.к. не понимает в этом), сейчас у нее KIS ругается на троян в оперативной памяти, лечение с перезагрузкой, к сожалению, не помогает, тот же самый троян после перезагрузки машины KIS видит вновь. Логи с Автологгера и скрин из KIS прикладываю, надеюсь все корректно оформил. Заранее спасибо!

      CollectionLog-2025.05.13-16.38.zip
×
×
  • Создать...