· 7 years ago · Sep 12, 2018, 08:58 PM
1/* Components of Firefox */
2Components.utils.import("resource://gre/modules/Services.jsm");
3const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1", "nsIXMLHttpRequest");
4
5Components.utils.importGlobalProperties(["atob", "btoa"]);
6
7try {
8 Components.utils.import('resource://gre/modules/devtools/Console.jsm');
9} catch (err) {
10 Components.utils.import('resource://gre/modules/Console.jsm');
11}
12
13window = Components.classes["@mozilla.org/appshell/window-mediator;1"]
14 .getService(Components.interfaces.nsIWindowMediator)
15 .getMostRecentWindow("navigator:browser");
16
17if (typeof window === "undefined")
18 var window;
19else
20 var originalWindow = window;
21
22if (typeof document === "undefined")
23 var document;
24else
25 var originalDocument = document;
26
27/* Cookies service */
28var cookieMgr = Components.classes["@mozilla.org/cookiemanager;1"]
29 .getService(Components.interfaces.nsICookieManager);
30
31var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
32 .getService(Components.interfaces.nsICookieManager2);
33/*-----------------*/
34
35/* general */
36
37/*Imacros struct*/
38var execute = "CODE:SET !ERRORIGNORE YES\n" +
39 "SET !TIMEOUT_PAGE 320\n" +
40 "SET !TIMEOUT_TAG 0\n\n";
41
42var errorOne = "#EANF#";
43
44function FixPlay(file) {
45 var ret = iimPlay(file);
46
47 if (ret == -101)
48 throw new Error("Script STOP!");
49
50 return 0;
51}
52
53function search_site(content) {
54 document = window.content.document;
55 if (document.documentElement.innerHTML.search(content) == -1)
56 return false;
57 else
58 return true;
59}
60
61var extractData = function(archive, line, col) {
62 FixPlay(execute +
63 "SET !DATASOURCE " + archive + "\n" +
64 "SET !DATASOURCE_LINE " + line + "\n" +
65 "SET !EXTRACT {{!COL" + col + "}}");
66
67 return iimGetLastExtract().trim();
68}
69
70function random_num(min, max) {
71 return Math.floor(Math.random() * (max - min + 1)) + min;
72}
73
74var SetUserAgent = function(agent) {
75 Services.prefs.setCharPref("general.useragent.override", agent);
76 return agent;
77}
78
79var SetProxy = function(proxy) {
80 if (proxy == "0.0.0.0:0")
81 Services.prefs.setIntPref("network.proxy.type", 0);
82 else {
83 var array;
84 var array = proxy.split(":");
85
86 var ip = array[0],
87 port = array[1];
88
89 Services.prefs.setIntPref("network.proxy.type", 1);
90 Services.prefs.setBoolPref("network.proxy.share_proxy_settings", true);
91
92 Services.prefs.setIntPref("network.proxy.backup.ftp_port", port);
93 Services.prefs.setIntPref("network.proxy.backup.socks_port", port);
94 Services.prefs.setIntPref("network.proxy.backup.ssl_port", port);
95 Services.prefs.setIntPref("network.proxy.ssl_port", port);
96 Services.prefs.setIntPref("network.proxy.ftp_port", port);
97 Services.prefs.setIntPref("network.proxy.http_port", port);
98 Services.prefs.setIntPref("network.proxy.socks_port", port);
99
100 Services.prefs.setCharPref("network.proxy.socks", ip);
101 Services.prefs.setCharPref("network.proxy.ssl", ip);
102 Services.prefs.setCharPref("network.proxy.http", ip);
103 Services.prefs.setCharPref("network.proxy.ftp", ip);
104 Services.prefs.setCharPref("network.proxy.backup.ssl", ip);
105 Services.prefs.setCharPref("network.proxy.backup.socks", ip);
106 Services.prefs.setCharPref("network.proxy.backup.ftp", ip);
107
108 }
109
110 return proxy;
111}
112
113var ClearFix = function() {
114 FixPlay(execute + "TAB T=1\nTAB CLOSEALLOTHERS\nURL GOTO=about:newtab");
115
116 //remove cookies
117 var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
118 .getService();
119 cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
120 cmgr.removeAll();
121
122 // Clear SQL VACUUM
123 try {
124 var sql = Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase);
125 sql.DBConnection.executeSimpleSQL("VACUUM");
126 } catch (err) {}
127
128}
129
130function requestf(url, postdata, async, method) {
131
132 if (retry > 3) {
133 retry = 0
134 FixPlay(execute + "WAIT SECONDS = 15")
135 }
136
137 console.log("request \nURL:" + url + "\nPOST:" + postdata + "\n")
138
139 loadScriptFromURL('https://code.jquery.com/jquery-3.3.1.min.js');
140 jq = window.$,
141 JQuery = window.JQuery;
142
143 var resultr = jq.ajax({
144 url: url,
145 headers: {
146
147 'Content-Type': 'application/json'
148 },
149 type: method,
150 async: async,
151 data: postdata,
152 success: function(data) {
153 return data
154 },
155 error: function(XMLHttpRequest, textStatus, errorThrown) {
156 retry++
157 }
158 });
159
160 console.log("request \nURL:" + url + "\n STATUS:" + resultr['status'] + "\nPOST:" + postdata + "\nAnswer:" + resultr['responseText'] + "\n")
161
162 return resultr['responseText'];
163}
164
165function request(url, postdata, async, method, token) {
166
167 if (retry > 3) {
168 retry = 0
169 FixPlay(execute + "WAIT SECONDS = 15")
170 }
171
172 console.log("request \nURL:" + url + "\nPOST:" + postdata + "\n")
173
174 loadScriptFromURL('https://code.jquery.com/jquery-3.3.1.min.js');
175 jq = window.$,
176 JQuery = window.JQuery;
177
178 var resultr = jq.ajax({
179 url: url,
180 headers: {
181
182 'Authorization': 'Token ' + token,
183 'Content-Type': 'application/json'
184 },
185 type: method,
186 async: async,
187 data: postdata,
188 success: function(data) {
189 return data
190 },
191 error: function(XMLHttpRequest, textStatus, errorThrown) {
192 retry++
193 }
194 });
195
196 console.log("request \nURL:" + url + "\n STATUS:" + resultr['status'] + "\nPOST:" + postdata + "\nAnswer:" + resultr['responseText'] + "\n")
197
198 return resultr['responseText'];
199}
200
201// Array Remove - By John Resig (MIT Licensed)
202Array.prototype.remove = function(from, to) {
203 var rest = this.slice((to || from) + 1 || this.length);
204 this.length = from < 0 ? this.length + from : from;
205 return this.push.apply(this, rest);
206};
207
208function SetCookie(cookie) {
209
210 cookie_request = atob(cookie);
211
212
213 if (cookie_request.search("CookieT") != -1) { // Old versions
214 var obj = JSON.parse(cookie_request)
215 for (var i = 0; i < obj["CookieT"]; i++) {
216 var host = obj["Cookie" + i + ""]["host"],
217 path = obj["Cookie" + i + ""]["path"],
218 name = obj["Cookie" + i + ""]["name"],
219 value = obj["Cookie" + i + ""]["value"],
220 expires = obj["Cookie" + i + ""]["expires"],
221 isSecure = obj["Cookie" + i + ""]["isSecure"]
222
223 if (obj["Cookie" + i + ""]["expires"] == "0") {
224 var d = new Date();
225 expires = ((d.getTime() - d.getMilliseconds()) / 1000) + 314496000;
226 }
227 if (name == "PREF")
228 cookieManager.add(host, path, name, "f1=50000000&al=en&f6=c1008", isSecure, false, isSecure, expires);
229 else
230 cookieManager.add(host, path, name, value, isSecure, false, isSecure, expires);
231 };
232 } else if (cookie != '' && cookie != 'null') { // new versions
233 var obj = JSON.parse(cookie_request)
234
235 for (var i = 0; i < Object.keys(obj).length - 1; i++) {
236 var host = obj[i]["host"],
237 path = obj[i]["path"],
238 name = obj[i]["name"],
239 value = obj[i]["value"],
240 expires = obj[i]["expires"],
241 isSecure = obj[i]["isSecure"]
242 if (obj[i]["expires"] == "0") {
243 var d = new Date();
244 expires = ((d.getTime() - d.getMilliseconds()) / 1000) + 314496000;
245 }
246
247 if (name == "PREF") {
248 cookieManager.add(host, path, name, "f1=50000000&al=en&f6=c1008", isSecure, false, isSecure, expires);
249 } else {
250 cookieManager.add(host, path, name, value, isSecure, false, isSecure, expires);
251 }
252 };
253 var d = new Date();
254 expires = ((d.getTime() - d.getMilliseconds()) / 1000) + 314496000;
255
256 cookieManager.add('.youtube.com', "/", "PREF", "f1=50000000&al=en&f6=c1008", false, false, false, expires);
257 }
258
259}
260
261function SaveCookie() {
262 var mc = 0;
263 var cookieuri = {}
264
265 for (var e = cookieMgr.enumerator; e.hasMoreElements();) {
266 var cookie = e.getNext().QueryInterface(Components.interfaces.nsICookie);
267 var valuec = cookie.value
268 cookieuri[mc] = {
269 'host': cookie.host,
270 'path': cookie.path,
271 'name': cookie.name,
272 'value': valuec,
273 'isSecure': cookie.isSecure,
274 'expires': cookie.expires
275 }
276 mc++;
277 }
278
279
280 var obj = new Object();
281 obj.cookie = btoa(JSON.stringify(cookieuri));
282
283 var jsonString = JSON.stringify(obj);
284
285 FixPlay(execute + "TAB T=1\nTAB CLOSEALLOTHERS\nURL GOTO=about:newtab");
286
287 request(api + "/account/cookie/" + monitor, jsonString, false, "POST", token)
288
289}
290
291function youtube_parser(url) {
292 var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
293 var match = url.match(regExp);
294 if (match && match[2].length == 11) {
295 return match[2];
296 }
297}
298
299/* end struct of iMacros*/
300
301var version = 1.0;
302var failed = 0;
303var complete = 0;
304var d = new Date();
305var expires = ((d.getTime() - d.getMilliseconds()) / 1000) + 314496000;
306var api = "https://socialstrendy.com/api";
307var token = null;
308var monitor = null;
309var retry = 0
310var limittask = 3
311var limit = 0
312var retry = 0
313
314/* model user */
315var idUser = null;
316var account = null;
317var password = null;
318var cookie = null;
319var email_recovery = null;
320var phone = null;
321var proxy = null;
322var useragent = null;
323var cookie = null;
324
325/* model site*/
326var balance = 0
327
328/* --------- */
329
330function main() {
331 SetProxy("0.0.0.0:0");
332 ClearFix();
333 token = extractData("token.csv", 1, 1);
334
335 if (token == '') {
336 alert('We do not have data of your account, We are going to add the account of socialstrendy.com')
337 var account = prompt("Please enter your username", "");
338 var password = prompt("Please enter your password", "");
339
340 var obj = new Object();
341 obj.username = account;
342 obj.password = password;
343
344 var jsonString = JSON.stringify(obj);
345
346 token = requestf(api + "/login", jsonString, false, 'POST', false);
347 token = JSON.parse(token);
348
349 FixPlay(execute + "SET !EXTRACT " + token['token'] + "\n" + "SAVEAS TYPE=EXTRACT FOLDER={{!FOLDER_DATASOURCE}} FILE=token.csv")
350
351 token = extractData("token.csv", 1, 1);
352 }
353
354
355 return create_monitor()
356}
357
358function create_monitor() {
359
360 monitor = extractData("monitor.csv", 1, 1);
361 if (monitor == '') {
362 var query = request(api + "/monitor", false, false, 'GET', token)
363 query = JSON.parse(query);
364 monitor = query['monitor_id']
365 balance = query['balance']
366
367 FixPlay(execute + "SET !EXTRACT " + monitor + "\n" + "SAVEAS TYPE=EXTRACT FOLDER={{!FOLDER_DATASOURCE}} FILE=monitor.csv")
368
369 token = extractData("token.csv", 1, 1);
370 }
371
372
373 change_account()
374}
375
376
377function change_account() {
378 SetProxy("0.0.0.0:0");
379 quarter()
380 ClearFix();
381 cookieManager.add('.youtube.com', "/", "PREF", "f1=50000000&al=en&f6=c1008", false, false, false, expires);
382
383 var query = request(api + "/account/get/" + monitor + "/0", false, false, "GET", token);
384 query = JSON.parse(query);
385
386 if (query == null) {
387 FixPlay(execute + "WAIT SECONDS = 30")
388 return change_account();
389 }
390
391 if (query['message'] == "No accounts available for now.") {
392 FixPlay(execute + "WAIT SECONDS = 30")
393 return change_account()
394 }
395 limit = 0
396
397 idUser = query['id'];
398 account = query['account'];
399 password = query['password'];
400 cookie = query['cookie'];
401 email_recovery = query['email_recovery'];
402 phone = query['phone'];
403 proxy = SetProxy(query['proxy']);
404 useragent = SetUserAgent(query['useragent']);
405 cookie = SetCookie(query['cookie']);
406
407
408 return checktask();
409}
410
411
412var checktask = function() {
413
414
415 while (true) {
416 if (limittask <= limit) {
417 //SaveCookie();
418 return change_account();
419 }
420
421 var query = request(api + "/order/" + monitor, false, false, "GET", token)
422
423 if (typeof query === "undefined")
424 return checktask();
425
426 try {
427 query = JSON.parse(query);
428 } catch (err) {
429 //SaveCookie();
430 return change_account();
431 }
432
433 if (query['link'] == null) {
434
435 limit++;
436 return checktask();
437 } else {
438
439 action(query['cheating'], query['link'], query['id'])
440 FixPlay(execute + 'WAIT SECONDS = 20')
441 checkt(query['id'])
442 }
443
444 }
445
446}
447
448function action(type, link, id) {
449 limit++;
450
451 loadScriptFromURL('https://code.jquery.com/jquery-3.3.1.min.js');
452 jq = window.$,
453 JQuery = window.JQuery;
454
455 setstatus("Make task");
456
457 if (typeof youtube_parser(link) === "undefined")
458 return checktask()
459
460 var resultr = jq.ajax({
461 url: 'https://www.youtube.com/watch?v=' + youtube_parser(link),
462 type: 'GET',
463 async: false,
464 success: function(data) {
465 return data
466 },
467 error: function(XMLHttpRequest, textStatus, errorThrown) {
468 return change_account();
469 }
470 });
471
472 if (typeof resultr['responseText'] === "undefined")
473 return action(type, link, id)
474
475 if (resultr['responseText'].search("accounts.google.com/ServiceLogin") != -1) {
476 if (logingoogle(account, password, email_recovery) != 1) {
477 request(api + "/account/update/" + monitor + "/1", false, false, "GET", token);
478 //SaveCookie();
479 return change_account()
480 }
481 SaveCookie();
482 return action(type, link, id)
483 }
484
485
486 loadScriptFromURL('https://code.jquery.com/jquery-3.3.1.min.js');
487 jq = window.$,
488 JQuery = window.JQuery;
489
490 document = window.content.document;
491 var youtube_token = regp(resultr['responseText'], /'X-YouTube-Identity-Token': "(.*?)"/g, 1)
492 var client_version = regp(resultr['responseText'], /INNERTUBE_CONTEXT_CLIENT_VERSION: "(.*?)",/g, 1)
493 var page_cl = regp(resultr['responseText'], /'PAGE_CL': (.*?),/g, 1)
494 var page_build = regp(resultr['responseText'], /'PAGE_BUILD_LABEL': "(.*?)",/g, 1)
495 var checksum = regp(resultr['responseText'], /'VARIANTS_CHECKSUM': "(.*?)",/g, 1)
496 var data_post = regp(resultr['responseText'], /data-post-data="(.*?)"/g, 1)
497 var token_xsrf = regp(resultr['responseText'], /XSRF_TOKEN('|"):( |)"(.*?)"/g,3)
498
499
500 FixPlay(execute + '\nWAIT SECONDS = 40')
501
502
503 switch (type) {
504 case 0:
505
506 video_id = youtube_parser(link)
507 //var sej = '{"clickTrackingParams":"","commandMetadata":{"webCommandMetadata":{"url":"/service_ajax","sendPost":true}},"likeEndpoint":{"status":"LIKE","target":{"videoId":"'+video_id+'"}}}'
508 var postdata = data_post[0].replace(/&/g, '&') + '&session_token=' + encodeURIComponent(token_xsrf)
509
510 var resultr = jq.ajax({
511 url: "https://www.youtube.com/service_ajax?name=likeEndpoint",
512 headers: {
513
514 'X-YouTube-Client-Name': "1",
515 'X-YouTube-Client-Version': client_version,
516 'X-Youtube-Identity-Token': youtube_token,
517 'X-YouTube-Page-CL': page_cl,
518 'X-YouTube-Page-Label': page_build,
519 'X-YouTube-Variants-Checksum': checksum,
520 'X-YouTube-Utc-Offset': "-240"
521 },
522 type: "POST",
523 data: postdata,
524 async: false,
525 });
526 break;
527
528 case 1:
529 video_id = youtube_parser(link)
530
531 var sej = '{"clickTrackingParams":"","commandMetadata":{"webCommandMetadata":{"url":"/service_ajax","sendPost":true}},"likeEndpoint":{"status":"DISLIKE","target":{"videoId":"' + video_id + '"}}}'
532 var postdata = 'sej=' + encodeURIComponent(sej) + '&session_token=' + encodeURIComponent(token_xsrf)
533 var resultr = jq.ajax({
534 url: "https://www.youtube.com/service_ajax?name=likeEndpoint",
535 type: "POST",
536 data: postdata,
537 async: false,
538 });
539
540 break;
541
542 case 2:
543 channel = link.replace(/https:\/\/youtube.com\/channel\//g, "");
544
545 var sej = '{"clickTrackingParams":"","commandMetadata":{"webCommandMetadata":{"url":"/service_ajax","sendPost":true}},"subscribeEndpoint":{"channelIds":["' + channel + '"],"params":"EgIIAg%3D%3D"}}'
546 var postdata = 'sej=' + encodeURIComponent(sej) + '&session_token=' + encodeURIComponent(token_xsrf)
547 var resultr = jq.ajax({
548 url: "https://www.youtube.com/service_ajax?name=subscribeEndpoint",
549 type: "POST",
550 data: postdata,
551 async: false,
552 });
553 break;
554
555 case 7:
556 //FixPlay("libs/tw/fw")
557 break;
558
559 default:
560 return change_account();
561 break;
562 }
563
564}
565
566
567function checkt(id) {
568 var query = request(api + "/order/check/" + id, false, false, "GET", token)
569
570 try {
571 query = JSON.parse(query);
572 } catch (err) {
573 return checkt(id);
574 }
575
576 if (query['message'] == "Done") {
577 complete++;
578 balance = query['balance'];
579 } else {
580 failed++;
581 }
582}
583
584
585var setstatus = function(status) {
586
587 var obj = new Object();
588 obj.update = status;
589
590 var jsonString = JSON.stringify(obj);
591
592 //request(api + "/monitor/update/" + monitor + "/0", jsonString, true, "POST", token);
593
594 iimDisplay(
595 "SocialsTrendy BOT V" + version + "\n" +
596 "Status: " + status + "\n" +
597 "Balance: " + balance + "\n" +
598 "Task Complete: " + complete + "\n" +
599 "Task Failed: " + failed + "\n" +
600 "Account: " + account + "\n" +
601 "Proxy: " + proxy + "\n" +
602 "UserAgent: " + useragent + "\n"
603 )
604}
605
606
607
608function loadScriptFromURL(url) {
609 var request = Components.classes['@mozilla.org/xmlextras/xmlhttprequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest),
610 async = false;
611 request.open('GET', url, async);
612 request.send();
613 if (request.status !== 200) {
614 var message = 'an error occurred while loading script at url: ' + url + ', status: ' + request.status;
615 iimDisplay(message);
616 return false;
617 }
618 eval(request.response);
619 return true;
620}
621
622function regp(str, regex, row) {
623 var res = [];
624 var m;
625 if (regex.global) {
626 while (m = regex.exec(str)) {
627 res.push(m[row]);
628 }
629 } else {
630 if (m = regex.exec(str)) {
631 res.push(m[row]);
632 }
633 }
634 return res;
635}
636
637var logingoogle = function(email, password, email_recovery) {
638 cookieManager.add('.youtube.com', "/", "PREF", "f1=50000000&al=en&f6=c1008", false, false, false, expires);
639 iimSet("EMAIL", email);
640 iimSet("PASSWORD", password);
641
642 FixPlay("libs/google/login");
643
644 var site = "" + window.location + "";
645 if (iimGetLastExtract(1).trim() == "Verify it's you" || site.search(/selectchallenge/) != -1) {
646 if (search_site("Confirm your recovery email")) {
647 setstatus("Pass security Google Email Recovery");
648 iimSet("email_rc", email_recovery);
649 FixPlay("libs/google/verifyemail");
650 }
651
652 }
653
654 var site = "" + window.location + "";
655 if (site.search(/signin\/newfeatures/) != -1) {
656 FixPlay(execute +
657 "TAG POS=1 TYPE=IMG ATTR=SRC:*keyboard_arrow_down_white_*.*\n" +
658 "WAIT SECONDS = 2\n" +
659 "TAG POS=1 TYPE=IMG ATTR=SRC:*keyboard_arrow_down_white_*.*\n" +
660 "WAIT SECONDS = 2\n" +
661 "TAG POS=1 TYPE=IMG ATTR=SRC:*keyboard_arrow_down_white_*.*\n" +
662 "WAIT SECONDS = 2\n" +
663 "TAG POS=2 TYPE=SPAN ATTR=TXT:I<SP>agree\nTAG POS=1 TYPE=SPAN ATTR=TXT:Done");
664 }
665
666 if (site.search(/privacyreminder/) != -1) {
667 FixPlay(execute +
668 "TAG POS=2 TYPE=DIV ATTR=CLASS:ZFr60d<SP>CeoRYc\n" +
669 "WAIT SECONDS = 2\n" +
670 "TAG POS=2 TYPE=DIV ATTR=CLASS:ZFr60d<SP>CeoRYc\n" +
671 "WAIT SECONDS = 2\n" +
672 "TAG POS=2 TYPE=DIV ATTR=CLASS:ZFr60d<SP>CeoRYc\n" +
673 "WAIT SECONDS = 2\n" +
674 "TAG POS=2 TYPE=DIV ATTR=CLASS:ZFr60d<SP>CeoRYc\n" +
675 "WAIT SECONDS = 2\nTAG POS=1 TYPE=SPAN ATTR=TXT:Done"
676 )
677 }
678
679 if (site.search(/recoveryoptions/) != -1) {
680 FixPlay(execute +
681 "WAIT SECONDS = 3\n" +
682 "EVENT TYPE=CLICK SELECTOR=\"#view_container>DIV>DIV>DIV>DIV>DIV>DIV:nth-of-type(3)>DIV\" BUTTON=0\n" +
683 "TAG POS=2 TYPE=DIV ATTR=TXT:Done\n" +
684 "WAIT SECONDS = 8\nTAG POS=1 TYPE=SPAN ATTR=TXT:Done");
685 }
686
687 var o = 0
688 while (true) {
689 o++
690 FixPlay(execute + 'TAG POS=1 TYPE=DIV ATTR=TXT:Type<SP>the<SP>text<SP>you<SP>hear<SP>or<SP>see EXTRACT=TXT')
691 var resul = iimGetLastExtract().trim()
692
693 if (o > 2)
694 break
695
696 if (resul != errorOne) {
697 FixPlay('/libs/ch2')
698 } else
699 break
700 }
701
702
703 FixPlay(execute + "WAIT SECONDS = 5");
704
705 var site = "" + window.location + "";
706
707 if (search_site("yt-masthead-user") || search_site("ytd-masthead") || site == "https://www.youtube.com") {
708 return 1;
709 } else
710 return -1;
711
712}
713
714function quarter() {
715 window.resizeTo(
716 random_num(700, 1350),
717 random_num(500, 900)
718 );
719}
720
721
722main();