mirror of
https://github.com/crskycode/GARbro.git
synced 2024-11-23 21:55:34 +08:00
(LST): fixed decryption for names containing characters identical to encryption key.
This commit is contained in:
parent
eb8e7598a0
commit
2d389ec528
@ -81,7 +81,7 @@ namespace GameRes.Formats.Nexton
|
|||||||
uint index_offset = 4;
|
uint index_offset = 4;
|
||||||
for (int i = 0; i < count; ++i)
|
for (int i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
string name = ReadName (lst, index_offset+8, 0x24, 0xcccccccc, cp932);
|
string name = ReadName (lst, index_offset+8, 0x24, 0xcc, cp932);
|
||||||
if (0 == name.Length)
|
if (0 == name.Length)
|
||||||
return null;
|
return null;
|
||||||
var entry = FormatCatalog.Instance.Create<Entry> (name);
|
var entry = FormatCatalog.Instance.Create<Entry> (name);
|
||||||
@ -112,7 +112,7 @@ namespace GameRes.Formats.Nexton
|
|||||||
uint index_offset = 4;
|
uint index_offset = 4;
|
||||||
for (int i = 0; i < count; ++i)
|
for (int i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
string name = ReadName (lst, index_offset+8, 0x40, key, cp932);
|
string name = ReadName (lst, index_offset+8, 0x40, (byte)key, cp932);
|
||||||
if (0 == name.Length)
|
if (0 == name.Length)
|
||||||
return null;
|
return null;
|
||||||
var entry = new NextonEntry {
|
var entry = new NextonEntry {
|
||||||
@ -153,7 +153,7 @@ namespace GameRes.Formats.Nexton
|
|||||||
return new BinMemoryStream (data, entry.Name);
|
return new BinMemoryStream (data, entry.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string ReadName (ArcView view, long offset, uint size, uint key, Encoding enc)
|
private static string ReadName (ArcView view, long offset, uint size, byte key, Encoding enc)
|
||||||
{
|
{
|
||||||
byte[] buffer = new byte[size];
|
byte[] buffer = new byte[size];
|
||||||
uint n;
|
uint n;
|
||||||
@ -162,7 +162,9 @@ namespace GameRes.Formats.Nexton
|
|||||||
byte b = view.View.ReadByte (offset+n);
|
byte b = view.View.ReadByte (offset+n);
|
||||||
if (0 == b)
|
if (0 == b)
|
||||||
break;
|
break;
|
||||||
buffer[n] = (byte)(b^key);
|
if (b != key)
|
||||||
|
b ^= key;
|
||||||
|
buffer[n] = b;
|
||||||
}
|
}
|
||||||
return enc.GetString (buffer, 0, (int)n);
|
return enc.GetString (buffer, 0, (int)n);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user