mirror of
https://github.com/atom0s/Steamless.git
synced 2024-12-28 23:37:41 +01:00
Added support for an unknown variant of v2.
This commit is contained in:
parent
aed8a86020
commit
a0f856a050
3 changed files with 34 additions and 12 deletions
|
@ -134,6 +134,7 @@ namespace Steamless.Unpacker.Variant20.x86
|
||||||
this.PayloadData = null;
|
this.PayloadData = null;
|
||||||
this.SteamDrmpData = null;
|
this.SteamDrmpData = null;
|
||||||
this.SteamDrmpOffsets = new List<int>();
|
this.SteamDrmpOffsets = new List<int>();
|
||||||
|
this.UseFallbackDrmpOffsets = false;
|
||||||
this.XorKey = 0;
|
this.XorKey = 0;
|
||||||
|
|
||||||
// Parse the file..
|
// Parse the file..
|
||||||
|
@ -308,7 +309,15 @@ namespace Steamless.Unpacker.Variant20.x86
|
||||||
// Fall-back pattern scan for certain files that fail with the above pattern..
|
// Fall-back pattern scan for certain files that fail with the above pattern..
|
||||||
drmpOffset = Pe32Helpers.FindPattern(this.SteamDrmpData, "8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B");
|
drmpOffset = Pe32Helpers.FindPattern(this.SteamDrmpData, "8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B");
|
||||||
if (drmpOffset == 0)
|
if (drmpOffset == 0)
|
||||||
return false;
|
{
|
||||||
|
// Fall-back pattern (2).. (Seen in some v2 variants.)
|
||||||
|
drmpOffset = Pe32Helpers.FindPattern(this.SteamDrmpData, "8B ?? ?? ?? ?? ?? 89 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? A3 ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? A3 ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? A3 ?? ?? ?? ?? 8B");
|
||||||
|
if (drmpOffset == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Use fallback offsets if this worked..
|
||||||
|
this.UseFallbackDrmpOffsets = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the block of data from the SteamDRMP.dll data..
|
// Copy the block of data from the SteamDRMP.dll data..
|
||||||
|
@ -581,17 +590,25 @@ namespace Steamless.Unpacker.Variant20.x86
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private List<int> GetSteamDrmpOffsets(byte[] data)
|
private List<int> GetSteamDrmpOffsets(byte[] data)
|
||||||
{
|
{
|
||||||
|
var offset0 = 2; // Flags
|
||||||
|
var offset1 = 14; // Steam App Id
|
||||||
|
var offset2 = this.UseFallbackDrmpOffsets ? 25 : 26; // OEP
|
||||||
|
var offset3 = this.UseFallbackDrmpOffsets ? 36 : 38; // Code Section Virtual Address
|
||||||
|
var offset4 = this.UseFallbackDrmpOffsets ? 47 : 50; // Code Section Virtual Size (Encrypted Size)
|
||||||
|
var offset5 = this.UseFallbackDrmpOffsets ? 61 : 62; // Code Section AES Key
|
||||||
|
var offset6 = this.UseFallbackDrmpOffsets ? 72 : 67; // Code Section AES Iv
|
||||||
|
|
||||||
var offsets = new List<int>
|
var offsets = new List<int>
|
||||||
{
|
{
|
||||||
BitConverter.ToInt32(data, 2), // .... 0 - Flags
|
BitConverter.ToInt32(data, offset0), // ... 0 - Flags
|
||||||
BitConverter.ToInt32(data, 14), // ... 1 - Steam App Id
|
BitConverter.ToInt32(data, offset1), // ... 1 - Steam App Id
|
||||||
BitConverter.ToInt32(data, 26), // ... 2 - OEP
|
BitConverter.ToInt32(data, offset2), // ... 2 - OEP
|
||||||
BitConverter.ToInt32(data, 38), // ... 3 - Code Section Virtual Address
|
BitConverter.ToInt32(data, offset3), // ... 3 - Code Section Virtual Address
|
||||||
BitConverter.ToInt32(data, 50), // ... 4 - Code Section Virtual Size (Encrypted Size)
|
BitConverter.ToInt32(data, offset4), // ... 4 - Code Section Virtual Size (Encrypted Size)
|
||||||
BitConverter.ToInt32(data, 62) // .... 5 - Code Section AES Key
|
BitConverter.ToInt32(data, offset5) // .... 5 - Code Section AES Key
|
||||||
};
|
};
|
||||||
|
|
||||||
var aesIvOffset = BitConverter.ToInt32(data, 67);
|
var aesIvOffset = BitConverter.ToInt32(data, offset6);
|
||||||
offsets.Add(aesIvOffset); // ................. 6 - Code Section AES Iv
|
offsets.Add(aesIvOffset); // ................. 6 - Code Section AES Iv
|
||||||
offsets.Add(aesIvOffset + 16); // ............ 7 - Code Section Stolen Bytes
|
offsets.Add(aesIvOffset + 16); // ............ 7 - Code Section Stolen Bytes
|
||||||
|
|
||||||
|
@ -633,6 +650,11 @@ namespace Steamless.Unpacker.Variant20.x86
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<int> SteamDrmpOffsets { get; set; }
|
public List<int> SteamDrmpOffsets { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets if the offsets should be read using fallback values.
|
||||||
|
/// </summary>
|
||||||
|
private bool UseFallbackDrmpOffsets { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the index of the code section.
|
/// Gets or sets the index of the code section.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -36,5 +36,5 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
[assembly: Guid("a40154cd-a0fd-4371-8099-ce277e0989af")]
|
[assembly: Guid("a40154cd-a0fd-4371-8099-ce277e0989af")]
|
||||||
[assembly: AssemblyVersion("1.0.0.4")]
|
[assembly: AssemblyVersion("1.0.0.5")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.4")]
|
[assembly: AssemblyFileVersion("1.0.0.5")]
|
|
@ -37,5 +37,5 @@ using System.Windows;
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
|
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
|
||||||
[assembly: AssemblyVersion("3.0.0.7")]
|
[assembly: AssemblyVersion("3.0.0.8")]
|
||||||
[assembly: AssemblyFileVersion("3.0.0.7")]
|
[assembly: AssemblyFileVersion("3.0.0.8")]
|
Loading…
Reference in a new issue