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

Нужна помощь


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
    • vasili_rb
      От vasili_rb
      Добрый день.
      Очень нужна помощь. Хватанул какого то трояна скорее всего.
      Не запускаются виртуальные машины в Hyper-V, перестали работать обновления 
      SRVMAIN_2025-02-12_11-59-20_v4.99.8v x64.7z
       
      HyperV восcтановил путем удаления роли и установкой по новому.
    • TVagapov
      От TVagapov
      14 августа вечером на компанию совершена атака шифровальщиком. Заражён контроллер домена, антивирус с обновлёнными базами не среагировал. Часть компьютерв в сети оказались заражены. На заражённых машинах антивирус присутствовал, но при нажатии на иконку в спулере, пункты меню отвечающие за проверку были серыми (недоступными).  На двух машинах при авторизации сработал антивирус, определил HEUR:Trojan-Ransom.Win32.Convagent.gen Объект: \\***.RU\\net;logon\ds.exe
       
      Прикладываю логи сканера, требования, образцы зашифрованых и оригинальных файлов.
       
      Требуется помощь в дешифровке файлов и определении стратегии восстановления и защиты от данного вируса.
      Logs_Files.7z
    • КираРи
      От КираРи
      Я не знаю что нужно прилагать и что должно быть, но вирус удалить или вылечить не смогла даже с помощью Dr. Web, ноутбук пыхтит даже когда не нагружен работой, помогите я не знаю что делать 
    • Vopj
      От Vopj
      В определенный момент начала возникать большая нагрузка на CPU, возник сильный перегрев. RogueKiller обнаружил PuzzleMedia, CureIt не запускается ввобще, к сожалению по причине отсутствующих навыков, самостоятельно разобраться не получилось, прошу помощи.
      CollectionLog-2024.11.13-21.04.zip
×
×
  • Создать...