· 6 years ago · Sep 05, 2019, 12:50 PM
1new PlVers:__version = 5;
2new Float:NULL_VECTOR[3];
3new String:NULL_STRING[1];
4new Extension:__ext_core = 64;
5new MaxClients;
6new Extension:__ext_sdktools = 180;
7new Extension:__ext_cstrike = 224;
8new String:xbox_autothrottleValue[256][64];
9new Handle:sprotect_site;
10new Handle:g_hDb;
11public Plugin:myinfo =
12{
13 name = "SteamID Protect System",
14 description = "Protect SteamID from hacking",
15 author = "igodsewer and S. Yakupov | Original plugin by SemJeF",
16 version = "1.0b",
17 url = "http://alliedmods.net"
18};
19public __ext_core_SetNTVOptional()
20{
21 MarkNativeAsOptional("GetFeatureStatus");
22 MarkNativeAsOptional("RequireFeature");
23 MarkNativeAsOptional("AddCommandListener");
24 MarkNativeAsOptional("RemoveCommandListener");
25 VerifyCoreVersion();
26 return 0;
27}
28
29bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
30{
31 return strcmp(str1, str2, caseSensitive) == 0;
32}
33
34public OnPluginStart()
35{
36 RegConsoleCmd("secure", Command_Protect, "", 0);
37 CreateConVar("sm_sprotect_version", "1.0", "", 0, false, 0, false, 0);
38 sprotect_site = CreateConVar("sm_sprotect_site", "http://yoursite.net/", "Link to password retrieve script", 262144, false, 0, false, 0);
39 db_setupDatabase();
40 AutoExecConfig(true, "plugin_protect", "sourcemod");
41 return 0;
42}
43
44public Action:Command_Protect(client, args)
45{
46 if (args != 2)
47 {
48 PrintToChat(client, "%s Errors in input! Example: /secure \"pass\" \"secret phrase\"", "[SPS]");
49 return Action:3;
50 }
51 decl String:szSteamId[32];
52 GetClientAuthString(client, szSteamId, 32);
53 decl String:query[256];
54 Format(query, 255, "SELECT pass FROM protect WHERE steamid ='%s'", szSteamId);
55 new Handle:hquery = SQL_Query(g_hDb, query, -1);
56 new var1;
57 if (hquery)
58 {
59 PrintToChat(client, "%s You are already registered!", "[SPS]");
60 return Action:3;
61 }
62 CloseHandle(hquery);
63 decl String:newpass[256];
64 decl String:kod[256];
65 decl String:Safenewpass5[256];
66 decl String:Safekod5[256];
67 GetCmdArg(1, newpass, 255);
68 GetCmdArg(2, kod, 255);
69 decl String:Safekod[512];
70 SQL_EscapeString(g_hDb, kod, Safekod, 511, 0);
71 decl String:Safenewpass[512];
72 SQL_EscapeString(g_hDb, newpass, Safenewpass, 511, 0);
73 MD5String(Safenewpass, Safenewpass5, 255);
74 MD5String(Safekod, Safekod5, 255);
75 Format(query, 255, "INSERT INTO protect (steamid, pass, kod) VALUES('%s', '%s', '%s');", szSteamId, Safenewpass5, Safekod5);
76 SQL_TQuery(g_hDb, SQLTCallback:9, query, any:0, DBPriority:1);
77 decl String:SiteStr[256];
78 GetConVarString(sprotect_site, SiteStr, 256);
79 PrintToChat(client, "%s Your SteamID sucessfully secured! Password: %s", "[SPS]", newpass, kod);
80 PrintToChat(client, "%s Don't forget to type in console xbox_autothrottle \"%s\" ", "[SPS]", newpass);
81 PrintToChat(client, "%s Enjoy! Password retrive link: %s", "[SPS]", SiteStr);
82 return Action:3;
83}
84
85public db_setupDatabase()
86{
87 decl String:szError[256];
88 g_hDb = SQL_Connect("Protect", false, szError, 255);
89 if (g_hDb)
90 {
91 db_createTables();
92 return 0;
93 }
94 LogError("[Protect] Unable to connect to database (%s)", szError);
95 PrintToServer("[Protect] Unable to connect to database");
96 return 0;
97}
98
99public db_createTables()
100{
101 SQL_LockDatabase(g_hDb);
102 SQL_FastQuery(g_hDb, "CREATE TABLE IF NOT EXISTS protect (steamid VARCHAR(32) PRIMARY KEY, pass VARCHAR(128), kod VARCHAR(128));", -1);
103 SQL_UnlockDatabase(g_hDb);
104 return 0;
105}
106
107public SQL_CheckCallback(Handle:owner, Handle:hndl, String:error[], data)
108{
109 if (!hndl)
110 {
111 LogError("%s Error inserting into database (%s)", "[SPS]", error);
112 }
113 return 0;
114}
115
116public OnClientPutInServer(client)
117{
118 QueryClientConVar(client, "xbox_autothrottle", ConVarQueryFinished:1, client);
119 return 0;
120}
121
122public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, String:cvarName[], String:cvarValue[])
123{
124 strcopy(xbox_autothrottleValue[client][0][0], 255, cvarValue);
125 db_selectPlayer(client);
126 return 0;
127}
128
129public db_selectPlayer(client)
130{
131 decl String:szQuery[256];
132 decl String:szSteamId[32];
133 GetClientAuthString(client, szSteamId, 32);
134 Format(szQuery, 255, "SELECT pass FROM protect WHERE steamid ='%s'", szSteamId);
135 SQL_TQuery(g_hDb, SQLTCallback:11, szQuery, client, DBPriority:1);
136 return 0;
137}
138
139public SQL_SelectPlayerCallback(Handle:owner, Handle:hndl, String:error[], data)
140{
141 if (hndl)
142 {
143 decl String:sValue[256];
144 new client = data;
145 decl String:xbox_autothrottleValue5[256];
146 new var1;
147 if (SQL_HasResultSet(hndl))
148 {
149 SQL_FetchString(hndl, 0, sValue, 256, 0);
150 MD5String(xbox_autothrottleValue[client][0][0], xbox_autothrottleValue5[client], 256);
151 if (StrEqual(sValue, xbox_autothrottleValue5[client], false))
152 {
153 PrintToChat(client, "%s Вы прошли авторизацию!", "[SPS]");
154 }
155 else
156 {
157 KickHim(client);
158 }
159 }
160 return 0;
161 }
162 else
163 {
164 LogError("[%s Error loading player (%s)", "[SPS]", error);
165 }
166 return 0;
167}
168
169KickHim(client)
170{
171 decl String:SiteStr[256];
172 GetConVarString(sprotect_site, SiteStr, 256);
173 KickClient(client, "%s This SteamID is secured. If you forgot password follow this link: %s", "[SPS]", SiteStr);
174 return 0;
175}
176
177MD5String(String:str[], String:output[], maxlen)
178{
179 decl x[2];
180 decl buf[4];
181 decl input[64];
182 new i = 0;
183 new ii = 0;
184 new len = strlen(str);
185 x[4] = 0;
186 x[0] = 0;
187 buf[0] = 1732584193;
188 buf[4] = -271733879;
189 buf[8] = -1732584194;
190 buf[12] = 271733878;
191 decl in[16];
192 in[56] = x[0];
193 in[60] = x[4];
194 new mdi = x[0] >> 3 & 63;
195 if (x[0] > len << 3 + x[0])
196 {
197 x[4] += 1;
198 }
199 x[0] = len << 3 + x[0];
200 new var2 = x[4];
201 var2 = len >> 29 + var2;
202 new c = 0;
203 len--;
204 while (len)
205 {
206 input[mdi] = str[c];
207 mdi += 1;
208 c += 1;
209 if (mdi == 64)
210 {
211 i = 0;
212 ii = 0;
213 while (i < 16)
214 {
215 in[i] = input[ii] | input[ii + 1] << 8 | input[ii + 2] << 16 | input[ii + 3] << 24;
216 i++;
217 ii += 4;
218 }
219 MD5Transform(buf, in);
220 mdi = 0;
221 }
222 }
223 decl padding[64];
224 decl inx[16];
225 inx[56] = x[0];
226 inx[60] = x[4];
227 mdi = x[0] >> 3 & 63;
228 new var1;
229 if (mdi < 56)
230 {
231 var1 = 56 - mdi;
232 }
233 else
234 {
235 var1 = 120 - mdi;
236 }
237 len = var1;
238 in[56] = x[0];
239 in[60] = x[4];
240 mdi = x[0] >> 3 & 63;
241 if (x[0] > len << 3 + x[0])
242 {
243 x[4] += 1;
244 }
245 x[0] = len << 3 + x[0];
246 new var3 = x[4];
247 var3 = len >> 29 + var3;
248 c = 0;
249 len--;
250 while (len)
251 {
252 input[mdi] = padding[c];
253 mdi += 1;
254 c += 1;
255 if (mdi == 64)
256 {
257 i = 0;
258 ii = 0;
259 while (i < 16)
260 {
261 in[i] = input[ii] | input[ii + 1] << 8 | input[ii + 2] << 16 | input[ii + 3] << 24;
262 i++;
263 ii += 4;
264 }
265 MD5Transform(buf, in);
266 mdi = 0;
267 }
268 }
269 i = 0;
270 ii = 0;
271 while (i < 14)
272 {
273 inx[i] = input[ii] | input[ii + 1] << 8 | input[ii + 2] << 16 | input[ii + 3] << 24;
274 i++;
275 ii += 4;
276 }
277 MD5Transform(buf, inx);
278 decl digest[16];
279 i = 0;
280 ii = 0;
281 while (i < 4)
282 {
283 digest[ii] = buf[i] & 255;
284 digest[ii + 1] = buf[i] >> 8 & 255;
285 digest[ii + 2] = buf[i] >> 16 & 255;
286 digest[ii + 3] = buf[i] >> 24 & 255;
287 i++;
288 ii += 4;
289 }
290 FormatEx(output, maxlen, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", digest, digest[4], digest[8], digest[12], digest[16], digest[20], digest[24], digest[28], digest[32], digest[36], digest[40], digest[44], digest[48], digest[52], digest[56], digest[60]);
291 return 0;
292}
293
294MD5Transform_FF(&a, &b, &c, &d, x, s, ac)
295{
296 a = d & ~b | c & b + x + ac + a;
297 a = a >> 32 - s | a << s;
298 a = b + a;
299 return 0;
300}
301
302MD5Transform_GG(&a, &b, &c, &d, x, s, ac)
303{
304 a = ~d & c | d & b + x + ac + a;
305 a = a >> 32 - s | a << s;
306 a = b + a;
307 return 0;
308}
309
310MD5Transform_HH(&a, &b, &c, &d, x, s, ac)
311{
312 a = d ^ c ^ b + x + ac + a;
313 a = a >> 32 - s | a << s;
314 a = b + a;
315 return 0;
316}
317
318MD5Transform_II(&a, &b, &c, &d, x, s, ac)
319{
320 a = ~d | b ^ c + x + ac + a;
321 a = a >> 32 - s | a << s;
322 a = b + a;
323 return 0;
324}
325
326MD5Transform(buf[], in[])
327{
328 new a = buf[0];
329 new b = buf[4];
330 new c = buf[8];
331 new d = buf[12];
332 MD5Transform_FF(a, b, c, d, in[0], 7, -680876936);
333 MD5Transform_FF(d, a, b, c, in[4], 12, -389564586);
334 MD5Transform_FF(c, d, a, b, in[8], 17, 606105819);
335 MD5Transform_FF(b, c, d, a, in[12], 22, -1044525330);
336 MD5Transform_FF(a, b, c, d, in[16], 7, -176418897);
337 MD5Transform_FF(d, a, b, c, in[20], 12, 1200080426);
338 MD5Transform_FF(c, d, a, b, in[24], 17, -1473231341);
339 MD5Transform_FF(b, c, d, a, in[28], 22, -45705983);
340 MD5Transform_FF(a, b, c, d, in[32], 7, 1770035416);
341 MD5Transform_FF(d, a, b, c, in[36], 12, -1958414417);
342 MD5Transform_FF(c, d, a, b, in[40], 17, -42063);
343 MD5Transform_FF(b, c, d, a, in[44], 22, -1990404162);
344 MD5Transform_FF(a, b, c, d, in[48], 7, 1804603682);
345 MD5Transform_FF(d, a, b, c, in[52], 12, -40341101);
346 MD5Transform_FF(c, d, a, b, in[56], 17, -1502002290);
347 MD5Transform_FF(b, c, d, a, in[60], 22, 1236535329);
348 MD5Transform_GG(a, b, c, d, in[4], 5, -165796510);
349 MD5Transform_GG(d, a, b, c, in[24], 9, -1069501632);
350 MD5Transform_GG(c, d, a, b, in[44], 14, 643717713);
351 MD5Transform_GG(b, c, d, a, in[0], 20, -373897302);
352 MD5Transform_GG(a, b, c, d, in[20], 5, -701558691);
353 MD5Transform_GG(d, a, b, c, in[40], 9, 38016083);
354 MD5Transform_GG(c, d, a, b, in[60], 14, -660478335);
355 MD5Transform_GG(b, c, d, a, in[16], 20, -405537848);
356 MD5Transform_GG(a, b, c, d, in[36], 5, 568446438);
357 MD5Transform_GG(d, a, b, c, in[56], 9, -1019803690);
358 MD5Transform_GG(c, d, a, b, in[12], 14, -187363961);
359 MD5Transform_GG(b, c, d, a, in[32], 20, 1163531501);
360 MD5Transform_GG(a, b, c, d, in[52], 5, -1444681467);
361 MD5Transform_GG(d, a, b, c, in[8], 9, -51403784);
362 MD5Transform_GG(c, d, a, b, in[28], 14, 1735328473);
363 MD5Transform_GG(b, c, d, a, in[48], 20, -1926607734);
364 MD5Transform_HH(a, b, c, d, in[20], 4, -378558);
365 MD5Transform_HH(d, a, b, c, in[32], 11, -2022574463);
366 MD5Transform_HH(c, d, a, b, in[44], 16, 1839030562);
367 MD5Transform_HH(b, c, d, a, in[56], 23, -35309556);
368 MD5Transform_HH(a, b, c, d, in[4], 4, -1530992060);
369 MD5Transform_HH(d, a, b, c, in[16], 11, 1272893353);
370 MD5Transform_HH(c, d, a, b, in[28], 16, -155497632);
371 MD5Transform_HH(b, c, d, a, in[40], 23, -1094730640);
372 MD5Transform_HH(a, b, c, d, in[52], 4, 681279174);
373 MD5Transform_HH(d, a, b, c, in[0], 11, -358537222);
374 MD5Transform_HH(c, d, a, b, in[12], 16, -722521979);
375 MD5Transform_HH(b, c, d, a, in[24], 23, 76029189);
376 MD5Transform_HH(a, b, c, d, in[36], 4, -640364487);
377 MD5Transform_HH(d, a, b, c, in[48], 11, -421815835);
378 MD5Transform_HH(c, d, a, b, in[60], 16, 530742520);
379 MD5Transform_HH(b, c, d, a, in[8], 23, -995338651);
380 MD5Transform_II(a, b, c, d, in[0], 6, -198630844);
381 MD5Transform_II(d, a, b, c, in[28], 10, 1126891415);
382 MD5Transform_II(c, d, a, b, in[56], 15, -1416354905);
383 MD5Transform_II(b, c, d, a, in[20], 21, -57434055);
384 MD5Transform_II(a, b, c, d, in[48], 6, 1700485571);
385 MD5Transform_II(d, a, b, c, in[12], 10, -1894986606);
386 MD5Transform_II(c, d, a, b, in[40], 15, -1051523);
387 MD5Transform_II(b, c, d, a, in[4], 21, -2054922799);
388 MD5Transform_II(a, b, c, d, in[32], 6, 1873313359);
389 MD5Transform_II(d, a, b, c, in[60], 10, -30611744);
390 MD5Transform_II(c, d, a, b, in[24], 15, -1560198380);
391 MD5Transform_II(b, c, d, a, in[52], 21, 1309151649);
392 MD5Transform_II(a, b, c, d, in[16], 6, -145523070);
393 MD5Transform_II(d, a, b, c, in[44], 10, -1120210379);
394 MD5Transform_II(c, d, a, b, in[8], 15, 718787259);
395 MD5Transform_II(b, c, d, a, in[36], 21, -343485551);
396 new var1 = buf;
397 var1[0] = var1[0] + a;
398 buf[4] += b;
399 buf[8] += c;
400 buf[12] += d;
401 return 0;
402}