// ==UserScript==
// @name Toolkit for HE
// @namespace https://greasyfork.org/en/scripts/35559-toolkit-for-he
// @version 0.9.2
// @description Tools for Hacker Experience Legacy.
// @author SmartishYT
// @match *://*.hackerexperience.com/*
// @run-at document-end
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_addStyle
// @grant GM_listValues
// @grant GM_deleteValue
// ==/UserScript==
/*
Auto hide-me
*/
function hideMe() {
var logArea = $('form.log').find('.logarea'), val = logArea.val(), myIp = GM_getValue("myIp");
if (typeof(val) != "undefined" && val.length > 0) {
var logLines = val.split('\n'), newLines = [], foundIP = false;
$.each(logLines, function(i, el) {
if (el.indexOf(myIp) != -1) {
foundIP = true;
} else {
if (el.trim().length > 0) newLines.push(el);
}
});
if (foundIP) {
logArea.val(newLines.join('\n'));
$('form.log').submit();
}
}
}
/*
Update my IP
*/
setTimeout(function(){
var myIp = $('.header-ip-show').text();
var storedIp = GM_getValue("myIp");
if (storedIp != myIp) {
GM_setValue("myIp", myIp);
}
}, 500);
if (window.location.href.indexOf("internet") != -1) {
if (!GM_getValue("myIp")) {
setTimeout(hideMe, 500);
} else {
hideMe();
}
}
/*
IP database
*/
function loadIpLogs(dbName) {
if (!GM_getValue(dbName) ) {
GM_setValue(dbName, "{}");
}
var text = GM_getValue(dbName), db = JSON.parse(text);
var getBtns = function (i) {
var savedLink = '<a href="#" id="saveip" name="' + i + '">[save]</a>';
var ignoreLink = '<a href="#" id="ignoreip" name="' + i + '">[ignore]</a>';
if (dbName == "savedDb") savedLink = "";
if (dbName == "ignoreDb") ignoreLink = "";
return '<a href="#" id="deleteip" name="' + i + '">[delete]</a> ' + savedLink + ' ' + ignoreLink + ' <a href="http://legacy.hackerexperience.com/internet?ip=' + i +'&action=hack&method=bf" id="bruteip" name="' +
i + '" target="_blank">[brute]</a>';
};
for (var i in db) {
if (db.hasOwnProperty(i)) {
$('#logdblist').append('<div id="' + i + '"><a href="http://legacy.hackerexperience.com/internet?ip=' + i + '" id="loadlocal" name="' + i + '">' + i + '</a> ' +
getBtns(i) + '</br></div>');
}
}
GM_addStyle('#logdblist a#loadlocal {float: left;}');
GM_addStyle('#logdblist a#deleteip, #logdblist a#bruteip, #logdblist a#saveip {float: right;}');
if (dbName != "ignoreDb") {
GM_addStyle('#logdblist a#ignoreip {float: right;}');
}
var removeFromAll = function (name) {
var local = JSON.parse(GM_getValue("localDb")),
internet = JSON.parse(GM_getValue("internetDb")),
ignore = JSON.parse(GM_getValue("ignoreDb")),
saved = JSON.parse(GM_getValue("savedDb"));
delete internet[name];
delete local[name];
delete ignore[name];
delete saved[name];
GM_setValue("localDb", JSON.stringify(local));
GM_setValue("internetDb", JSON.stringify(internet));
GM_setValue("ignoreDb", JSON.stringify(ignore));
GM_setValue("savedDb", JSON.stringify(saved));
};
$('a[id=deleteip]').click(function () {
var name = $(this).attr('name');
removeFromAll(name);
$('div[id="'+ name +'"]').remove();
});
if (dbName != "ignoreDb") {
$('a[id=ignoreip]').click(function () {
var name = $(this).attr('name');
removeFromAll(name);
$('div[id="'+ name +'"]').remove();
var dbig = JSON.parse(GM_getValue("ignoreDb"));
if (!dbig[name]) dbig[name] = true;
GM_setValue("ignoreDb", JSON.stringify(dbig));
});
}
if (dbName != "savedDb") {
$('a[id=saveip]').click(function () {
var name = $(this).attr('name'), saved = {}, saveText = GM_getValue("savedDb");
if (!saveText) saveText = "{}";
saved = JSON.parse(saveText);
removeFromAll(name);
$('div[id="'+ name +'"]').remove();
if (!saved[name]) saved[name] = true;
GM_setValue("savedDb", JSON.stringify(saved));
});
}
}
function setupIpDbPage(dbtype, dbname, dbKey) {
/*jshint multistr: true */
$('.widget-content').html('\
<div class="span12">\
<div class="widget-box text-left" style="margin-left: auto;margin-right: auto; width: 400px;">\
<div class="widget-title"><span class="icon"><span class="he16-collect_info"></span></span>\
<h5>Select ' + dbname + ' IP</h5>\
<button type="button" id="wipedb" key="'+dbKey+'" style="position:absolute;right:10px;top:5px;">Wipe</button>\
</div>\
<div class="widget-content ' + dbtype + 'ipdb"><div id="logdblist"></div></div>\
</div>\
</div>' );
GM_addStyle('#logdblist { max-height: 400px; overflow: auto; padding: 5px; }');
$('#wipedb').click(function() {
var key = $(this).attr('key');
$('#logdblist').text("");
GM_deleteValue(key);
});
}
function ipDBPage(){
document.title = 'IP Database';
$('.nav.nav-tabs:first').html('<li class="link active" id="tabweb"><a href="#" id="weblog"><span class="icon-tab he16-internet_log"></span>Internet</a></li>');
$('.nav.nav-tabs:first').append('<li class="link" id="tablocal"><a href="#" id="locallog"><span class="icon-tab he16-internet_log"></span>Local</a></li>');
$('.nav.nav-tabs:first').append('<li class="link" id="tabsaved"><a href="#" id="savedlog"><span class="icon-tab he16-internet_log"></span>Saved</a></li>');
$('.nav.nav-tabs:first').append('<li class="link" id="tabignore"><a href="#" id="ignorelog"><span class="icon-tab he16-internet_log"></span>Ignored</a></li>');
$('.label.label-info').remove();
$('#link0').attr('href','log?ipdb'); $('#link0').html('IPDB');
$('#content-header h1').html('IP Database');
setupIpDbPage('internet', 'Internet', 'internetDb');
loadIpLogs("internetDb");
}
if (window.location.href.search('ipdb') > 0) {
$('#sidebar ul li.active').attr('class','');
$('#sidebar ul').append('<li class="active"><a href="log?ipdb"><i class="fa fa-inverse fa-list-ul"></i> <span>IP Database</span></a></li>');
ipDBPage();
} else {
$('#sidebar ul').append('<li><a href="log?ipdb"><i class="fa fa-inverse fa-list-ul"></i> <span>IP Database</span></a></li>');
}
GM_addStyle('.fa-list-ul {content: "\f0ca";}');
$('#tablocal').click(function() {
$('#tablocal').attr('class','link active');
$('#tabweb').attr('class','link');
$('#tabignore').attr('class','link');
$('#tabsaved').attr('class', 'link');
setupIpDbPage('local', 'Local', 'localDb');
loadIpLogs("localDb");
});
$('#tabweb').click(function() {
$('#tabweb').attr('class','link active');
$('#tablocal').attr('class','link');
$('#tabignore').attr('class','link');
$('#tabsaved').attr('class', 'link');
setupIpDbPage('web', 'Internet', 'internetDb');
loadIpLogs("internetDb");
});
$('#tabsaved').click(function() {
$('#tabweb').attr('class','link ');
$('#tablocal').attr('class','link');
$('#tabignore').attr('class','link');
$('#tabsaved').attr('class', 'link active');
setupIpDbPage('save', 'Saved', 'savedDb');
loadIpLogs("savedDb");
});
$('#tabignore').click(function() {
$('#tabignore').attr('class','link active');
$('#tablocal').attr('class','link');
$('#tabweb').attr('class','link');
$('#tabsaved').attr('class', 'link');
setupIpDbPage('ignore', 'Ignored', 'ignoreDb');
loadIpLogs("ignoreDb");
});
/*
Alert handling
*/
function alertText() {
var alertArray = $(".alert.alert-success").text().split("\n");
var aText = alertArray.filter(function(val) {
return val.length > 1;
});
if (aText.length > 0) {
return aText[0].trim();
} else {
return;
}
}
function successAlert(text) {
if (text) {
switch (true) {
case text === "Success! Software installed.":
return true;
case text === "Success! Software successfully hidden.":
return true;
case text === "Success! Software successfully uploaded.":
return true;
case text === "Success! Software successfully deleted.":
return true;
case text === "Success! Software successfully downloaded.":
return true;
case text === "Success! Software successfully seeked.":
return true;
case text.indexOf("virus removed") != -1:
return true;
case text.indexOf("viruses removed") != -1:
return true;
}
}
return false;
}
// Switch to logs on success alert (to trigger auto hideme)
if (window.location.href.indexOf("internet") != -1 && successAlert(alertText())) {
window.location.replace("http://legacy.hackerexperience.com/internet?view=logs");
}
if (window.location.href.indexOf("software") != -1 && alertText() === "Success! Software successfully downloaded.") {
window.location.replace("http://legacy.hackerexperience.com/internet?view=logs");
}
/*
Clear log buttons
*/
if ($('#link2').text() == " Log file" || $('#link0').text() == " Log File" || $('#link2').text() == " Log File") {
$('form.log input.btn').before('<input class="btn btn-inverse" id="clearlog" type="button" value="Clear" style="width: 80px;"><span> </span>');
}
$('#clearlog').click(function(){
if ($('form.log').length) {
$('form.log').find('.logarea').val('');
$('form.log').submit();
} else {
console.log('No log found');
}
});
/*
Hacked Database mods
*/
function toggleFavorite(ip, elem) {
var favorites = JSON.parse(GM_getValue("favorites"));
if (favorites[ip]) {
delete favorites[ip];
elem.removeClass("fa-star");
elem.addClass("fa-star-o");
} else {
favorites[ip] = true;
elem.removeClass("fa-star-o");
elem.addClass("fa-star");
}
GM_setValue("favorites", JSON.stringify(favorites));
}
if (window.location.href.indexOf("legacy.hackerexperience.com/list") != -1 ) {
GM_addStyle('.fa-star {content: "\f005";}');
GM_addStyle('.fa-star-o {content: "\f006";}');
GM_addStyle('i.favorite {color: #DAA520;}');
var favText = GM_getValue("favorites"), favorites = {};
if (!favText) {
GM_setValue("favorites", "{}");
}
favorites = JSON.parse(GM_getValue("favorites"));
$("ul.list.ip li").each(function(){
var entry = $(this);
var pass = $(this).find(".list-user span.small").get(1).firstChild.data;
var url = $(this).find(".list-ip a").attr("href") + "&action=login&user=root&pass=" + pass;
$(this).find(".list-ip").after(' <a href="' + url + '" style="float:left;margin: 5px 5px 0px 5px;font-size:14px">[login]</a>');
console.log(url);
var ip = entry.find(".list-ip #ip").text();
if (favorites[ip]) {
entry.find(".list-actions").append('<i class="favorite fa-2x fa fa-inverse fa-star"></i>');
} else {
entry.find(".list-actions").append('<i class="favorite fa-2x fa fa-inverse fa-star-o"></i>');
}
entry.find("i.favorite").click(function () {
toggleFavorite(ip, $(this));
});
});
}
/*
Log monitor (ip-scraper will grab any IP's)
*/
function refreshPage(){
if (window.location.href.search('ipdb') > 0) return; //dont refresh ipdb
if (GM_getValue(window.location.pathname + "monitorLog")) {
location.reload();
}
}
function Regs() {
this.generating = /Server\s\[\d+\.\d+\.\d+\.\d+\].*(mined|mailed).*generating.*/;
this.transfer = /.*(Funds|)were transferred (to|).*/;
this.collected = /.*localhost collected.*/;
this.login = /^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2} - localhost logged.*on account.*/;
this.bought = /.*localhost bought license.*/;
this.research = /.*localhost researched.*/;
}
var localRegs = new Regs();
var fullRegs = new Regs();
fullRegs.localhost = /^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\s-\slocalhost.*/;
function checkLine(line, regObj) {
for (var prop in regObj) {
if (line.match(regObj[prop])) {
return true;
}
}
return false;
}
function scrapeLog() {
var logArea = $('form.log').find('.logarea'), logText = logArea.val(), logsFound = false, logResult = [];
var stored = [], storedText = GM_getValue(window.location.pathname + "storedLogs");
if (!storedText) storedText = "";
if (storedText.length > 0) stored = storedText.split("\n");
if (logText !== "undefined" && logText.length > 0) {
var split = logText.split("\n");
for (i = 0; i < split.length; i++) {
var line = split[i].trim();
if (line.length === 0) continue;
if (window.location.pathname === "/log") {
if (checkLine(line, localRegs) === true) logsFound = true;
else logResult.push(line);
}
console.log(stored.indexOf(line) + " " + line);
if (stored.indexOf(line) === -1 && line.length > 0 && checkLine(line, fullRegs) === false) {
console.log("Pushing line" + line);
stored.push(line);
}
}
if (stored.length > 0) GM_setValue(window.location.pathname + "storedLogs", stored.join("\n").trim());
}
if (logsFound) {
logArea.val(logResult.join("\n"));
$('form.log').submit();
}
}
if ($('#cf-error-details h2[data-translate="what_happened"]').text().trim().length > 0) { //detect cloudflare error
setTimeout(refreshPage, 3000);
}
if (GM_getValue(window.location.pathname + "monitorLog")) {
console.log("started backup timeout");
setTimeout(refreshPage, 30000);//backup page refresher
}
if ($('#link0').text() == " Log File" || $('#link2').text() == " Log file" || $('#link2').text() == " Log File") {
var monitor = GM_getValue(window.location.pathname + "monitorLog");
if (monitor === "undefined") {
GM_setValue(window.location.pathname + "monitorLog", false);
monitor = false;
}
var addClick = function () {
$('form.log #logmonitor').click(function () {
monitor = true;
GM_setValue(window.location.pathname + "monitorLog", true);
$('input#logmonitor').attr("value", "Stop");
setTimeout(refreshPage, 3000);
});
};
if (monitor) {
$('form.log input#clearlog').before('<input class="btn btn-inverse" id="logmonitor" type="button" value="Stop" style="width: 80px;"><span> </span>');
$('form.log #logmonitor').click(function () {
GM_setValue(window.location.pathname + "monitorLog", false);
$('input#logmonitor').attr("value", "Monitor");
monitor = false;
addClick();
$("textarea.logarea").val(GM_getValue(window.location.pathname + "storedLogs"));
GM_setValue(window.location.pathname + "storedLogs", "");
});
scrapeLog();
setTimeout(refreshPage, 3000);
setTimeout(refreshPage, 7000);//backup refresher for hangs
} else {
$('form.log #clearlog').before('<input class="btn btn-inverse" id="logmonitor" type="button" value="Monitor" style="width: 80px;"><span> </span>');
addClick();
}
}
/*
Auto ip-scraper
*/
function uniqueArray(arr) {
var unique = [], map = [];
for (var i in arr) {
if (map[arr[i]]) {
continue;
} else {
map[arr[i]] = true;
unique[unique.length] = arr[i];
}
}
return unique;
}
function scrapeIPs(text) {
if (typeof(text) === "string") {
var re = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g;
var found = text.match(re);
if (found && found.length > 0) {
return uniqueArray(found);
}
}
return;
}
function saveIPs(dbName, ipArray) {
if (typeof(ipArray) == "object" && ipArray.length > 0) {
var dbText = GM_getValue(dbName), myIp = GM_getValue("myIp"), igText = GM_getValue("ignoreDb"),
saveText = GM_getValue('savedDb');
var db = {};
if (igText && igText.length > 0) igDb = JSON.parse(igText);
if (saveText && saveText.length > 0) saveDb = JSON.parse(saveText);
if (dbText && typeof(dbText) === 'string' && dbText.length > 0) {
db = JSON.parse(dbText);
for (i = 0; i < ipArray.length;i++) {
if (ipArray[i] == myIp || igDb[ipArray[i]] || saveDb[ipArray[i]]) continue;
if (!db[ipArray[i]] ) db[ipArray[i]] = true;
}
} else {
for (i = 0; i < ipArray.length;i++) {
if (ipArray[x] == myIp || igDb[ipArray[x]]) continue;
db[ipArray[x]] = true;
}
}
var json = JSON.stringify(db);
GM_setValue(dbName, json);
}
}
function cleanLocal(text) {
var result = [];
if (text !== "undefined" && text.length > 0) {
var split = text.split("\n");
for (i = 0; i < split.length; i++) {
var line = split[i].trim();
if (line.length === 0) continue;
if (line.match(/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\s-\slocalhost.*/)) {
continue;
} else {
result.push(line);
}
}
text = result.join("\n");
}
return text;
}
if (window.location.href.indexOf("legacy.hackerexperience.com/log") != -1) {
var log = $('form.log').find('.logarea');
if (log && log.length > 0) {
text = log.val();
saveIPs("localDb", scrapeIPs(cleanLocal(text)));
}
}
if (window.location.href.indexOf("legacy.hackerexperience.com/internet?view=logs") != -1) {
var log = $('form.log').find('.logarea');
if (log && log.length > 0) {
text = log.val();
saveIPs("internetDb", scrapeIPs(text));
}
}