mirror of
https://github.com/crskycode/GARbro.git
synced 2026-07-08 01:30:18 +08:00
Cx encryption bytecode generation fix.
This commit is contained in:
@@ -232,10 +232,6 @@ namespace GameRes.Formats.KiriKiri
|
|||||||
if (!string.IsNullOrEmpty (entry.Name) && entry.Segments.Any())
|
if (!string.IsNullOrEmpty (entry.Name) && entry.Segments.Any())
|
||||||
{
|
{
|
||||||
dir.Add (entry);
|
dir.Add (entry);
|
||||||
// Trace.WriteLine (string.Format ("{0,-16} {3:X8} {1,11} {2,12}", entry.Name,
|
|
||||||
// entry.IsEncrypted ? "[encrypted]" : "",
|
|
||||||
// entry.Segments.First().IsCompressed ? "[compressed]" : "",
|
|
||||||
// entry.Hash));
|
|
||||||
}
|
}
|
||||||
NextEntry:
|
NextEntry:
|
||||||
header.BaseStream.Position = dir_offset;
|
header.BaseStream.Position = dir_offset;
|
||||||
@@ -249,6 +245,10 @@ NextEntry:
|
|||||||
var xp3_entry = entry as Xp3Entry;
|
var xp3_entry = entry as Xp3Entry;
|
||||||
if (null == xp3_entry)
|
if (null == xp3_entry)
|
||||||
return arc.File.CreateStream (entry.Offset, entry.Size);
|
return arc.File.CreateStream (entry.Offset, entry.Size);
|
||||||
|
// Trace.WriteLine (string.Format ("{0,-16} {3:X8} {1,11} {2,12}", xp3_entry.Name,
|
||||||
|
// xp3_entry.IsEncrypted ? "[encrypted]" : "",
|
||||||
|
// xp3_entry.Segments.First().IsCompressed ? "[compressed]" : "",
|
||||||
|
// xp3_entry.Hash));
|
||||||
if (1 == xp3_entry.Segments.Count && !xp3_entry.IsEncrypted)
|
if (1 == xp3_entry.Segments.Count && !xp3_entry.IsEncrypted)
|
||||||
{
|
{
|
||||||
var segment = xp3_entry.Segments.First();
|
var segment = xp3_entry.Segments.First();
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ namespace GameRes.Formats.KiriKiri
|
|||||||
else if (!EmitBody2 (program, stage - 1))
|
else if (!EmitBody2 (program, stage - 1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!program.Emit (CxByteCode.MOV_EBX_EAX, 2))
|
if (!program.Emit (CxByteCode.MOV_EBX_EAX, 2)) // 0x89 0xc3
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (0 != (program.GetRandom() & 1))
|
if (0 != (program.GetRandom() & 1))
|
||||||
@@ -211,9 +211,10 @@ namespace GameRes.Formats.KiriKiri
|
|||||||
case 2:
|
case 2:
|
||||||
// MOV EAX, (Random() & 0x3ff)
|
// MOV EAX, (Random() & 0x3ff)
|
||||||
// MOV EAX, EncryptionControlBlock[EAX]
|
// MOV EAX, EncryptionControlBlock[EAX]
|
||||||
rc = program.Emit (CxByteCode.MOV_EAX_IMMED) // 0xbe
|
rc = program.EmitNop (5) // 0xbe
|
||||||
|
&& program.Emit (CxByteCode.MOV_EAX_IMMED, 2) // 0x8b 0x86
|
||||||
&& program.EmitUInt32 (program.GetRandom() & 0x3ff)
|
&& program.EmitUInt32 (program.GetRandom() & 0x3ff)
|
||||||
&& program.Emit (CxByteCode.MOV_EAX_INDIRECT, 6); // 0x8b 0x86
|
&& program.Emit (CxByteCode.MOV_EAX_INDIRECT, 0);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
rc = program.Emit (CxByteCode.MOV_EAX_EDI, 2); // 0x8b 0xc7
|
rc = program.Emit (CxByteCode.MOV_EAX_EDI, 2); // 0x8b 0xc7
|
||||||
|
|||||||
Reference in New Issue
Block a user