[RELEASE][SRC] SkillData Encrypter

08/26/2017 04:08 Syloxx#1
Dear Community

Since I am currently working on an automatic "extract txt files from database and make everything patch ready" i came to the problem that there is no 100% working console skilldata encrytper.

Anyway, nothing special... took me a few minutes to develop thats why i simply release it here:

SRC: [Only registered and activated users can see links. Click Here To Register...]
Code:
using System;
using System.IO;

namespace srSkillEncrypter
{
    internal class Program
    {
        private static readonly byte[] HashTable1 = new byte[256]
        {
            0x07, 0x83, 0xBC, 0xEE, 0x4B, 0x79, 0x19, 0xB6, 0x2A, 0x53, 0x4F, 0x3A, 0xCF, 0x71, 0xE5, 0x3C, 0x2D, 0x18,
            0x14, 0xCB, 0xB6, 0xBC, 0xAA, 0x9A, 0x31, 0x42, 0x3A, 0x13, 0x42, 0xC9, 0x63, 0xFC, 0x54, 0x1D, 0xF2, 0xC1,
            0x8A, 0xDD, 0x1C, 0xB3, 0x52, 0xEA, 0x9B, 0xD7, 0xC4, 0xBA, 0xF8, 0x12, 0x74, 0x92, 0x30, 0xC9, 0xD6, 0x56,
            0x15, 0x52, 0x53, 0x60, 0x11, 0x33, 0xC5, 0x9D, 0x30, 0x9A, 0xE5, 0xD2, 0x93, 0x99, 0xEB, 0xCF, 0xAA, 0x79,
            0xE3, 0x78, 0x6A, 0xB9, 0x02, 0xE0, 0xCE, 0x8E, 0xF3, 0x63, 0x5A, 0x73, 0x74, 0xF3, 0x72, 0xAA, 0x2C, 0x9F,
            0xBB, 0x33, 0x91, 0xDE, 0x5F, 0x91, 0x66, 0x48, 0xD1, 0x7A, 0xFD, 0x3F, 0x91, 0x3E, 0x5D, 0x22, 0xEC, 0xEF,
            0x7C, 0xA5, 0x43, 0xC0, 0x1D, 0x4F, 0x60, 0x7F, 0x0B, 0x4A, 0x4B, 0x2A, 0x43, 0x06, 0x46, 0x14, 0x45, 0xD0,
            0xC5, 0x83, 0x92, 0xE4, 0x16, 0xD0, 0xA3, 0xA1, 0x13, 0xDA, 0xD1, 0x51, 0x07, 0xEB, 0x7D, 0xCE, 0xA5, 0xDB,
            0x78, 0xE0, 0xC1, 0x0B, 0xE5, 0x8E, 0x1C, 0x7C, 0xB4, 0xDF, 0xED, 0xB8, 0x53, 0xBA, 0x2C, 0xB5, 0xBB, 0x56,
            0xFB, 0x68, 0x95, 0x6E, 0x65, 0x00, 0x60, 0xBA, 0xE3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xB5,
            0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x3F, 0x41, 0x56, 0x43, 0x45, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74,
            0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xBB, 0xE3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,
        };

        public static readonly byte[] HashTable2 = new byte[496]
        {
            0x0D, 0x05, 0x90, 0x41, 0xF9, 0xD0, 0x65, 0xBF, 0xF9, 0x0B, 0x15, 0x93, 0x80, 0xFB, 0x01, 0x02, 0xB6, 0x08,
            0xC4, 0x3C, 0xC1, 0x49, 0x94, 0x4D, 0xCE, 0x1D, 0xFD, 0x69, 0xEA, 0x19, 0xC9, 0x57, 0x9C, 0x4D, 0x84, 0x62,
            0xE3, 0x67, 0xF9, 0x87, 0xF4, 0xF9, 0x93, 0xDA, 0xE5, 0x15, 0xF1, 0x4C, 0xA4, 0xEC, 0xBC, 0xCF, 0xDD, 0xB3,
            0x6F, 0x04, 0x3D, 0x70, 0x1C, 0x74, 0x21, 0x6B, 0x00, 0x71, 0x31, 0x7F, 0x54, 0xB3, 0x72, 0x6C, 0xAA, 0x42,
            0xC1, 0x78, 0x61, 0x3E, 0xD5, 0xF2, 0xE1, 0x27, 0x36, 0x71, 0x3A, 0x25, 0x36, 0x57, 0xD1, 0xF8, 0x70, 0x86,
            0xBD, 0x0E, 0x58, 0xB3, 0x76, 0x6D, 0xC3, 0x50, 0xF6, 0x6C, 0xA0, 0x10, 0x06, 0x64, 0xA2, 0xD6, 0x2C, 0xD4,
            0x27, 0x30, 0xA5, 0x36, 0x1C, 0x1E, 0x3E, 0x58, 0x9D, 0x59, 0x76, 0x9D, 0xA7, 0x42, 0x5A, 0xF0, 0x00, 0xBC,
            0x69, 0x31, 0x40, 0x1E, 0xFA, 0x09, 0x1D, 0xE7, 0xEE, 0xE4, 0x54, 0x89, 0x36, 0x7C, 0x67, 0xC8, 0x65, 0x22,
            0x7E, 0xA3, 0x60, 0x44, 0x1E, 0xBC, 0x68, 0x6F, 0x15, 0x2A, 0xFD, 0x9D, 0x3F, 0x36, 0x6B, 0x28, 0x06, 0x67,
            0xFE, 0xC6, 0x49, 0x6B, 0x9B, 0x3F, 0x80, 0x2A, 0xD2, 0xD4, 0xD3, 0x20, 0x1B, 0x96, 0xF4, 0xD2, 0xCA, 0x8C,
            0x74, 0xEE, 0x0B, 0x6A, 0xE1, 0xE9, 0xC6, 0xD2, 0x6E, 0x33, 0x63, 0xC0, 0xE9, 0xD0, 0x37, 0xA9, 0x3C, 0xF7,
            0x18, 0xF2, 0x4A, 0x74, 0xEC, 0x41, 0x61, 0x7A, 0x19, 0x47, 0x8F, 0xA0, 0xBB, 0x94, 0x8F, 0x3D, 0x11, 0x11,
            0x26, 0xCF, 0x69, 0x18, 0x1B, 0x2C, 0x87, 0x6D, 0xB3, 0x22, 0x6C, 0x78, 0x41, 0xCC, 0xC2, 0x84, 0xC5, 0xCB,
            0x01, 0x6A, 0x37, 0x00, 0x01, 0x65, 0x4F, 0xA7, 0x85, 0x85, 0x15, 0x59, 0x05, 0x67, 0xF2, 0x4F, 0xAB, 0xB7,
            0x88, 0xFA, 0x69, 0x24, 0x9E, 0xC6, 0x7B, 0x3F, 0xD5, 0x0E, 0x4D, 0x7B, 0xFB, 0xB1, 0x21, 0x3C, 0xB0, 0xC0,
            0xCB, 0x2C, 0xAA, 0x26, 0x8D, 0xCC, 0xDD, 0xDA, 0xC1, 0xF8, 0xCA, 0x7F, 0x6A, 0x3F, 0x2A, 0x61, 0xE7, 0x60,
            0x5C, 0xCE, 0xD3, 0x4C, 0xAC, 0x45, 0x40, 0x62, 0xEA, 0x51, 0xF1, 0x66, 0x5D, 0x2C, 0x45, 0xD6, 0x8B, 0x7D,
            0xCE, 0x9C, 0xF5, 0xBB, 0xF7, 0x52, 0x24, 0x1A, 0x13, 0x02, 0x2B, 0x00, 0xBB, 0xA1, 0x8F, 0x6E, 0x7A, 0x33,
            0xAD, 0x5F, 0xF4, 0x4A, 0x82, 0x76, 0xAB, 0xDE, 0x80, 0x98, 0x8B, 0x26, 0x4F, 0x33, 0xD8, 0x68, 0x1E, 0xD9,
            0xAE, 0x06, 0x6B, 0x7E, 0xA9, 0x95, 0x67, 0x60, 0xEB, 0xE8, 0xD0, 0x7D, 0x07, 0x4B, 0xF1, 0xAA, 0x9A, 0xC5,
            0x29, 0x93, 0x9D, 0x5C, 0x92, 0x3F, 0x15, 0xDE, 0x48, 0xF1, 0xCA, 0xEA, 0xC9, 0x78, 0x3C, 0x28, 0x7E, 0xB0,
            0x46, 0xD3, 0x71, 0x6C, 0xD7, 0xBD, 0x2C, 0xF7, 0x25, 0x2F, 0xC7, 0xDD, 0xB4, 0x6D, 0x35, 0xBB, 0xA7, 0xDA,
            0x3E, 0x3D, 0xA7, 0xCA, 0xBD, 0x87, 0xDD, 0x9F, 0x22, 0x3D, 0x50, 0xD2, 0x30, 0xD5, 0x14, 0x5B, 0x8F, 0xF4,
            0xAF, 0xAA, 0xA0, 0xFC, 0x17, 0x3D, 0x33, 0x10, 0x99, 0xDC, 0x76, 0xA9, 0x40, 0x1B, 0x64, 0x14, 0xDF, 0x35,
            0x68, 0x66, 0x5B, 0x49, 0x05, 0x33, 0x68, 0x26, 0xC8, 0xBA, 0xD1, 0x8D, 0x39, 0x2B, 0xFB, 0x3E, 0x24, 0x52,
            0x2F, 0x9A, 0x69, 0xBC, 0xF2, 0xB2, 0xAC, 0xB8, 0xEF, 0xA1, 0x17, 0x29, 0x2D, 0xEE, 0xF5, 0x23, 0x21, 0xEC,
            0x81, 0xC7, 0x5B, 0xC0, 0x82, 0xCC, 0xD2, 0x91, 0x9D, 0x29, 0x93, 0x0C, 0x9D, 0x5D, 0x57, 0xAD, 0xD4, 0xC6,
            0x40, 0x93, 0x8D, 0xE9, 0xD3, 0x35, 0x9D, 0xC6, 0xD3, 0x00,
        };

        public static readonly byte[] encryptFooter = new byte[22]
        {
            0x0D, 0x00, 0x0A, 0x00, 0x2F, 0x00, 0x2F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x72, 0x00, 0x79, 0x00,
            0x70, 0x00, 0x74, 0x00,
        };
        
        public static void Main(string[] args)
        {
            try
            {
                if (args.Length == 1)
                {
                    if (File.Exists(args[0]))
                    {

                        bool isEncrypted = false;
                        uint blowfishKey = 0x8C1F;
                        byte[] fileBuffer = File.ReadAllBytes(args[0]);

                        if (fileBuffer[0] == 0xE2 || fileBuffer[1] == 0xB0)
                        {
                            isEncrypted = true;
                        }

                        if (isEncrypted)
                        {
                            byte[] memoryBuffer = new byte[fileBuffer.Length - 22];

                            for (uint i = 0; i < fileBuffer.Length - 23; i++)
                            {
                                int buff = HashTable1[blowfishKey % 0xA7] - HashTable2[blowfishKey % 0x1EF];
                                blowfishKey++;
                                fileBuffer[i] += (byte) buff;
                                memoryBuffer[i] = fileBuffer[i];
                            }

                            File.WriteAllBytes(Path.GetDirectoryName(args[0]) + "\\" +
                                               Path.GetFileNameWithoutExtension(args[0]).Replace("enc", "") +
                                               Path.GetExtension(args[0]), memoryBuffer);
                        }
                        else
                        {
                            byte[] memoryBuffer = new byte[fileBuffer.Length + 22];

                            for (uint i = 0; i < fileBuffer.Length; i++)
                            {
                                int buff = HashTable1[blowfishKey % 0xA7] - HashTable2[blowfishKey % 0x1EF];
                                blowfishKey++;
                                fileBuffer[i] -= (byte) buff;
                                memoryBuffer[i] = fileBuffer[i];
                            }

                            for (uint i = 0; i < encryptFooter.Length - 1; i++)
                            {
                                memoryBuffer[fileBuffer.Length + i] = encryptFooter[i];
                            }

                            File.WriteAllBytes(Path.GetDirectoryName(args[0]) + "\\" +
                                               Path.GetFileNameWithoutExtension(args[0]) + "enc" +
                                               Path.GetExtension(args[0]), memoryBuffer);
                        }
                    }
                    else
                    {
                        Console.WriteLine("FILE DOES NOT EXISTS!");
                    }
                }
                else
                {
                    Console.WriteLine("INCORRECT SYNTAX!");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
    }
}
Thanks to superkhung[at]vnsecurity.net for his SRODecrypt and his SRC so I didnt had to reverse engineer that by my self

-Syloxx
08/27/2017 00:34 KingDollar#2
this was released 4 years ago ?
[Only registered and activated users can see links. Click Here To Register...]
08/27/2017 01:49 blapanda#3
Yes it was. And there is no reason re-releasing it and taking the credits for it.

Also, being butthurt and calling a Mod for cleaning up an entire topic because of those "oh so insulting" comments, but removing the neutral ones, too?

You are getting quite whiny, Gollum.
08/27/2017 05:54 B1Q#4
Anyway, nothing special... i cry when someone criticizes me.

funny how they do not allow you to link other forums but you can post pictures from that same exact forum. RULES
08/27/2017 11:02 Syloxx#5
Quote:
Originally Posted by KingDollar View Post
this was released 4 years ago ?
[Only registered and activated users can see links. Click Here To Register...]
didn't knew there is a c# class for that neither do I know if it works without crashing, so I simply made one by my self simple as that.

How I said, my plan was to do "a automatic extract everything from DB" *.bat and make it ready to patch without any step in between and this application is necessary to do that.

Quote:
Originally Posted by blapanda View Post
Yes it was. And there is no reason re-releasing it and taking the credits for it.

Also, being butthurt and calling a Mod for cleaning up an entire topic because of those "oh so insulting" comments, but removing the neutral ones, too?

You are getting quite whiny, Gollum.
1st of all, I didn't took the credits and 2nd I didn't even called a mod probably he took the initiative to do so. (didn't even checked my thread since then don't even know that it has been cleaned)

So please if you have no clue just shut up ok? ;)
08/27/2017 15:07 blapanda#6
Quote:
Originally Posted by Syloxx View Post
... 1st of all, I didn't took the credits ...

So please if you have no clue just shut up ok? ;)
Yea, right... I wonder, how often you got dropped as a baby.
You don't even comprehend your own thread structure and recalling a credit claim. You are a hopeless case.