update minitool3

This commit is contained in:
Chenx221 2025-01-01 17:35:02 +08:00
parent deaeab63b6
commit 53c9a03e36
Signed by: chenx221
GPG Key ID: D7A9EC07024C3021
5 changed files with 140 additions and 0 deletions

View File

@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "minitool1", "minitool1\mini
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "minitool2", "minitool2\minitool2.csproj", "{0FE5458A-A3A9-4D0B-A540-BF4A7CD3F7EA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "minitool3", "minitool3\minitool3.csproj", "{F6B38C11-304C-4FF8-BB74-D4CA0E515189}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -21,6 +23,10 @@ Global
{0FE5458A-A3A9-4D0B-A540-BF4A7CD3F7EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FE5458A-A3A9-4D0B-A540-BF4A7CD3F7EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FE5458A-A3A9-4D0B-A540-BF4A7CD3F7EA}.Release|Any CPU.Build.0 = Release|Any CPU
{F6B38C11-304C-4FF8-BB74-D4CA0E515189}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6B38C11-304C-4FF8-BB74-D4CA0E515189}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6B38C11-304C-4FF8-BB74-D4CA0E515189}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6B38C11-304C-4FF8-BB74-D4CA0E515189}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

103
minitool3/Program.cs Normal file
View File

@ -0,0 +1,103 @@
using System.Security.Cryptography;
using System.Text;
namespace minitool3
{
internal class Program
{
private const string DefaultSecretKey = "dB3aqcLtAmBd";
private const string DefaultKeyBase = "RWd3NusabzRc";
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("Please drag and drop one or more files onto this program.");
Console.ReadKey();
return;
}
Byte[] SHA256Byte = GenerateSHA256Byte(DefaultKeyBase, Encoding.UTF8.GetBytes(DefaultSecretKey));
foreach (var filePath in args)
{
if (File.Exists(filePath))
{
Console.WriteLine($"Processing file: {filePath}");
try
{
byte[] fileData = File.ReadAllBytes(filePath);
if (fileData.Length < 20) // 4 bytes (size) + 16 bytes (IV)
{
Console.WriteLine("The file does not contain enough data for size and IV.");
continue;
}
// Read the encrypted data & iv size (4 bytes)
int encryptedSize = BitConverter.ToInt32(fileData, 0);
if (encryptedSize <= 0 || encryptedSize > fileData.Length - 4)
{
Console.WriteLine("Invalid encrypted data size.");
continue;
}
encryptedSize -= 16;
// Read the IV (16 bytes)
byte[] iv = new byte[16];
Array.Copy(fileData, 4, iv, 0, 16);
// Read the ciphertext based on the size
byte[] cipherText = new byte[encryptedSize];
Array.Copy(fileData, 20, cipherText, 0, encryptedSize);
byte[] decryptedData = Decrypt(cipherText, SHA256Byte, iv);
string outputDir = Path.Combine(Path.GetDirectoryName(filePath)!, "dec");
Directory.CreateDirectory(outputDir); // Ensure the directory exists
string outputFilePath = Path.Combine(outputDir, Path.GetFileNameWithoutExtension(filePath) + ".assets");
File.WriteAllBytes(outputFilePath, decryptedData);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
else
{
Console.WriteLine($"File not found: {filePath}");
}
}
Console.WriteLine("Processing complete. Press any key to exit.");
Console.ReadKey();
}
public static byte[] GenerateSHA256Byte(string data, byte[] key)
{
using var hmac = new HMACSHA256(key);
return hmac.ComputeHash(Encoding.UTF8.GetBytes(data));
}
public static byte[] Decrypt(byte[] cipherText, byte[] sha256Key, byte[] iv)
{
using var aes = Aes.Create();
aes.Key = sha256Key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using var decryptor = aes.CreateDecryptor();
using var memoryStream = new MemoryStream(cipherText);
using var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] decryptedData = new byte[cipherText.Length];
int bytesRead = cryptoStream.Read(decryptedData, 0, decryptedData.Length);
return [.. decryptedData];
}
}
}

View File

@ -0,0 +1,8 @@
{
"profiles": {
"minitool3": {
"commandName": "Project",
"commandLineArgs": "\"G:\\source\\minitool1\\minitool3\\bin\\Debug\\net8.0\\bg_avg_003.jp.encrypted\""
}
}
}

View File

@ -0,0 +1,13 @@
*.encrypted文件结构
(D)
4B: enc data + iv size
16B: iv
{data size}B: enc data(AES256 encryption)
SecretKey = "dB3aqcLtAmBd"
KeyBase = "RWd3NusabzRc"
hmac = new HMACSHA256(Encoding.UTF8.GetBytes(SecretKey))
AESKey = hmac.ComputeHash(Encoding.UTF8.GetBytes(KeyBase))
iv = 看顶上

View File

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>