ix | Дата: Четверг, 23.01.2014, 16:50 | Сообщение # 1 |
Был не раз
Зарегистрирован: 21.01.2014
Группа: Пользователи
Сообщений: 7
Статус: Offline
| В процессе работы моего трояна необходимо шифровать файл настроек, логи, а также сервер удаленного доступа, идущий с ним в комлекте. Написал вот такой алгоритм: Код procedure CryptFileRC6(fn: string); var RC6: TDCP_RC6; SHA1: TDCP_SHA1; _datetime: String; cdatetime: array [0..18] of Byte; rsz: DWord; fsz: DWord; MSRandom: TSimpleRandom; musor: TBuf; filename: String; Buffer: array of Byte; digest: array [0..19] of Byte; digest2: array [0..19] of Byte; key: array [0..31] of Byte; lastbyte: Byte; F: File; i,i2: Integer; begin if not FileExists(fn) then Exit; _datetime := DateTimeToStr(Now); filename := ExtractFileName(fn);
SHA1 := TDCP_SHA1.Create(nil); SHA1.Init; SHA1.UpdateStr(_datetime); SHA1.Final(digest); SHA1.Burn; FreeAndNil(SHA1);
SHA1 := TDCP_SHA1.Create(nil); SHA1.Init; SHA1.UpdateStr(filename); SHA1.Final(digest2); SHA1.Burn; FreeAndNil(SHA1);
for i := 0 to 19 do key[i] := digest[i];
for i2 := 20 to 31 do key[i2] := digest2[i2-20] xor key[i2-20];
for i := 0 to 19 do if i mod 2=0 then key[i] := key[i] xor digest2[11+(i mod 2)];
AssignFile(F,fn); Reset(f,1); if FileSize(f)=0 then Exit; SetLength(Buffer,FileSize(f)); BlockRead(F,buffer[0],FileSize(f)); Seek(f,FileSize(f)-1); BlockRead(F,lastbyte,1); RC6 := TDCP_RC6.Create(nil); RC6.Init(key,SizeOf(key)*8,nil); RC6.EncryptCFB(buffer[0],buffer[0],High(buffer)); RC6.Burn; FreeAndNil(RC6);
fsz := FileSize(f);
rsz := Random(fsz div 4)+(fsz div 10); fsz := fsz xor digest2[5];
//Получаем мусор с помошью стандартного генератора случайных чисел от M$ MSRandom := TSimpleRandom.Create; MSRandom.Open(PROV_RSA_FULL); MSRandom.SRandom(rsz,musor); MSRandom.Close;
for i := 0 to 18 do cdatetime[i] := Ord(_datetime[i+1]) xor (rsz xor digest2[6+(i mod 2)]);
rsz := rsz xor digest2[9];
Seek(f,0); BlockWrite(f,buffer[0],High(Buffer)); BlockWrite(f,cdatetime,SizeOf(cdatetime)); BlockWrite(f,rsz,SizeOf(rsz)); BlockWrite(f,musor[0],rsz); BlockWrite(f,fsz,SizeOf(fsz)); BlockWrite(f,lastbyte,1); CloseFile(f); //çàïèñûâàåì âñ¸ â ôàéë
FillChar(buffer[0],High(buffer),$00); FillChar(musor[0],High(musor),$00); FillChar(key,SizeOf(Key),$00); FillChar(digest,SizeOf(digest),$00); FillChar(digest2,SizeOf(digest2),$00); FillChar(cdatetime,SizeOf(cdatetime),$00); fsz := 0; rsz := 0; lastbyte := 0; i := 0; i2 := 0; _datetime := ''; end; Как видно, ключ формируется из хешей имени файла и даты шифровки. После непосредственно шифрованных данных записывается дата шифровки, размер мусора, сам мусор из псевдослучайных чисел, размер шифрованных данных (чтобы при дешифровке отделить их от мусора) и в конце - последний байт исходного файла (по каким-то причинам в процессе шифрования он искажается).
Теперь вопрос: насколько сложно будет потенциальному крякеру а) догадаться о самом факте шифрования б) узнать, каким алгоритмом зашифрован текст в) вычленить из шифрованного файла данные, необходимые для расшифровки г) отделить полезную часть от мусора д) получить из них ключ? Имя файла при шифровке изменяется.
И что можно сделать, чтобы улучшить алгоритм? (ключ должен быть динамическим, хранится в самом файле и не быть привязанным к железу)
|
|
| |
xXxSh@dowxXx | Дата: Четверг, 23.01.2014, 18:09 | Сообщение # 2 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| Цитата ix ( ) ключ должен быть динамическим, хранится в самом файле и не быть привязанным к железу
тем самым сразу же ты отвечаешь на часть своих вопросов выше, крякер немного поанализировав сможет вывести схему твоего алгоритма, тем самым у него появится возможность расшифровать текст.
|
|
| |
ms301 | Дата: Пятница, 31.01.2014, 18:29 | Сообщение # 3 |
Постоянный
Зарегистрирован: 28.11.2012
Группа: Пользователи
Сообщений: 101
Статус: Offline
| ну если для крякера будет недоступен инструмент шифрования - то очеееень маленькая вероятность что расшифруют твой файлик
|
|
| |
Anton93 | Дата: Суббота, 01.02.2014, 21:43 | Сообщение # 4 |
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
| учитывайте, что если EXE разбирать будут, они далеко не такой понятный код будут видеть, а ассемблерный, от своих то прог ужасаюсь когда дизасемблирую, от количества инструкций, а тут еще в чужом коде
ICQ: 41896
|
|
| |
xXxSh@dowxXx | Дата: Суббота, 01.02.2014, 22:51 | Сообщение # 5 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| Цитата ms301 ( ) ну если для крякера будет недоступен инструмент шифрования верно подмечено, если так то будет очень затруднительно расшифровывать.
|
|
| |