-
Notifications
You must be signed in to change notification settings - Fork 0
/
modKopierschutz.vb
391 lines (304 loc) · 15.8 KB
/
modKopierschutz.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
Imports System.Security.Cryptography
Imports System.IO
Imports System.Text
Imports System.Net
Module modKopierschutz
Public Enum mgetUpdaterMessage
getNewVersion = 0
sendAuthCode = 1
getAuthCode = 2
getIstBuyed = 3
getProgramUpdateCheck = 4
End Enum
Public WithEvents clsUpdateDownloader As WebFileDownloader
Public gbl_KeyCode As String
Public strServerInfo() As String
Public bExitProgramm As Boolean = False
Public bRegistered As Boolean = False
Public strVersionsNummer As String = "2.2.2"
Public pgrUpdater_global As ProgressBar
'# WMI MAC
Public Function getWMI_CPU() As String
Dim strCPU As String = ""
Dim objWMIService As Object
Dim colItems As Object
Dim objItem As Object
Dim strComputer As String = "."
Try
objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor")
For Each objItem In colItems
Application.DoEvents()
'lstServerMessage.Items.Add("-- HDD INFO --")
'lstServerMessage.Items.Add("Prozessor ID:" & objItem.ProcessorId)
strCPU = objItem.ProcessorId
'lstServerMessage.Items.Add("Geschwindigkeit:" & objItem.MaxClockSpeed & " Mhz")
'lstServerMessage.Items.Add("BUS-System:" & objItem.DataWidth & " Bit")
'lstServerMessage.Items.Add("Datum:" & objItem.InstallDate)
'lstServerMessage.Items.Add("-- ENDE --")
'lstServerMessage.Items.Add("")
Next
Return strCPU
Catch ex As Exception
Return "-1"
End Try
End Function
'# WMI HDD Serial
Public Function getWMI_HDD_Serial() As String
Dim strHDD As String = ""
Dim colDisks As Object
Dim objDisk As Object
Try
colDisks = GetObject( _
"Winmgmts:").ExecQuery("SELECT * FROM Win32_LogicalDisk")
For Each objDisk In colDisks
Application.DoEvents()
Select Case objDisk.DriveType
Case 3
'lstServerMessage.Items.Add("-- HDD INFO --")
'lstServerMessage.Items.Add("Bezeichnung: " & objDisk.Caption & " - " & objDisk.VolumeName & " - Typ: Festplatte")
'lstServerMessage.Items.Add("Seriennummer: " & objDisk.VolumeSerialNumber)
'lstServerMessage.Items.Add("Dateisystem: " & objDisk.FileSystem)
'lstServerMessage.Items.Add("-- ENDE --")
'lstServerMessage.Items.Add("")
strHDD = objDisk.VolumeSerialNumber
Exit For
End Select
Next
Return strHDD
Catch ex As Exception
Return "-1"
End Try
End Function
'######################################################
'# >> Schlüssel berechnen
'######################################################
Public Function getWMI_KeyCode() As String
Dim strHDD As String = ""
Dim strCPU As String = ""
Dim strKeyCode As String = ""
Try
strHDD = getWMI_HDD_Serial()
If strHDD = "-1" Or strHDD = "" Then
MsgBox("Fehler beim Empfangen der HDD Serial", MsgBoxStyle.Critical)
Exit Function
End If
strCPU = getWMI_CPU()
If strCPU = "-1" Or strCPU = "" Then
MsgBox("Fehler beim empfangen der MAC Addresse", MsgBoxStyle.Critical)
Exit Function
End If
strKeyCode = Encrypt(strHDD & strCPU)
strKeyCode = strKeyCode.Replace("+", "")
strKeyCode = strKeyCode.Replace("=", "")
'strKeyCode = strKeyCode.Substring(0, 7)
Return strKeyCode
Catch ex As Exception
MessageBox.Show("Kann WMI Daten für Schlüsselgenerierung nicht erzeugen!", "getWMI_KeyCode", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return "-1"
End Try
End Function
'#################################################################################################
'# >> UPDATER: Nachricht abgreifen
'#################################################################################################
Public Function getHTTPResponseMessage(ByVal strURL As String, ByVal mModus As mgetUpdaterMessage, ByVal bMessage As Boolean) As String()
Dim strData As String = ""
Try
'# Request erzeugen
'MsgBox(strURL)
Dim request As WebRequest = WebRequest.Create(strURL)
'# Server - Login
request.Credentials = CredentialCache.DefaultCredentials
'# Server - Antwort
Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
'# Status anzeigen
Console.WriteLine(response.StatusDescription)
'# Hole den Stream
Dim dataStream As Stream = response.GetResponseStream()
'# Benutzerstream Reader zum einlesen
Dim reader As New StreamReader(dataStream)
'# Alles einlesen
Dim responseFromServer As String = reader.ReadToEnd()
strServerInfo = responseFromServer.Split("<br/>")
'# Welcher Modus
Select Case mModus
Case mgetUpdaterMessage.getNewVersion
If strServerInfo.Length >= 2 Then
strServerInfo(1) = strServerInfo(1).Replace("br>", "")
strServerInfo(1) = strServerInfo(1).Replace("URL:", "")
End If
If strServerInfo.Length >= 3 Then
strServerInfo(2) = strServerInfo(2).Replace("br>", "")
strServerInfo(2) = strServerInfo(2).Replace("ZEITPUNKT:", "")
End If
If strServerInfo.Length >= 4 Then
strServerInfo(3) = strServerInfo(3).Replace("br>", "")
strServerInfo(3) = strServerInfo(3).Replace("VERSION:", "")
End If
If strServerInfo.Length >= 5 Then
strServerInfo(4) = strServerInfo(4).Replace("br>", "")
strServerInfo(4) = strServerInfo(4).Replace("COMMENT:", "")
End If
If strServerInfo.Length > 0 Then
Select Case strServerInfo(0)
Case "NEUSTE_VERSION_VORHANDEN"
'clsUpdateDownloader.chkUpdateModus = WebFileDownloader.chkModus.ok
frmMain.msgMaster.Text = "Neuste Version vorhanden: " & Date.Now
Exit Function
Case "FEHLER:Kein_Versionsstring"
'clsUpdateDownloader.chkUpdateModus = WebFileDownloader.chkModus.fehler
frmMain.msgMaster.Text = "Fehler kein Versionsstring gefunden, bitte manuell von http://www.cubss.net herunterladen.."
Exit Function
Case "DOWNLOAD_NOW"
'clsUpdateDownloader.chkUpdateModus = WebFileDownloader.chkModus.update
frmMain.msgMaster.Text = "Neues Update vom " & strServerInfo(2) & " | Version: " & strServerInfo(3) & " : " & Date.Now
End Select
End If
Case mgetUpdaterMessage.sendAuthCode
Return strServerInfo
'############################################################
'# ABRUFEN DES AUTHCODES + DEMOENDE DATUM
'############################################################
Case mgetUpdaterMessage.getAuthCode
Return strServerInfo
Case mgetUpdaterMessage.getIstBuyed
Return strServerInfo
Case mgetUpdaterMessage.getProgramUpdateCheck
Return strServerInfo
End Select
'# Alle Resourcen schließen
reader.Close()
dataStream.Close()
response.Close()
Return strServerInfo
Catch ex As Exception
MessageBox.Show("Fehler bei " & ex.Message, "getHTTPResponseMessage", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Function
Public Function getDateTimeVar(strmySQLDatum As String) As DateTime
Try
Dim strDatumSplit() As String = strmySQLDatum.Split(" ")
Dim strDatumReal() As String = strDatumSplit(0).Split("-")
Return strDatumReal(2) & "." & strDatumReal(1) & "." & strDatumReal(0) & " " & strDatumSplit(1)
Catch ex As Exception
End Try
End Function
'#######################################################################################################################################################
'# UPDATER
'#######################################################################################################################################################
'#################################################################################################
'# >> UPDATER: Programm Updates durch Server Verteilen
'#################################################################################################
Public Function setUpdateCheck(ByVal pgrUpdate As ProgressBar, ByVal lblUpdater As Label) As Boolean
Dim strMessage As String
Dim iAPPID As Integer = 2 ' YABE UPDATE ID
'PRÜFEN ob Datei existiert
If Not IO.Directory.Exists(Application.StartupPath & "\Updater\") Then
' MessageBox.Show("Kein gültiges Verzeichnis", "Fehler beim Aktualisieren", MessageBoxButtons.OK, MessageBoxIcon.Error)
' Return
End If
pgrUpdater_global = pgrUpdate
strMessage = "https://api.bludau-media.de/SafeSandy/Download.php?version=" & strVersionsNummer & "&name=JTL%20Newsletter&key=" & gbl_KeyCode & "&programID=3&versionsnummer=" & strVersionsNummer
'strMessage = "https://api.bludau-media.de/software-download.php?programID=3&name=JTL%20Newsletter"
Dim strServerInfo() As String = getHTTPResponseMessage(strMessage, mgetUpdaterMessage.getNewVersion, True)
'Download starten
Try
pgrUpdate.Visible = True
lblUpdater.Visible = True
clsUpdateDownloader = New WebFileDownloader
'txtDownloadTo.Text.TrimEnd("\"c)
Application.DoEvents()
clsUpdateDownloader.DownloadFileWithProgress(strServerInfo(1).ToString.Replace("br/>URL=", ""), Application.StartupPath & "\Updater\" & GetFileNameFromURL(strServerInfo(1).ToString.Replace("br/>URL=", "")))
pgrUpdate.Visible = False
lblUpdater.Visible = False
Return True
Catch ex As Exception
MessageBox.Show("Error: " & ex.Message)
Return False
End Try
End Function
'#################################################################################################
'# >> UPDATER: Dateigröße
'#################################################################################################
Public Sub _Downloader_FileDownloadSizeObtained(ByVal iFileSize As Long) Handles clsUpdateDownloader.FileDownloadSizeObtained
pgrUpdater_global.Value = 0
pgrUpdater_global.Maximum = Convert.ToInt32(iFileSize)
End Sub
Public Function setBR(ByVal strData As String) As String
Try
strData = vbCrLf & strData.Replace("|br|", vbCrLf)
Catch ex As Exception
'Call debug_message(ex, strQuery & vbCrLf & "setBR")
Return "-1"
End Try
Return strData
End Function
'#################################################################################################
'# >> UPDATER: Wieviel wurder heruntergeladen
'#################################################################################################
Private Sub _Downloader_AmountDownloadedChanged(ByVal iNewProgress As Long) Handles clsUpdateDownloader.AmountDownloadedChanged
pgrUpdater_global.Value = Convert.ToInt32(iNewProgress)
'lblUpdater.Text = WebFileDownloader.FormatFileSize(iNewProgress) & " von " & WebFileDownloader.FormatFileSize(pgrUpdater_global.Maximum) & " downloaded"
Application.DoEvents()
End Sub
'#################################################################################################
'# >> UPDATER: Download beendet
'#################################################################################################
Public Sub _Downloader_FileDownloadComplete() Handles clsUpdateDownloader.FileDownloadComplete
Dim strMessage As String
Try
pgrUpdater_global.Value = pgrUpdater_global.Maximum
Application.DoEvents()
strMessage = setBR(strServerInfo(4))
Catch ex As Exception
End Try
Dim ExterneAnwendung As New System.Diagnostics.Process()
Dim strFile As String = Application.StartupPath & "\Updater" & GetFileNameFromURL(strServerInfo(1))
ExterneAnwendung.StartInfo.FileName = strFile
ExterneAnwendung.Start()
Application.Exit()
End Sub
'#####################################################################
'# Ausgeben des Namens von einer URL
'#####################################################################
Public Function GetFileNameFromURL(ByVal URL As String) As String
If URL.IndexOf("/"c) = -1 Then Return String.Empty
Return "\" & URL.Substring(URL.LastIndexOf("/"c) + 1)
End Function
'##############################################################
'# >> Encrypt
'# Verschlüsseln von DATEN
'##############################################################
Public Function Encrypt(ByVal plainText As String) As String
' Declare a UTF8Encoding object so we may use the GetByte
' method to transform the plainText into a Byte array.
Dim utf8encoder As UTF8Encoding = New UTF8Encoding()
Dim bytValue() As Byte
Dim gstrHash As String
Dim inputInBytes() As Byte = utf8encoder.GetBytes(plainText & "JTL Newsletter")
' Create a new TripleDES service provider
Dim tdesProvider As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()
' The ICryptTransform interface uses the TripleDES
' crypt provider along with encryption key and init vector
' information
bytValue = System.Text.Encoding.UTF8.GetBytes(plainText)
Dim cryptoTransform As ICryptoTransform = tdesProvider.CreateEncryptor(bytValue, bytValue)
' All cryptographic functions need a stream to output the
' encrypted information. Here we declare a memory stream
' for this purpose.
Dim encryptedStream As MemoryStream = New MemoryStream()
Dim cryptStream As CryptoStream = New CryptoStream(encryptedStream, cryptoTransform, CryptoStreamMode.Write)
' Write the encrypted information to the stream. Flush the information
' when done to ensure everything is out of the buffer.
cryptStream.Write(inputInBytes, 0, inputInBytes.Length)
cryptStream.FlushFinalBlock()
encryptedStream.Position = 0
' Read the stream back into a Byte array and return it to the calling
' method.
Dim result(encryptedStream.Length - 1) As Byte
encryptedStream.Read(result, 0, encryptedStream.Length)
cryptStream.Close()
gstrHash = Convert.ToBase64String(result)
Return gstrHash
End Function
End Module