Показать сообщение отдельно

  #1  
Старый 14.10.2024, 10:20
BIT_hack
Постоянный
Регистрация: 12.08.2021
Сообщений: 355
С нами: 2502597

Репутация: 223
По умолчанию

Это мой первый опыт использования XOR и C#. Возможно, профессионалу мой код покажется не самым оптимальным, но он выполняет свою задачу.

У меня вопрос: как получить из текста "Lineage2Ver111" байты, которые будут такими же, как и из файла? Я не уверен, как это называется, но, по-моему, это связано с нулевыми байтами.

Например, в коде я получаю байты для текста "Lineage2Ver111": "4C 69 6E....". А в файле для этого же текста я получаю такие байты:"4C 00 69 00 6E....".

Я пробовал разные кодировки и много чего ещё, но не добавлять же после каждого байта нулевые байты. Я думаю, что в C# должна быть стандартная функция преобразования для этого.

Этот код представляет собой дешифратор файлов Lineage2 версии 111. на C#

Чтобы не тратить ваше время, сразу скажу, что этот код работает.

У меня только один вопрос, который я описал выше.

C#:


[CODE]
using
System
.
IO
;
public
static
class
Lineage2Decrypter
{
// Ключ XOR для Lineage2Ver111
private
const
byte
KeyXOR
=
0xAC
;
// Шаблон байтов для поиска начала зашифрованных данных Lineage2Ver111
private
static
readonly
byte
[
]
ByteVersion111
=
{
76
,
0
,
105
,
0
,
110
,
0
,
101
,
0
,
97
,
0
,
103
,
0
,
101
,
0
,
50
,
0
,
86
,
0
,
101
,
0
,
114
,
0
,
49
,
0
,
49
,
0
,
49
,
0
}
;
// Дешифрование файла Lineage2
public
static
string
L2DecodeU
(
string
fileName
)
{
if
(
!
File
.
Exists
(
fileName
)
)
return
fileName
;
byte
[
]
fileData
=
File
.
ReadAllBytes
(
fileName
)
;
int
startIndex
=
FindStringIndex
(
fileData
,
ByteVersion111
)
;
if
(
startIndex
>=
0
)
{
startIndex
+=
ByteVersion111
.
Length
;
byte
[
]
decryptedData
=
DecryptData
(
fileData
,
startIndex
,
KeyXOR
)
;
string
outputFilePath
=
"temp/dec-"
+
Path
.
GetFileName
(
fileName
)
;
Directory
.
CreateDirectory
(
Path
.
GetDirectoryName
(
outputFilePath
)
)
;
using
(
FileStream
outputFile
=
File
.
OpenWrite
(
outputFilePath
)
)
{
outputFile
.
Write
(
decryptedData
,
0
,
decryptedData
.
Length
)
;
}
return
outputFilePath
;
}
return
fileName
;
}
// Поиск начала зашифрованных данных в массиве байт
private
static
int
FindStringIndex
(
byte
[
]
data
,
byte
[
]
pattern
)
{
for
(
int
i
=
0
;
i
 
Ответить с цитированием