mirror of
https://github.com/atom0s/Steamless.git
synced 2024-12-28 23:37:41 +01:00
API: Add ToString overrides to the section entries to allow easier debugging.
Unpacker: v31.x64 - Remove code section size check. (Some virtualized files will have an empty code section.) Unpacker: v31.x64 - Allow empty code section files to still unpack by skipping decryption step.
This commit is contained in:
parent
5b02106fca
commit
f83d140ebf
3 changed files with 26 additions and 2 deletions
|
@ -367,6 +367,15 @@ namespace Steamless.API.PE32
|
||||||
/// Gets if this structure is valid for a PE file.
|
/// Gets if this structure is valid for a PE file.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsValid => this.SizeOfRawData != 0 && this.PointerToRawData != 0;
|
public bool IsValid => this.SizeOfRawData != 0 && this.PointerToRawData != 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the ToString handler to return the section name.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return this.SectionName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -363,6 +363,15 @@ namespace Steamless.API.PE64
|
||||||
/// Gets if this structure is valid for a PE file.
|
/// Gets if this structure is valid for a PE file.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsValid => this.SizeOfRawData != 0 && this.PointerToRawData != 0;
|
public bool IsValid => this.SizeOfRawData != 0 && this.PointerToRawData != 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the ToString handler to return the section name.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return this.SectionName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -358,8 +358,6 @@ namespace Steamless.Unpacker.Variant31.x64
|
||||||
|
|
||||||
// Find the code section..
|
// Find the code section..
|
||||||
var codeSection = this.File.GetOwnerSection(this.StubHeader.CodeSectionVirtualAddress);
|
var codeSection = this.File.GetOwnerSection(this.StubHeader.CodeSectionVirtualAddress);
|
||||||
if (codeSection.PointerToRawData == 0 || codeSection.SizeOfRawData == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Store the code sections index..
|
// Store the code sections index..
|
||||||
this.CodeSectionIndex = this.File.GetSectionIndex(codeSection);
|
this.CodeSectionIndex = this.File.GetSectionIndex(codeSection);
|
||||||
|
@ -389,6 +387,14 @@ namespace Steamless.Unpacker.Variant31.x64
|
||||||
this.Log($" --> {codeSection.SectionName} linked as main code section.", LogMessageType.Debug);
|
this.Log($" --> {codeSection.SectionName} linked as main code section.", LogMessageType.Debug);
|
||||||
this.Log($" --> {codeSection.SectionName} section is encrypted.", LogMessageType.Debug);
|
this.Log($" --> {codeSection.SectionName} section is encrypted.", LogMessageType.Debug);
|
||||||
|
|
||||||
|
if (codeSection.SizeOfRawData == 0)
|
||||||
|
{
|
||||||
|
this.Log($" --> {codeSection.SectionName} section is empty; skipping decryption.", LogMessageType.Debug);
|
||||||
|
|
||||||
|
this.CodeSectionData = new byte[] { };
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Obtain the code section data..
|
// Obtain the code section data..
|
||||||
var codeSectionData = new byte[codeSection.SizeOfRawData + this.StubHeader.CodeSectionStolenData.Length];
|
var codeSectionData = new byte[codeSection.SizeOfRawData + this.StubHeader.CodeSectionStolenData.Length];
|
||||||
Array.Copy(this.StubHeader.CodeSectionStolenData, (long)0, codeSectionData, 0, this.StubHeader.CodeSectionStolenData.Length);
|
Array.Copy(this.StubHeader.CodeSectionStolenData, (long)0, codeSectionData, 0, this.StubHeader.CodeSectionStolenData.Length);
|
||||||
|
|
Loading…
Reference in a new issue