Skip to content

Commit 2a9d9e0

Browse files
committed
Removed remote submodles, added KMS support & bug fixes
- Added KMS (1.2.65) support assuming your MapleLib has the keys for it - Fixed 'Setup/Others' tab not loading data for the 'Name' column - Added numeric input box for specifying MapleStory version - Added MessageBox feedback after BIN save completion
1 parent a23cf3f commit 2a9d9e0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+11312
-169
lines changed

.gitmodules

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
[submodule "MapleLib"]
2-
path = MapleLib
3-
url = https://github.com/haha01haha01/MapleLib
1+
[submodule "NAudio"]
2+
path = NAudio
3+
url = https://github.com/naudio/NAudio.git

MapleLib

Lines changed: 0 additions & 1 deletion
This file was deleted.

MapleLib/Helpers/ErrorLogger.cs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/* MapleLib - A general-purpose MapleStory library
2+
* Copyright (C) 2009, 2010, 2015 Snow and haha01haha01
3+
4+
* This program is free software: you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation, either version 3 of the License, or
7+
(at your option) any later version.
8+
9+
* This program is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
GNU General Public License for more details.
13+
14+
* You should have received a copy of the GNU General Public License
15+
along with this program. If not, see <http://www.gnu.org/licenses/>.*/
16+
17+
using System;
18+
using System.Collections.Generic;
19+
using System.IO;
20+
using System.Linq;
21+
using System.Text;
22+
23+
namespace MapleLib.Helpers
24+
{
25+
public static class ErrorLogger
26+
{
27+
private static List<Error> errorList = new List<Error>();
28+
public static void Log(ErrorLevel level, string message)
29+
{
30+
errorList.Add(new Error(level, message));
31+
}
32+
33+
public static bool ErrorsPresent()
34+
{
35+
return errorList.Count > 0;
36+
}
37+
38+
public static void ClearErrors()
39+
{
40+
errorList.Clear();
41+
}
42+
43+
public static void SaveToFile(string filename)
44+
{
45+
using (StreamWriter sw = new StreamWriter(File.Open(filename, FileMode.Append, FileAccess.Write, FileShare.Read)))
46+
{
47+
sw.WriteLine("Starting error log on " + DateTime.Today.ToShortDateString());
48+
foreach (Error e in errorList)
49+
{
50+
sw.WriteLine(e.level.ToString() + ":" + e.message);
51+
}
52+
sw.WriteLine();
53+
}
54+
}
55+
}
56+
57+
public class Error
58+
{
59+
internal ErrorLevel level;
60+
internal string message;
61+
62+
internal Error(ErrorLevel level, string message)
63+
{
64+
this.level = level;
65+
this.message = message;
66+
}
67+
}
68+
69+
public enum ErrorLevel
70+
{
71+
MissingFeature,
72+
IncorrectStructure,
73+
Critical,
74+
Crash
75+
}
76+
}

MapleLib/LICENSE

Lines changed: 619 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/* MapleLib - A general-purpose MapleStory library
2+
* Copyright (C) 2009, 2010, 2015 Snow and haha01haha01
3+
4+
* This program is free software: you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation, either version 3 of the License, or
7+
(at your option) any later version.
8+
9+
* This program is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
GNU General Public License for more details.
13+
14+
* You should have received a copy of the GNU General Public License
15+
along with this program. If not, see <http://www.gnu.org/licenses/>.*/
16+
17+
using System;
18+
using System.IO;
19+
using System.Security.Cryptography;
20+
21+
namespace MapleLib.MapleCryptoLib
22+
{
23+
24+
/// <summary>
25+
/// Class to handle the AES Encryption routines
26+
/// </summary>
27+
public class AESEncryption
28+
{
29+
30+
/// <summary>
31+
/// Encrypt data using MapleStory's AES algorithm
32+
/// </summary>
33+
/// <param name="IV">IV to use for encryption</param>
34+
/// <param name="data">Data to encrypt</param>
35+
/// <param name="length">Length of data</param>
36+
/// <returns>Crypted data</returns>
37+
public static byte[] aesCrypt(byte[] IV, byte[] data, int length)
38+
{
39+
return aesCrypt(IV, data, length, CryptoConstants.getTrimmedUserKey());
40+
}
41+
42+
/// <summary>
43+
/// Encrypt data using MapleStory's AES method
44+
/// </summary>
45+
/// <param name="IV">IV to use for encryption</param>
46+
/// <param name="data">data to encrypt</param>
47+
/// <param name="length">length of data</param>
48+
/// <param name="key">the AES key to use</param>
49+
/// <returns>Crypted data</returns>
50+
public static byte[] aesCrypt(byte[] IV, byte[] data, int length, byte[] key)
51+
{
52+
AesManaged crypto = new AesManaged();
53+
crypto.KeySize = 256; //in bits
54+
crypto.Key = key;
55+
crypto.Mode = CipherMode.ECB; // Should be OFB, but this works too
56+
57+
MemoryStream memStream = new MemoryStream();
58+
CryptoStream cryptoStream = new CryptoStream(memStream, crypto.CreateEncryptor(), CryptoStreamMode.Write);
59+
60+
int remaining = length;
61+
int llength = 0x5B0;
62+
int start = 0;
63+
while (remaining > 0)
64+
{
65+
byte[] myIV = MapleCrypto.multiplyBytes(IV, 4, 4);
66+
if (remaining < llength)
67+
{
68+
llength = remaining;
69+
}
70+
for (int x = start; x < (start + llength); x++)
71+
{
72+
if ((x - start) % myIV.Length == 0)
73+
{
74+
cryptoStream.Write(myIV, 0, myIV.Length);
75+
byte[] newIV = memStream.ToArray();
76+
Array.Copy(newIV, myIV, myIV.Length);
77+
memStream.Position = 0;
78+
}
79+
data[x] ^= myIV[(x - start) % myIV.Length];
80+
}
81+
start += llength;
82+
remaining -= llength;
83+
llength = 0x5B4;
84+
}
85+
86+
try
87+
{
88+
cryptoStream.Dispose();
89+
memStream.Dispose();
90+
}
91+
catch (Exception e)
92+
{
93+
Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "Error disposing AES streams" + e);
94+
//Console.WriteLine("Error disposing AES streams" + e);
95+
}
96+
97+
return data;
98+
}
99+
}
100+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/* MapleLib - A general-purpose MapleStory library
2+
* Copyright (C) 2009, 2010, 2015 Snow and haha01haha01
3+
4+
* This program is free software: you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation, either version 3 of the License, or
7+
(at your option) any later version.
8+
9+
* This program is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
GNU General Public License for more details.
13+
14+
* You should have received a copy of the GNU General Public License
15+
along with this program. If not, see <http://www.gnu.org/licenses/>.*/
16+
17+
namespace MapleLib.MapleCryptoLib
18+
{
19+
/// <summary>
20+
/// Contains all the constant values used for various functions
21+
/// </summary>
22+
public class CryptoConstants
23+
{
24+
25+
/// <summary>
26+
/// AES UserKey used by MapleStory
27+
/// </summary>
28+
public static byte[] UserKey = new byte[128] { //16 * 8
29+
0x13, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00,
30+
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
31+
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
32+
0xB4, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
33+
0x1B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
34+
0x0F, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00,
35+
0x33, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
36+
0x52, 0x00, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00
37+
};
38+
39+
/// <summary>
40+
/// ShuffleBytes used by MapleStory to generate a new IV
41+
/// </summary>
42+
public static byte[] bShuffle = new byte[256] {//16 * 16
43+
0xEC, 0x3F, 0x77, 0xA4, 0x45, 0xD0, 0x71, 0xBF, 0xB7, 0x98, 0x20, 0xFC, 0x4B, 0xE9, 0xB3, 0xE1,
44+
0x5C, 0x22, 0xF7, 0x0C, 0x44, 0x1B, 0x81, 0xBD, 0x63, 0x8D, 0xD4, 0xC3, 0xF2, 0x10, 0x19, 0xE0,
45+
0xFB, 0xA1, 0x6E, 0x66, 0xEA, 0xAE, 0xD6, 0xCE, 0x06, 0x18, 0x4E, 0xEB, 0x78, 0x95, 0xDB, 0xBA,
46+
0xB6, 0x42, 0x7A, 0x2A, 0x83, 0x0B, 0x54, 0x67, 0x6D, 0xE8, 0x65, 0xE7, 0x2F, 0x07, 0xF3, 0xAA,
47+
0x27, 0x7B, 0x85, 0xB0, 0x26, 0xFD, 0x8B, 0xA9, 0xFA, 0xBE, 0xA8, 0xD7, 0xCB, 0xCC, 0x92, 0xDA,
48+
0xF9, 0x93, 0x60, 0x2D, 0xDD, 0xD2, 0xA2, 0x9B, 0x39, 0x5F, 0x82, 0x21, 0x4C, 0x69, 0xF8, 0x31,
49+
0x87, 0xEE, 0x8E, 0xAD, 0x8C, 0x6A, 0xBC, 0xB5, 0x6B, 0x59, 0x13, 0xF1, 0x04, 0x00, 0xF6, 0x5A,
50+
0x35, 0x79, 0x48, 0x8F, 0x15, 0xCD, 0x97, 0x57, 0x12, 0x3E, 0x37, 0xFF, 0x9D, 0x4F, 0x51, 0xF5,
51+
0xA3, 0x70, 0xBB, 0x14, 0x75, 0xC2, 0xB8, 0x72, 0xC0, 0xED, 0x7D, 0x68, 0xC9, 0x2E, 0x0D, 0x62,
52+
0x46, 0x17, 0x11, 0x4D, 0x6C, 0xC4, 0x7E, 0x53, 0xC1, 0x25, 0xC7, 0x9A, 0x1C, 0x88, 0x58, 0x2C,
53+
0x89, 0xDC, 0x02, 0x64, 0x40, 0x01, 0x5D, 0x38, 0xA5, 0xE2, 0xAF, 0x55, 0xD5, 0xEF, 0x1A, 0x7C,
54+
0xA7, 0x5B, 0xA6, 0x6F, 0x86, 0x9F, 0x73, 0xE6, 0x0A, 0xDE, 0x2B, 0x99, 0x4A, 0x47, 0x9C, 0xDF,
55+
0x09, 0x76, 0x9E, 0x30, 0x0E, 0xE4, 0xB2, 0x94, 0xA0, 0x3B, 0x34, 0x1D, 0x28, 0x0F, 0x36, 0xE3,
56+
0x23, 0xB4, 0x03, 0xD8, 0x90, 0xC8, 0x3C, 0xFE, 0x5E, 0x32, 0x24, 0x50, 0x1F, 0x3A, 0x43, 0x8A,
57+
0x96, 0x41, 0x74, 0xAC, 0x52, 0x33, 0xF0, 0xD9, 0x29, 0x80, 0xB1, 0x16, 0xD3, 0xAB, 0x91, 0xB9,
58+
0x84, 0x7F, 0x61, 0x1E, 0xCF, 0xC5, 0xD1, 0x56, 0x3D, 0xCA, 0xF4, 0x05, 0xC6, 0xE5, 0x08, 0x49
59+
};
60+
61+
/// <summary>
62+
/// Default AES Key used to generate a new IV
63+
/// </summary>
64+
public static byte[] bDefaultAESKeyValue = new byte[16] {
65+
0xC6, 0x50, 0x53, 0xF2, 0xA8, 0x42, 0x9D, 0x7F, 0x77, 0x09, 0x1D, 0x26, 0x42, 0x53, 0x88, 0x7C,
66+
};
67+
68+
/// <summary>
69+
/// IV used to create the WzKey for GMS
70+
/// </summary>
71+
public static byte[] WZ_GMSIV = new byte[4] { 0x4D, 0x23, 0xC7, 0x2B };
72+
73+
/// <summary>
74+
/// IV used to create the WzKey for MSEA
75+
/// </summary>
76+
public static byte[] WZ_MSEAIV = new byte[4] { 0xB9, 0x7D, 0x63, 0xE9 };
77+
78+
/// <summary>
79+
/// Constant used in WZ offset encryption
80+
/// </summary>
81+
public static uint WZ_OffsetConstant = 0x581C3F6D;
82+
83+
/// <summary>
84+
/// Trims the AES UserKey for use an AES cryptor
85+
/// </summary>
86+
public static byte[] getTrimmedUserKey()
87+
{
88+
byte[] key = new byte[32];
89+
for (int i = 0; i < 128; i += 16)
90+
{
91+
key[i / 4] = UserKey[i];
92+
}
93+
return key;
94+
}
95+
}
96+
}

0 commit comments

Comments
 (0)