mirror of
https://github.com/JDM170/model_coder
synced 2025-12-10 05:57:19 +07:00
Partial file coding (C#)
Signed-off-by: JDM170 <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
bin/
|
||||
obj/
|
||||
74
Program.cs
Normal file
74
Program.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Created by SharpDevelop.
|
||||
* User: JDM17
|
||||
* Date: 23.09.2020
|
||||
* Time: 17:48
|
||||
*
|
||||
* To change this template use Tools | Options | Coding | Edit Standard Headers.
|
||||
*/
|
||||
using System;
|
||||
using System.IO;
|
||||
using Tea;
|
||||
using Utils;
|
||||
|
||||
namespace ModelCoder
|
||||
{
|
||||
class Program
|
||||
{
|
||||
private static readonly int encodeSize = 3000;
|
||||
|
||||
private static bool encodeFile(string path, uint[] key)
|
||||
{
|
||||
Console.WriteLine("[OUTPUT] Reading: " + path);
|
||||
byte[] file_bytes;
|
||||
try {
|
||||
file_bytes = File.ReadAllBytes(path);
|
||||
} catch {
|
||||
Console.WriteLine("[OUTPUT] File '" + path + "' not found");
|
||||
return false;
|
||||
}
|
||||
|
||||
ITeaCoding tea = new TeaCoding();
|
||||
var block = new uint[2];
|
||||
for (uint i = 0; i < encodeSize; i += 2) {
|
||||
Console.WriteLine(i + " start iteration");
|
||||
block[0] = file_bytes[i];
|
||||
block[1] = file_bytes[i + 1];
|
||||
Console.WriteLine(i + " start encoding");
|
||||
tea.code(block, key);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
[STAThread]
|
||||
static void Main(string[] args)
|
||||
{
|
||||
IUtil util = new Util();
|
||||
|
||||
string fpath;
|
||||
if (args.Length > 0) {
|
||||
fpath = args[0];
|
||||
} else {
|
||||
Console.WriteLine("[OUTPUT] You can open file(s) with this program");
|
||||
Console.WriteLine("[OUTPUT] Or drag'n'drop on it");
|
||||
Console.Write("[INPUT] Enter filename (without spaces): ");
|
||||
fpath = Console.ReadLine();
|
||||
}
|
||||
|
||||
Console.Write("[INPUT] Enter key: ");
|
||||
uint[] uKey = util.ConvertKey(Console.ReadLine());
|
||||
|
||||
Console.WriteLine("[OUTPUT] Reading file(s)...");
|
||||
if (args.Length > 1) {
|
||||
foreach (string i in args)
|
||||
encodeFile(i, uKey);
|
||||
} else {
|
||||
encodeFile(fpath, uKey);
|
||||
}
|
||||
|
||||
Console.Write("Press any key to continue . . . ");
|
||||
Console.ReadKey(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
27
Properties/AssemblyInfo.cs
Normal file
27
Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
#region Using directives
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
#endregion
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle ("model_coder")]
|
||||
[assembly: AssemblyDescription ("")]
|
||||
[assembly: AssemblyConfiguration ("")]
|
||||
[assembly: AssemblyCompany ("")]
|
||||
[assembly: AssemblyProduct ("model_coder")]
|
||||
[assembly: AssemblyCopyright ("Copyright 2020")]
|
||||
[assembly: AssemblyTrademark ("")]
|
||||
[assembly: AssemblyCulture ("")]
|
||||
// This sets the default COM visibility of types in the assembly to invisible.
|
||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||
[assembly: ComVisible (false)]
|
||||
// The assembly version has following format :
|
||||
//
|
||||
// Major.Minor.Build.Revision
|
||||
//
|
||||
// You can specify all the values or you can use the default the Revision and
|
||||
// Build Numbers by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion ("1.0.*")]
|
||||
1
README.md
Normal file
1
README.md
Normal file
@@ -0,0 +1 @@
|
||||
#### Thanks [Toliak](https://github.com/Toliak) for his [MTA-TEA-Encoder](https://github.com/Toliak/MTA-TEA-Encoder)
|
||||
6
app.config
Normal file
6
app.config
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
|
||||
</startup>
|
||||
</configuration>
|
||||
1
model_coder.Settings
Normal file
1
model_coder.Settings
Normal file
@@ -0,0 +1 @@
|
||||
<OpenCoverSettings />
|
||||
69
model_coder.csproj
Normal file
69
model_coder.csproj
Normal file
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{794C3722-03FF-400A-A0EA-DD5FD78AE01D}</ProjectGuid>
|
||||
<ProjectTypeGuids>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>model_coder</RootNamespace>
|
||||
<AssemblyName>model_coder</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<NoWin32Manifest>False</NoWin32Manifest>
|
||||
<SignAssembly>False</SignAssembly>
|
||||
<DelaySign>False</DelaySign>
|
||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
|
||||
<NoStdLib>False</NoStdLib>
|
||||
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
|
||||
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<RunCodeAnalysis>False</RunCodeAnalysis>
|
||||
<SourceAnalysisOverrideSettingsFile>C:\Users\JDM17\AppData\Roaming\ICSharpCode\SharpDevelop5\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<BaseAddress>4194304</BaseAddress>
|
||||
<RegisterForComInterop>False</RegisterForComInterop>
|
||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DebugSymbols>True</DebugSymbols>
|
||||
<DebugType>Full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
|
||||
<StartAction>Project</StartAction>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DebugSymbols>False</DebugSymbols>
|
||||
<DebugType>None</DebugType>
|
||||
<Optimize>True</Optimize>
|
||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.CSharp">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="utils.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="tea.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
2
model_coder.sdsettings
Normal file
2
model_coder.sdsettings
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Properties />
|
||||
18
model_coder.sln
Normal file
18
model_coder.sln
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
# SharpDevelop 5.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "model_coder", "model_coder.csproj", "{E7DCB830-5ACF-4B60-A14A-525047F074C0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{E7DCB830-5ACF-4B60-A14A-525047F074C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E7DCB830-5ACF-4B60-A14A-525047F074C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E7DCB830-5ACF-4B60-A14A-525047F074C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E7DCB830-5ACF-4B60-A14A-525047F074C0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
77
tea.cs
Normal file
77
tea.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Created by SharpDevelop.
|
||||
* User: JDM17
|
||||
* Date: 23.09.2020
|
||||
* Time: 17:50
|
||||
*
|
||||
* To change this template use Tools | Options | Coding | Edit Standard Headers.
|
||||
*/
|
||||
using System;
|
||||
|
||||
namespace Tea
|
||||
{
|
||||
public interface ITeaCoding
|
||||
{
|
||||
void code(uint[] v, uint[] k);
|
||||
//void decode(uint[] v, uint[] k);
|
||||
}
|
||||
public partial class TeaCoding: ITeaCoding
|
||||
{
|
||||
private readonly uint c_delta = 0x9E3779B9;
|
||||
|
||||
/*
|
||||
public void encode(uint[] v, uint[] k) {
|
||||
uint v0 = v[0], v1 = v[1];
|
||||
uint sum = 0;
|
||||
//for(int i = 0; i < 32; i++) {
|
||||
for(uint i = 32; i > 0; i--) {
|
||||
//v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
|
||||
//sum += c_delta;
|
||||
//v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]);
|
||||
|
||||
//sum += c_delta;
|
||||
//v0 += (v1 << 4) + k[0] ^ v1 + sum ^ (v1 >> 5) + k[1];
|
||||
//v1 += (v0 << 4) + k[2] ^ v0 + sum ^ (v0 >> 5) + k[3];
|
||||
|
||||
v0 += (v1 << 4 ^ v1 >> 5) + v1 ^ sum + k[sum & 3];
|
||||
sum += c_delta;
|
||||
v1 += (v0 << 4 ^ v0 >> 5) + v0 ^ sum + k[sum >> 11 & 3];
|
||||
}
|
||||
v[0] = v0;
|
||||
v[1] = v1;
|
||||
}
|
||||
*/
|
||||
public void code(uint[] v, uint[] k)
|
||||
{
|
||||
uint y = v[0];
|
||||
uint z = v[1];
|
||||
uint sum = 0;
|
||||
uint n = 32;
|
||||
|
||||
while (n-- > 0)
|
||||
{
|
||||
y += (z << 4 ^ z >> 5) + z ^ sum + k[sum & 3];
|
||||
sum += c_delta;
|
||||
z += (y << 4 ^ y >> 5) + y ^ sum + k[sum >> 11 & 3];
|
||||
}
|
||||
|
||||
v[0] = y;
|
||||
v[1] = z;
|
||||
}
|
||||
|
||||
/*
|
||||
private readonly uint c_sum = 0xC6EF3720;
|
||||
public void decode(uint[] v, uint[] k) {
|
||||
uint v0 = v[0], v1 = v[1];
|
||||
uint sum = c_sum;
|
||||
for (int i = 0; i < 32; i++) {
|
||||
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]);
|
||||
sum -= c_delta;
|
||||
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
|
||||
}
|
||||
v[0] = v0;
|
||||
v[1] = v1;
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
32
test/partial_file_decode.lua
Normal file
32
test/partial_file_decode.lua
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
local key = "1234" -- Model key
|
||||
local fileName = "partial_file_encode" -- File name
|
||||
local encodeSize = 36000 -- Encoding size (3000*12)
|
||||
|
||||
-- Reading crypted file
|
||||
local file = fileOpen(fileName .. ".enc")
|
||||
local encodedFileData = fileRead(file, encodeSize)
|
||||
fileSetPos(file, encodeSize)
|
||||
local originalFileData = fileRead(file, fileGetSize(file) - encodeSize)
|
||||
fileClose(file)
|
||||
|
||||
-- Decoding file data
|
||||
local block = ""
|
||||
local decoded = ""
|
||||
local encodedKey = string.sub(utf8.lower(md5(key)), 1, 16)
|
||||
for i = 1, encodeSize, 12 do
|
||||
block = teaDecode(string.sub(encodedFileData, i, i + 12), encodedKey)
|
||||
decoded = decoded .. block
|
||||
end
|
||||
|
||||
-- Writing uncrypted data to clean file
|
||||
file = fileCreate(fileName .. ".dec")
|
||||
fileWrite(file, decoded .. originalFileData)
|
||||
fileClose(file)
|
||||
|
||||
originalFileData = nil
|
||||
encodedFileData = nil
|
||||
encodedKey = nil
|
||||
decoded = nil
|
||||
block = nil
|
||||
file = nil
|
||||
BIN
test/partial_file_encode
Normal file
BIN
test/partial_file_encode
Normal file
Binary file not shown.
2474
test/partial_file_encode.enc
Normal file
2474
test/partial_file_encode.enc
Normal file
File diff suppressed because one or more lines are too long
60
utils.cs
Normal file
60
utils.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Created by SharpDevelop.
|
||||
* User: JDM17
|
||||
* Date: 23.09.2020
|
||||
* Time: 20:59
|
||||
*
|
||||
* To change this template use Tools | Options | Coding | Edit Standard Headers.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Utils
|
||||
{
|
||||
public interface IUtil
|
||||
{
|
||||
uint[] ConvertKey(string input);
|
||||
uint ConvertStringToUInt(string input);
|
||||
string ConvertUIntToString(uint input);
|
||||
}
|
||||
public partial class Util: IUtil
|
||||
{
|
||||
public uint[] ConvertKey(string input)
|
||||
{
|
||||
// MD5 Hashing
|
||||
var md5 = MD5.Create();
|
||||
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
|
||||
byte[] hashBytes = md5.ComputeHash(inputBytes);
|
||||
var sb = new StringBuilder();
|
||||
for (int i = 0; i < hashBytes.Length; i++)
|
||||
sb.Append(hashBytes[i].ToString("X2"));
|
||||
// Converting to uint[]
|
||||
string key = sb.ToString().ToLower().Substring(0, 16);
|
||||
var formattedKey = new uint[4];
|
||||
int j = 0;
|
||||
for (int i = 0; i < key.Length; i += 4)
|
||||
formattedKey[j++] = ConvertStringToUInt(key.Substring(i, 4));
|
||||
return formattedKey;
|
||||
}
|
||||
public uint ConvertStringToUInt(string input)
|
||||
{
|
||||
uint output;
|
||||
output = ((uint)input[0]);
|
||||
output += ((uint)input[1] << 8);
|
||||
output += ((uint)input[2] << 16);
|
||||
output += ((uint)input[3] << 24);
|
||||
return output;
|
||||
}
|
||||
public string ConvertUIntToString(uint input)
|
||||
{
|
||||
var output = new StringBuilder();
|
||||
output.Append((char)((input & 0xFF)));
|
||||
output.Append((char)((input >> 8) & 0xFF));
|
||||
output.Append((char)((input >> 16) & 0xFF));
|
||||
output.Append((char)((input >> 24) & 0xFF));
|
||||
return output.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user