MU CheckSum Generator (c) S@nek[BoR]
MU CheckSum Generator v1.0.0.120 @ BoR Team
Developed by S@nek[BoR]
-
-
Quote:
# Name of: MU CheckSum Generator
# Version: 1.0.0.120
# Developed by: S@nek[BoR]
# Created date: 02.01.2011
# Last Update: 02.01.2011
# License: Free
# Language: English
# Operating System: Windows NT, XP, 2003, Vista, 2008
# Programming language: C#;
- Need:
Microsoft .NET Framework 4.0;
# Description: Program to generate the file "checksum.dat" on file "main.exe". Thanks "Deathway" for the initial algorithm.
-
-
Quote:
# Links for downloading programs from various Internet resources:
Re: MU CheckSum Generator (c) S@nek[BoR]
Re: MU CheckSum Generator (c) S@nek[BoR]
i never understood what is main checksum ..
can someone explain please ?
Re: MU CheckSum Generator (c) S@nek[BoR]
its a string of code main sends to gameserver and if it's wrong the client will be disconnected. this way you can prevent unwanted edits to main.exe
Re: MU CheckSum Generator (c) S@nek[BoR]
# Test results for 2-core: (Notebook)
Quote:
File 'MyMain.exe' is selected. (Size: 5,462 MByte)
The program uses '2' logical processors.
BoR v1.0.0.80: ~8,731 sec;
P4F v0.2: ~23 sec;
Deathway: ~16 sec;
# Stand:
Processor: Intel Mobile Core 2 Duo P7350;
Memory: 2x2048 MByte DDR2-800 CL-6;
# Test results for 4-core: (PC)
Quote:
File 'MyMain.exe' is selected. (Size: 5,462 MByte)
The program uses '4' logical processors.
BoR v1.0.0.80: ~7.713 sec;
P4F v0.2: ~57 sec;
Deathway: ~28 sec;
# Stand:
Processor: AMD Phenom II X4 945;
Memory: Team 2x2048 MByte DDR3-1600 CL-7;
# Download archive: BoR, P4F, Deathway and 2 main.exe
P.S. -> Waiting for comments and suggestions.
Re: MU CheckSum Generator (c) S@nek[BoR]
Hello serves to cualkier version of main bone I have a main 1.03.25w see. JPM. would serve me well.
Re: MU CheckSum Generator (c) S@nek[BoR]
I released same months ago... just without a GUI: http://forum.ragezone.com/f197/multi...erator-662748/
I cant load it with Reflector, do you have anything to hide? Jotti Virusscan finds "Gen:Trojan.Heur.RP.3y0aaiwTJ9k"
Re: MU CheckSum Generator (c) S@nek[BoR]
Re: MU CheckSum Generator (c) S@nek[BoR]
will this also
work on season 6 ?
Re: MU CheckSum Generator (c) S@nek[BoR]
Quote:
Originally Posted by
spezi
I have optimized and reworked the algorithm.
- And my program is based on an algorithm Deathway.
P.S. -> Program is protected with WinLicense v2.1.6.0 =)
Re: MU CheckSum Generator (c) S@nek[BoR]
I`we asked same question why pack with Winlicense if everybody knows algo of calculation and there is many many open source project like this..
i got paranoi to :D if packed app like this = something hide
Re: MU CheckSum Generator (c) S@nek[BoR]
Quote:
Originally Posted by
MuForum.Info
I have optimized and reworked the algorithm.
- And my program is based on an algorithm Deathway.
P.S. -> Program is protected with WinLicense v2.1.6.0 =)
who cares if your algorithm finishes in 2,7 instead of 2,9 seconds after optimizing? Using such protection is really a bad sign ;)
Re: MU CheckSum Generator (c) S@nek[BoR]
there is also additional information such a like: u need start programm then restart it and only then u got performance around 10-20ms better.. shore if we dont count time we wasted on restarting app.. xDDDDDDDDDDDdd
Re: MU CheckSum Generator (c) S@nek[BoR]
Quote:
Originally Posted by
MuForum.Info
I have optimized and reworked the algorithm.
- And my program is based on an algorithm Deathway.
P.S. -> Program is protected with WinLicense v2.1.6.0 =)
Yeah, but your app runs over a framework (.NET), so at the end, your optimization means less then nothing...
When I see one ASM coded generator or even in C++, than I will show my respect.
And... what about the protection ? The calculation algo is not a secreat at all ! :$:
Re: MU CheckSum Generator (c) S@nek[BoR]
Well, the first time publish their source code.
Code:
byte[] lpFileBuffer = null;
// ----
using (FileStream fs = new FileStream(FilePath, FileMode.Open))
{
lpFileBuffer = new byte[fs.Length];
// ----
fs.Read(lpFileBuffer, 0, lpFileBuffer.Length);
}
// ----
int iCoresCount = Environment.ProcessorCount;
// ----
uint uSize = (uint)lpFileBuffer.Length;
// ----
uint dwMaskLength = (uint)(uSize / 4);
int iMaskLength = (int)(uSize / 4);
// ----
g_Config.Mask = new uint[dwMaskLength];
// ----
Stopwatch sw = new Stopwatch();
sw.Start();
// ----
ParallelOptions po = new ParallelOptions();
// ----
po.MaxDegreeOfParallelism = Environment.ProcessorCount;
// ----
Parallel.For(0, iMaskLength, po, i =>
{
g_Config.Mask[i] = BitConverter.ToUInt32(lpFileBuffer, i * 4);
});
// ----
Parallel.For(0, 1024, po, (i, loopState) =>
{
if (g_Config.bShouldStop == false)
{
g_Config.csf.Checksums[i] = GetChecksum(lpFileBuffer, g_Config.Mask, dwMaskLength, (ushort)i);
}
else
{
loopState.Stop();
}
});
// ----
sw.Stop();
// ----
public uint GetChecksum(byte[] lpFileBuffer, uint[] Mask, uint dwMaskLength, ushort wChecksumKey)
{
uint dwResult = (uint)(wChecksumKey << 9);
// ----
uint dwKey = 0;
// ----
for (uint i = 0, j = 0; i < dwMaskLength; i++, j += 4)
{
dwKey = Mask[i];
// ----
switch (((j >> 2) + wChecksumKey) % 3)
{
case 0:
{
dwResult ^= dwKey;
}
break;
case 1:
{
dwResult += dwKey;
}
break;
case 2:
{
dwResult = (dwResult << (int)(dwKey % 11)) ^ dwKey;
}
break;
default: break;
}
// ----
dwResult ^= ((wChecksumKey + dwResult) >> (int)(((j >> 2) % 16) + 3));
}
// ----
return dwResult;
}