
20.11.2024, 00:46
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
@BIT_hack,
C#:
Код:
private
const
int
HeaderSize
=
28
;
private
const
byte
XorKey
=
0xAC
;
private
const
string
ExpectedHeader
=
"Lineage2Ver111"
;
private
static
void
DecryptFile
(
string
filePath
)
{
using
var
fileStream
=
new
FileStream
(
filePath
,
FileMode
.
Open
,
FileAccess
.
ReadWrite
)
;
Span
headerBytes
=
stackalloc
byte
[
HeaderSize
]
;
fileStream
.
Read
(
headerBytes
)
;
string
header
=
System
.
Text
.
Encoding
.
Unicode
.
GetString
(
headerBytes
)
;
if
(
!
header
.
StartsWith
(
ExpectedHeader
)
)
{
//Console.WriteLine($"File '{filePath}' does not require decryption."); or display message or just skip
return
;
}
string
tempFilePath
=
$
"{filePath}.tmp"
;
using
var
tempFileStream
=
new
FileStream
(
tempFilePath
,
FileMode
.
Create
,
FileAccess
.
Write
)
;
fileStream
.
Seek
(
HeaderSize
,
SeekOrigin
.
Begin
)
;
var
buffer
=
ArrayPool
.
Shared
.
Rent
(
8192
)
;
int
bytesRead
;
while
(
(
bytesRead
=
fileStream
.
Read
(
buffer
,
0
,
buffer
.
Length
)
)
>
0
)
{
for
(
int
i
=
0
;
i
.
Shared
.
Return
(
buffer
)
;
fileStream
.
Close
(
)
;
tempFileStream
.
Close
(
)
;
File
.
Delete
(
filePath
)
;
File
.
Move
(
tempFilePath
,
filePath
)
;
}
|
|
|