initial commit
This commit is contained in:
@@ -0,0 +1,771 @@
|
||||
Imports System
|
||||
Imports System.Net
|
||||
Imports System.Text
|
||||
Imports System.IO
|
||||
Imports System.IO.Compression
|
||||
Imports System.Diagnostics
|
||||
Imports System.Reflection
|
||||
Imports System.Windows.Forms
|
||||
Imports System.ComponentModel
|
||||
Imports System.Security.Cryptography
|
||||
Imports System.Collections.Generic
|
||||
Imports System.Runtime.InteropServices
|
||||
Imports System.Net.Security
|
||||
Imports System.Security
|
||||
Imports System.Security.Cryptography.X509Certificates
|
||||
|
||||
''' <summary>
|
||||
''' License Loader, Version: 2.0.0.3, Changed: 12/23/2012
|
||||
''' </summary>
|
||||
|
||||
Friend NotInheritable Class License
|
||||
|
||||
Private Version As New Version("2.0.0.3")
|
||||
|
||||
#Region " ReadOnly Properties "
|
||||
|
||||
ReadOnly Property Username As String
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetUsername").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, String)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private _ProductVersion As Version
|
||||
ReadOnly Property ProductVersion As Version
|
||||
Get
|
||||
If _ProductVersion Is Nothing Then
|
||||
_ProductVersion = New Version(Application.ProductVersion)
|
||||
End If
|
||||
|
||||
Return _ProductVersion
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property ExecutablePath As String
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetExecutablePath").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, String)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property GlobalMessage As String
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetMessage").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, String)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property ExpirationDate As Date
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetExpiration").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, Date)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property TimeRemaining As TimeSpan
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetRemaining").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, TimeSpan)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property LicenseType As LicenseType
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetLicenseType").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, LicenseType)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property Points As Integer
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetPoints").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, Integer)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property UnlimitedTime As Boolean
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetUnlimitedTime").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, Boolean)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property UpdateAvailable As Boolean
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetUpdateAvailable").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, Boolean)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property UsersCount As Integer
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetUsersCount").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, Integer)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property UsersOnline As Integer
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetUsersOnline").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, Integer)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property GUID As String
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetGUID").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, String)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property PublicToken As String
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetPublicToken").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, String)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property PrivateKey As Byte()
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetPrivateKey").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, Byte())
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property Client As WebClient
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetClient").Invoke(Nothing, Nothing)
|
||||
Return DirectCast(Data, WebClient)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property News As NewsPost()
|
||||
Get
|
||||
Dim Data As Object = Instance.GetMethod("GetNews").Invoke(Nothing, Nothing)
|
||||
Dim Values As Object() = DirectCast(Data, Object())
|
||||
|
||||
Dim Section As Integer
|
||||
Dim T As New List(Of NewsPost)
|
||||
|
||||
For I As Integer = 0 To Values.Length - 1 Step 3
|
||||
Section = I * 3
|
||||
T.Add(New NewsPost(Values(I), Values(I + 1), Values(I + 2)))
|
||||
Next
|
||||
|
||||
Return T.ToArray()
|
||||
End Get
|
||||
End Property
|
||||
|
||||
#End Region
|
||||
|
||||
#Region " Initialize Properties "
|
||||
|
||||
Private _ID As String
|
||||
Property ID() As String
|
||||
Get
|
||||
Return _ID
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
_ID = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _Catch As Boolean
|
||||
Property [Catch]() As Boolean
|
||||
Get
|
||||
Return _Catch
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_Catch = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _DisableUpdates As Boolean
|
||||
Property DisableUpdates() As Boolean
|
||||
Get
|
||||
Return _DisableUpdates
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_DisableUpdates = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _RunHook As GenericDelegate
|
||||
Property RunHook() As GenericDelegate
|
||||
Get
|
||||
Return _RunHook
|
||||
End Get
|
||||
Set(ByVal value As GenericDelegate)
|
||||
_RunHook = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _BanHook As GenericDelegate
|
||||
Property BanHook() As GenericDelegate
|
||||
Get
|
||||
Return _BanHook
|
||||
End Get
|
||||
Set(ByVal value As GenericDelegate)
|
||||
_BanHook = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _RenewHook As GenericDelegate
|
||||
Property RenewHook() As GenericDelegate
|
||||
Get
|
||||
Return _RenewHook
|
||||
End Get
|
||||
Set(ByVal value As GenericDelegate)
|
||||
_RenewHook = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _Protection As RuntimeProtection
|
||||
Property Protection() As RuntimeProtection
|
||||
Get
|
||||
Return _Protection
|
||||
End Get
|
||||
Set(ByVal value As RuntimeProtection)
|
||||
_Protection = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _ValidateCore As Boolean
|
||||
Property ValidateCore As Boolean
|
||||
Get
|
||||
Return _ValidateCore
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_ValidateCore = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
#End Region
|
||||
|
||||
#Region " Public Methods "
|
||||
|
||||
Sub Initialize(ByVal programID As String)
|
||||
ID = programID
|
||||
Initialize()
|
||||
End Sub
|
||||
|
||||
Sub Initialize()
|
||||
If LicenseGlobal.LicenseInitialize Then Return
|
||||
LicenseGlobal.LicenseInitialize = True
|
||||
|
||||
If String.IsNullOrEmpty(ID) Then
|
||||
ErrorKill("Unable to initialize due to missing Net Seal ID.")
|
||||
Return
|
||||
End If
|
||||
|
||||
ServicePointManager.Expect100Continue = False
|
||||
ServicePointManager.DefaultConnectionLimit = 5
|
||||
|
||||
Try
|
||||
WC = New CookieClient()
|
||||
|
||||
Dim Common As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
|
||||
LocationPath = Path.Combine(Common, "Nimoru")
|
||||
|
||||
LicenseLocation = Path.Combine(LocationPath, "LicenseSE")
|
||||
GizmoDllLocation = Path.Combine(LocationPath, "GizmoDll")
|
||||
GizmoLocation = Path.Combine(LocationPath, "GizmoSE")
|
||||
|
||||
DownloadChecksums()
|
||||
DownloadComponents()
|
||||
ValidateSignature()
|
||||
|
||||
Instance.GetMethod("SetID").Invoke(Nothing, New Object() {ID})
|
||||
Instance.GetMethod("SetCatch").Invoke(Nothing, New Object() {[Catch]})
|
||||
Instance.GetMethod("SetDisableUpdates").Invoke(Nothing, New Object() {DisableUpdates})
|
||||
Instance.GetMethod("SetRunHook").Invoke(Nothing, New Object() {RunHook})
|
||||
Instance.GetMethod("SetBanHook").Invoke(Nothing, New Object() {BanHook})
|
||||
Instance.GetMethod("SetRenewHook").Invoke(Nothing, New Object() {RenewHook})
|
||||
Instance.GetMethod("SetScan").Invoke(Nothing, New Object() {DirectCast(Protection, Byte)})
|
||||
Catch ex As Exception
|
||||
Dim T As New StringBuilder
|
||||
T.AppendLine(Date.UtcNow.ToString)
|
||||
T.AppendLine()
|
||||
T.AppendLine(ex.Message)
|
||||
T.AppendLine(ex.StackTrace)
|
||||
File.WriteAllText("loader.log", T.ToString)
|
||||
|
||||
ErrorKill("Unable to continue due to an error. Exception written to 'loader.log' file.")
|
||||
Return
|
||||
End Try
|
||||
|
||||
Try
|
||||
Instance.GetMethod("Run").Invoke(Nothing, New Object() {Version, ProductVersion})
|
||||
Catch
|
||||
ErrorKill("Unable to initialize license file.")
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Sub ShowAccount()
|
||||
Instance.GetMethod("ShowAccount").Invoke(Nothing, Nothing)
|
||||
End Sub
|
||||
|
||||
Function Encrypt(ByVal data As String) As String
|
||||
InitializeRm()
|
||||
|
||||
Dim R As Byte() = Encoding.UTF8.GetBytes(data)
|
||||
Dim O As Byte() = Encryptor.TransformFinalBlock(R, 0, R.Length)
|
||||
Dim U(O.Length + 3) As Byte
|
||||
|
||||
Buffer.BlockCopy(BitConverter.GetBytes(data.Length), 0, U, 0, 4)
|
||||
Buffer.BlockCopy(O, 0, U, 4, O.Length)
|
||||
|
||||
Return Convert.ToBase64String(U)
|
||||
End Function
|
||||
|
||||
Function Decrypt(ByVal data As Byte()) As Byte()
|
||||
InitializeRm()
|
||||
|
||||
Dim Size As Integer = BitConverter.ToInt32(data, 0)
|
||||
Dim O As Byte() = Decryptor.TransformFinalBlock(data, 4, data.Length - 4)
|
||||
|
||||
Dim U(Size - 1) As Byte
|
||||
Buffer.BlockCopy(O, 0, U, 0, Size)
|
||||
|
||||
Return U
|
||||
End Function
|
||||
|
||||
'NOTE: If String.IsNullOrEmpty() get new posts from License.News.
|
||||
Function GetPostMessage(ByVal postID As Integer) As String
|
||||
Dim Data As Object = Instance.GetMethod("GetPostMessage").Invoke(Nothing, New Object() {postID})
|
||||
Return DirectCast(Data, String)
|
||||
End Function
|
||||
|
||||
Function GetVariable(ByVal name As String) As String
|
||||
Dim Data As Object = Instance.GetMethod("GetVariable").Invoke(Nothing, New Object() {name})
|
||||
Return DirectCast(Data, String)
|
||||
End Function
|
||||
|
||||
Function SpendPoints(ByVal count As Integer) As Boolean
|
||||
Dim Data As Object = Instance.GetMethod("SpendPoints").Invoke(Nothing, New Object() {count})
|
||||
Return DirectCast(Data, Boolean)
|
||||
End Function
|
||||
|
||||
Sub InstallUpdates()
|
||||
Instance.GetMethod("InstallUpdates").Invoke(Nothing, Nothing)
|
||||
End Sub
|
||||
|
||||
Sub BanCurrentUser(ByVal reason As String)
|
||||
Instance.GetMethod("BanCurrentUser").Invoke(Nothing, New Object() {reason})
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
#Region " System Declarations "
|
||||
|
||||
Private Instance As Type
|
||||
Private WC As CookieClient
|
||||
|
||||
Private LocationPath As String
|
||||
Private LicenseLocation As String
|
||||
Private GizmoDllLocation As String
|
||||
Private GizmoLocation As String
|
||||
|
||||
Private Checksums As String()
|
||||
|
||||
Private Const Domain As String = "http://seal.elitevs.net/Base/"
|
||||
Private Const PublicKey As String = "BgIAAAAiAABEU1MxAAQAAKVlurdZMaHymNk04yRy3VGj0Bhf6gGIBsGr1zk42LrdnwYLfvn7MBAiYoCH2cD07M/HuM6NW1WqJQVF2omwH5S211wfvBCutU92RxXldmfvd06l8eQqmppztYIrXdxmW0BRlosBKPM5ms6YXZnoMKseAoqZ6Ajza8U9QCJMkSHSR+O23EoGj9V+7xwkCoYHklFtLJzERB6y/DW1BCCHhLblzpFz+mht1CD6xAi2QBNY7vZcWdbqo+ZLT4y7sw8jU61liYBuZLA/t+6KHhoIwZ+NIErsCHW5RD9ln5VpMC66wBCcY594ZTIManIuvmpw4eQaUXZPoMogf29gJgJSolaDg5iP1XDqzOTPu9RdsHe3R1ZaNglrL05zoTM94Zkl5KT+bPAUC99kGrEDmNipe6tj8FwoOTNNaTaOvWZlXTtAfaxqGV47nxKfabgxEl08n0c3PBJEjUZzJ4chwQ2Ex2A5uYBgRukcmKmRmdwIphHq0IwdoxS1+6HSwXxg1d3EEAoxJ75R1eSXF+cXOeC7d/U2UY0tqwAAAMvTiz5uMzpBQIYdNcbYnrJwHObk"
|
||||
|
||||
Private ReadOnly Property UID As String
|
||||
Get
|
||||
Return "?uid=" & BitConverter.ToString(BitConverter.GetBytes(Environment.TickCount)).Replace("-", "")
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private Encryptor As ICryptoTransform
|
||||
Private Decryptor As ICryptoTransform
|
||||
Private RmInitialize As Boolean
|
||||
|
||||
<EditorBrowsable(EditorBrowsableState.Advanced)> _
|
||||
Delegate Sub GenericDelegate()
|
||||
|
||||
<DllImport("kernel32.dll", EntryPoint:="ExitProcess")> _
|
||||
Private Shared Sub ExitProcess(ByVal code As UInteger)
|
||||
End Sub
|
||||
|
||||
<DllImport("mscoree.dll", EntryPoint:="StrongNameSignatureVerificationEx", CharSet:=CharSet.Unicode)> _
|
||||
Private Shared Function StrongNameSignatureVerificationEx( _
|
||||
ByVal fileName As String, _
|
||||
ByVal force As Boolean, _
|
||||
ByRef genuine As Boolean) As Boolean
|
||||
End Function
|
||||
|
||||
<DllImport("mscoree.dll", PreserveSig:=False, EntryPoint:="CLRCreateInstance")> _
|
||||
Private Shared Function CreateInstance( _
|
||||
<MarshalAs(UnmanagedType.LPStruct)> ByVal cid As Guid, _
|
||||
<MarshalAs(UnmanagedType.LPStruct)> ByVal iid As Guid) As <MarshalAs(UnmanagedType.Interface)> Object
|
||||
End Function
|
||||
|
||||
#End Region
|
||||
|
||||
#Region " System Methods "
|
||||
|
||||
Private Sub DownloadChecksums()
|
||||
Try
|
||||
Checksums = WC.DownloadString(Domain & "checksumSE.php" & UID).Split(Char.MinValue)
|
||||
Catch ex As Exception
|
||||
Threading.Thread.Sleep(500)
|
||||
Checksums = WC.DownloadString(Domain & "checksumSE.php" & UID).Split(Char.MinValue)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub DownloadComponents()
|
||||
Dim Hash As String
|
||||
If Not Directory.Exists(LocationPath) Then
|
||||
Directory.CreateDirectory(LocationPath)
|
||||
End If
|
||||
|
||||
OverrideSSL() '--BEGIN OVERRIDE--
|
||||
|
||||
If Not File.Exists(GizmoDllLocation) Then
|
||||
DownloadGizmoDll()
|
||||
End If
|
||||
|
||||
Hash = MD5File(GizmoDllLocation)
|
||||
If Not Hash = Checksums(1) Then
|
||||
DownloadGizmoDll()
|
||||
End If
|
||||
|
||||
If Not File.Exists(GizmoLocation) Then
|
||||
DownloadGizmo()
|
||||
End If
|
||||
|
||||
Hash = MD5File(GizmoLocation)
|
||||
If Not Hash = Checksums(2) Then
|
||||
DownloadGizmo()
|
||||
End If
|
||||
|
||||
If Not File.Exists(LicenseLocation) Then
|
||||
DownloadLicense()
|
||||
End If
|
||||
|
||||
Hash = MD5File(LicenseLocation)
|
||||
If Not Hash = Checksums(3) Then
|
||||
DownloadLicense()
|
||||
End If
|
||||
|
||||
RestoreSSL() '--END OVERRIDE--
|
||||
End Sub
|
||||
|
||||
Private Sub ValidateSignature()
|
||||
If ValidateCore AndAlso Not CheckCore() Then
|
||||
Throw New InvalidDataException("Core framework files are not trusted.")
|
||||
Return
|
||||
End If
|
||||
|
||||
Dim M As FileStream = File.OpenRead(LicenseLocation)
|
||||
Dim R As New BinaryReader(M)
|
||||
|
||||
Dim FullData As Byte() = R.ReadBytes(CInt(M.Length))
|
||||
M.Position = 2
|
||||
|
||||
Dim Sign As Byte() = R.ReadBytes(40)
|
||||
Dim Data As Byte() = R.ReadBytes(CInt(M.Length - Sign.Length - 2))
|
||||
R.Close()
|
||||
|
||||
Dim DSA As New DSACryptoServiceProvider
|
||||
DSA.ImportCspBlob(Convert.FromBase64String(PublicKey))
|
||||
|
||||
If DSA.VerifyData(Data, Sign) Then
|
||||
Instance = Assembly.Load(FullData).GetType("Share")
|
||||
Else
|
||||
Throw New InvalidDataException("Unable to validate signature.")
|
||||
End If
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub DownloadGizmoDll()
|
||||
Dim Data As Byte() = WC.DownloadData(Checksums(0) & Checksums(1) & ".co")
|
||||
Data = Decompress(Data)
|
||||
|
||||
Dim Hash As String = MD5(Data)
|
||||
If Not Checksums(1) = Hash Then
|
||||
Fail(GizmoDllLocation)
|
||||
Return
|
||||
End If
|
||||
|
||||
File.WriteAllBytes(GizmoDllLocation, Data)
|
||||
End Sub
|
||||
|
||||
Private Sub DownloadGizmo()
|
||||
Dim Data As Byte() = WC.DownloadData(Checksums(0) & Checksums(2) & ".co")
|
||||
Data = GizmoDecompress(Data)
|
||||
|
||||
Dim Hash As String = MD5(Data)
|
||||
If Not Checksums(2) = Hash Then
|
||||
Fail(GizmoLocation)
|
||||
Return
|
||||
End If
|
||||
|
||||
File.WriteAllBytes(GizmoLocation, Data)
|
||||
End Sub
|
||||
|
||||
Private Sub DownloadLicense()
|
||||
Dim PI As New ProcessStartInfo
|
||||
PI.Arguments = String.Format("""{0}"" ""{1}"" {2} -s", Checksums(0) & Checksums(3) & ".co", LicenseLocation, Checksums(3))
|
||||
PI.FileName = GizmoLocation
|
||||
PI.UseShellExecute = False
|
||||
|
||||
Dim P As Process = Process.Start(PI)
|
||||
If Not P.WaitForExit(20000) Then
|
||||
Environment.Exit(0)
|
||||
End If
|
||||
|
||||
If Not P.ExitCode = 7788 Then
|
||||
Environment.Exit(0)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub Fail(ByVal path As String)
|
||||
File.Delete(path)
|
||||
ErrorKill("Failed to initialize all the required components.")
|
||||
End Sub
|
||||
|
||||
Private Sub ErrorKill(ByVal message As String)
|
||||
MessageBox.Show(message, "Loader Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
|
||||
Environment.Exit(0)
|
||||
ExitProcess(0)
|
||||
End Sub
|
||||
|
||||
|
||||
Private Function Decompress(ByVal data As Byte()) As Byte()
|
||||
Dim Size As Integer = BitConverter.ToInt32(data, 0)
|
||||
|
||||
Dim U(Size - 1) As Byte
|
||||
Dim M As New MemoryStream(data, 4, data.Length - 4)
|
||||
|
||||
Dim D As New DeflateStream(M, CompressionMode.Decompress, False)
|
||||
D.Read(U, 0, U.Length)
|
||||
|
||||
D.Close()
|
||||
M.Close()
|
||||
Return U
|
||||
End Function
|
||||
|
||||
Private Function GizmoDecompress(ByVal data As Byte()) As Byte()
|
||||
Dim GizmoDll As Byte() = File.ReadAllBytes(GizmoDllLocation)
|
||||
Dim G As MethodInfo = Assembly.Load(GizmoDll).GetType("H").GetMethod("Decompress")
|
||||
Return DirectCast(G.Invoke(Nothing, New Object() {data}), Byte())
|
||||
End Function
|
||||
|
||||
|
||||
Private Function MD5(ByVal data As Byte()) As String
|
||||
Dim H As New MD5CryptoServiceProvider
|
||||
Return HashToString(H.ComputeHash(data))
|
||||
End Function
|
||||
|
||||
Private Function MD5File(ByVal path As String) As String
|
||||
Dim F As New FileStream(path, FileMode.Open, FileAccess.Read)
|
||||
Dim H As New MD5CryptoServiceProvider
|
||||
|
||||
Dim Hash As String = HashToString(H.ComputeHash(F))
|
||||
|
||||
F.Close()
|
||||
Return Hash
|
||||
End Function
|
||||
|
||||
Private Function HashToString(ByVal data As Byte()) As String
|
||||
Return BitConverter.ToString(data).ToLower().Replace("-", String.Empty)
|
||||
End Function
|
||||
|
||||
Private Sub InitializeRm()
|
||||
If RmInitialize Then Return
|
||||
RmInitialize = True
|
||||
|
||||
Dim Rm As New RijndaelManaged
|
||||
Rm.Padding = PaddingMode.Zeros
|
||||
Rm.Mode = CipherMode.CBC
|
||||
Rm.Key = PrivateKey
|
||||
Rm.IV = PrivateKey
|
||||
|
||||
Encryptor = Rm.CreateEncryptor()
|
||||
Decryptor = Rm.CreateDecryptor()
|
||||
End Sub
|
||||
|
||||
Private SN As IStrongName
|
||||
|
||||
Private Function CheckCore() As Boolean
|
||||
Dim Base As String = RuntimeEnvironment.GetRuntimeDirectory()
|
||||
Dim Build As String = RuntimeEnvironment.GetSystemVersion()
|
||||
Dim HostCLR As Boolean = Int32.Parse(Build(1).ToString()) >= 4
|
||||
|
||||
If HostCLR Then
|
||||
Dim CID_META_HOST As New Guid("9280188D-0E8E-4867-B30C-7FA83884E8DE")
|
||||
Dim CID_STRONG_NAME As New Guid("B79B0ACD-F5CD-409B-B5A5-A16244610B92")
|
||||
|
||||
Dim Meta As IMeta = DirectCast(CreateInstance(CID_META_HOST, GetType(IMeta).GUID), IMeta)
|
||||
Dim Runtime As IRuntime = DirectCast(Meta.GetRuntime(Build, GetType(IRuntime).GUID), IRuntime)
|
||||
SN = DirectCast(Runtime.GetInterface(CID_STRONG_NAME, GetType(IStrongName).GUID), IStrongName)
|
||||
End If
|
||||
|
||||
Dim File1 As String = Path.ChangeExtension(Path.Combine(Base, "mscorlib"), "dll")
|
||||
Dim File2 As String = Path.ChangeExtension(Path.Combine(Base, "system"), "dll")
|
||||
|
||||
Dim Token As Byte() = New Byte() {183, 122, 92, 86, 25, 52, 224, 137}
|
||||
If Not IsTrusted(File1, Token, HostCLR) Then Return False
|
||||
If Not IsTrusted(File2, Token, HostCLR) Then Return False
|
||||
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Function IsTrusted(ByVal path As String, ByVal token As Byte(), ByVal hostCLR As Boolean) As Boolean
|
||||
Dim Genuine As Boolean
|
||||
|
||||
If hostCLR Then
|
||||
If Not (SN.StrongNameSignatureVerificationEx(path, True, Genuine) = 0 AndAlso Genuine) Then Return False
|
||||
Else
|
||||
If Not (StrongNameSignatureVerificationEx(path, True, Genuine) AndAlso Genuine) Then Return False
|
||||
End If
|
||||
|
||||
Dim PublicToken As Byte() = Assembly.LoadFile(path).GetName().GetPublicKeyToken()
|
||||
If PublicToken Is Nothing OrElse Not PublicToken.Length = 8 Then Return False
|
||||
|
||||
For I As Integer = 0 To 7
|
||||
If Not PublicToken(I) = token(I) Then Return False
|
||||
Next
|
||||
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private SSLCallback As RemoteCertificateValidationCallback
|
||||
Private Function ValidateSSL(ByVal sender As Object, ByVal cert As X509Certificate, ByVal chain As X509Chain, ByVal errors As SslPolicyErrors) As Boolean
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Sub OverrideSSL()
|
||||
SSLCallback = ServicePointManager.ServerCertificateValidationCallback
|
||||
ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateSSL)
|
||||
End Sub
|
||||
|
||||
Private Sub RestoreSSL()
|
||||
ServicePointManager.ServerCertificateValidationCallback = SSLCallback
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
<InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("D332DB9E-B9B3-4125-8207-A14884F53216")> _
|
||||
Private Interface IMeta
|
||||
Function GetRuntime(ByVal version As String, <MarshalAs(UnmanagedType.LPStruct)> ByVal iid As Guid) As <MarshalAs(UnmanagedType.Interface)> Object
|
||||
End Interface
|
||||
|
||||
<InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")> _
|
||||
Private Interface IRuntime
|
||||
Sub M1()
|
||||
Sub M2()
|
||||
Sub M3()
|
||||
Sub M4()
|
||||
Sub M5()
|
||||
Sub M6()
|
||||
Function GetInterface(<MarshalAs(UnmanagedType.LPStruct)> cid As Guid, <MarshalAs(UnmanagedType.LPStruct)> iid As Guid) As <MarshalAs(UnmanagedType.Interface)> Object
|
||||
End Interface
|
||||
|
||||
<InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("9FD93CCF-3280-4391-B3A9-96E1CDE77C8D")> _
|
||||
Private Interface IStrongName
|
||||
Sub M1()
|
||||
Sub M2()
|
||||
Sub M3()
|
||||
Sub M4()
|
||||
Sub M5()
|
||||
Sub M6()
|
||||
Sub M7()
|
||||
Sub M8()
|
||||
Sub M9()
|
||||
Sub M10()
|
||||
Sub M11()
|
||||
Sub M12()
|
||||
Sub M13()
|
||||
Sub M14()
|
||||
Sub M15()
|
||||
Sub M16()
|
||||
Sub M17()
|
||||
Sub M18()
|
||||
Sub M19()
|
||||
Sub M20()
|
||||
Function StrongNameSignatureVerificationEx(ByVal filePath As String, ByVal force As Boolean, ByRef genuine As Boolean) As Integer
|
||||
End Interface
|
||||
|
||||
End Class
|
||||
|
||||
Friend Module LicenseGlobal
|
||||
|
||||
Friend Seal As New License
|
||||
Friend LicenseInitialize As Boolean
|
||||
|
||||
End Module
|
||||
|
||||
Friend Enum LicenseType As Byte
|
||||
Free = 0
|
||||
Bronze = 1
|
||||
Silver = 2
|
||||
Gold = 3
|
||||
Platinum = 4
|
||||
Diamond = 5
|
||||
End Enum
|
||||
|
||||
<Flags()> _
|
||||
Friend Enum RuntimeProtection As Byte
|
||||
None = 0
|
||||
Debuggers = 1
|
||||
DebuggersEx = 2
|
||||
Timing = 4
|
||||
Parent = 8
|
||||
FullScan = 15
|
||||
End Enum
|
||||
|
||||
Friend Structure NewsPost
|
||||
Private ReadOnly _ID As Integer
|
||||
ReadOnly Property ID() As Integer
|
||||
Get
|
||||
Return _ID
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private ReadOnly _Name As String
|
||||
ReadOnly Property Name() As String
|
||||
Get
|
||||
Return _Name
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private ReadOnly _Time As Date
|
||||
ReadOnly Property Time() As Date
|
||||
Get
|
||||
Return _Time
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Sub New(ByVal id As Object, ByVal name As Object, ByVal time As Object)
|
||||
_ID = DirectCast(id, Integer)
|
||||
_Name = DirectCast(name, String)
|
||||
_Time = DirectCast(time, Date)
|
||||
End Sub
|
||||
End Structure
|
||||
|
||||
Friend NotInheritable Class CookieClient
|
||||
Inherits WebClient
|
||||
|
||||
Private Request As HttpWebRequest
|
||||
Public Cookies As New CookieContainer
|
||||
|
||||
Protected Overrides Function GetWebRequest(ByVal address As Uri) As WebRequest
|
||||
Request = DirectCast(MyBase.GetWebRequest(address), HttpWebRequest)
|
||||
Request.Timeout = 20000
|
||||
Request.ReadWriteTimeout = 20000
|
||||
Request.KeepAlive = False
|
||||
Request.CookieContainer = Cookies
|
||||
Request.Proxy = Nothing
|
||||
Return Request
|
||||
End Function
|
||||
|
||||
Sub ClearCookies()
|
||||
Cookies = New CookieContainer
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user