![](/uploads/1/2/5/7/125736922/697890529.jpg)
Play Full Screen s0urce.ioS0urce.io is a one of a kind hacker game. You are in a directory of people in which you choose your next victim to hack. Once you use our port sniffers and learn which port they have open, you tear down their firewall by typing the words on the screen. If you type in the words incorrectly, nothing will happen. However, the more and faster you tpye the words you will be rewarded with money.
You may use that money to purchase data miners that will grant you access to bigger piles of money. With every level you pass, you'll be more respected in the hacking world and become a hacker king or queen. It is a good idea to form teams, however you shoul watch your back so they don't leave your trail to the law enforcement agencies. Also make sure they don't hold grudges against you as they could use this as a come back.
![S0urce.io hacking game S0urce.io hacking game](/uploads/1/2/5/7/125736922/648385934.jpg)
S0urce.io Videos.
- let config, vars, app, loops, gui;
- // eslint-disable-next-line prefer-const
- // the message you send to others when you hack them
- autoTarget: true,
- // the base64 database url
- db: 'https://raw.githubusercontent.com/snollygolly/sourceio-automation/master/db.json',
- freq: {
- word: 1500,
- mine: 3000,
- upgrade: 4500,
- // how long to wait before attempting to rehack, not enough money for hack
- // how long to wait before restarting the hacking loop
- },
- // which player in the index of the list, 0 is the first player (the bot target a player with index between playerToAttack and playerToAttack + 3 (random).
- // how many hacks to try (and fail) before restarting
- // how high to upgrade all of your miner types except quantum-servers and botnets.
- // how high to upgrade quantum-servers and botnets (quantum-servers will always be purchased in priority and botnets quantity will be equal to quantum-servers quantity.
- // the max BTC the bot will spend per upgrade. (current BTC * maxUpgradeCost).
- // all the gui settings
- enabled: true,
- height: '412px'
- // all the ocr settings, disabled by default
- enabled: false,
- key: 'XXX'
- };
- // eslint-disable-next-line prefer-const
- // the object that contains a mapping of image urls to words (built over time)
- // the object that contains b64 hashes to words (loaded on start)
- // how much BT you have
- flags: {
- ocrBlock: false,
- // we're waiting for the bar to move in response to our word
- },
- word: null,
- miner: null
- hackProgress: 0,
- // the different types of miners and their current rank
- {name: 'shop-basic-miner', value: 0},
- {name: 'shop-mining-drill', value: 0},
- {name: 'shop-bot-net', value: 0},
- ],
- {name: 'A', index: 1, needUpgrade: true},
- {name: 'C', index: 3, needUpgrade: true},
- ],
- dragReady: false,
- }
- app = {
- $.get(config.db).done((data) => {
- // first check the windows are open, and open them if they aren't
- if ($('#player-list').is(':visible') false) {
- $('#desktop-list').children('img').click();
- if ($('#window-shop').is(':visible') false) {
- $('#desktop-shop').children('img').click();
- }
- if ($('#window-computer').is(':visible') false) {
- $('#desktop-computer').children('img').click();
- if (config.gui.enabled true) {
- log('* Opening bot window');
- }
- log('* GUI disabled, skipping...');
- // start the automation
- });
- app.stop();
- setTimeout(() => {
- app.automate();
- },
- stop: () => {
- for (const loop in vars.loops) {
- log(`! Can't stop ${loop} loop`);
- }
- vars.loops[loop] = null;
- vars.hackProgress = 0;
- vars.flags.ocrBlock = false;
- log('* Stopped all hacking');
- // does everything to prep for hacking except word guessing
- // start the loop for btc monitoring
- vars.loops.miner = setInterval(loops.miner, config.freq.mine);
- vars.loops.upgrade = setInterval(loops.upgrade, config.freq.upgrade);
- // if the auto target is toggled, choose the target.
- // with playerToAttack = 0 choose between the 4 first players from the player list
- const rndTarget = getRandomInt(config.playerToAttack, config.playerToAttack + 3);
- // playerToAttack is an int, the index of the player list
- const targetName = $('#player-list').children('tr').eq(rndTarget)[0].innerText;
- // click it, and then hack, and then a random port
- $('#player-list').children('tr').eq(rndTarget)[0].click();
- }
- // if the auto attack port is toggled, choose the port and click
- const portNumber = getRandomInt(1,3);
- const portStyle = $(`#window-other-port${portNumber}`).attr('style');
- // this port costs too much, let's wait a bit
- setTimeout(app.attack, config.freq.broke);
- }
- }
- vars.loops.word = setInterval(loops.word, config.freq.word);
- const wordLink = $('.tool-type-img').prop('src');
- if (!wordLink.endsWith('s0urce.io/client/img/words/template.png')) {
- if (vars.listingURL.hasOwnProperty(wordLink) true) {
- log(`. Found word (URL): [${word}]`);
- return;
- toDataURL(wordLink).then((dataUrl) => {
- if (vars.listingB64.hasOwnProperty(hash) true) {
- log(`. Found word (B64): [${word}]`);
- return;
- if (config.ocr.enabled true) {
- app.doOCR(config.ocr.url, {
- language: 'eng',
- });
- log('* OCR disabled, skipping...');
- });
- log('* Can't find the word link...');
- // if the target is disconnected and autoTarget disabled, re-enable it.
- if ($('#cdm-text-container span:last').text() 'Target is disconnected from the Server.' && !config.autoTarget) {
- }
- }
- const wordLink = $('.tool-type-img').prop('src');
- app.submit(word);
- $('#tool-type-word').val(word);
- },
- doOCR: (link, payload) => {
- // this is made somewhat generic to allow different ocr vendors
- const word = String(data['ParsedResults'][0]['ParsedText']).trim().toLowerCase().split(' ').join(');
- log(`. Got data: [${word}]`);
- app.learn(word);
- } else {
- app.restart();
- });
- };
- loops = {
- // block is true is we're mid-OCR
- return;
- if ($('#targetmessage-input').is(':visible') true) {
- $('#targetmessage-input').val(config.message);
- app.restart();
- }
- // if we're waiting on the progress bar to move...
- const newHackProgress = parseHackProgress($('#progressbar-firewall-amount').attr('style'));
- if (vars.hackProgress newHackProgress) {
- log('* Progress bar hasn't moved, waiting');
- if (vars.hackFails >= config.maxHackFails) {
- log('* Progress bar is stuck, restarting');
- vars.listingURL = {};
- }
- }
- vars.hackFails = 0;
- vars.flags.progressBlock = false;
- // actually do the word stuff
- app.findWord();
- // first, get the status of our miners
- // set value
- miner.value = parseInt($(`#${miner.name}-amount`).text());
- if ($(`#${miner.name}`).attr('style') 'opacity: 1;') {
- // buy more quantum servers and botnets, buy botnets at the same rate as the quantum servers.
- // we're beyond or at the max QB level, no updates needed
- }
- const isAdvancedMiner = (miner.name 'shop-quantum-server' || miner.name 'shop-bot-net') ? true : false;
- if (miner.value >= config.maxMinerLevel && isAdvancedMiner false) {
- // this isn't an advanced miner and it's beyond the max level, no updates needed
- }
- $(`#${miner.name}`).click();
- }
- // leave if all firewalls are upgraded to max
- return;
- // i refers to the location in the vars.firewall array
- // index refers to 1,2,3, the index in the DOM (use for selectors)
- // if this fireWall is already fully upgraded, get an other random firewall.
- vars.loops.upgrade();
- vars.balance = parseInt($('#window-my-coinamount').text());
- // if the back button is visible, we're on a page, let's back out and hide the firewall warning.
- if ($('#window-firewall-pagebutton').is(':visible') true) {
- $('#window-firewall-pagebutton').click();
- log(`. Handling upgrades to firewall ${vars.fireWall[i].name}`);
- // get stats
- parseInt($('#shop-max-charges').text()), parseInt($('#shop-strength').text()), parseInt($('#shop-regen').text())
- const statLookup = [
- ];
- 30, 4, 10
- let maxUpgradeCount = 0;
- if (stats[stat] < maxStats[stat]) {
- const statPrice = parseInt($(`#shop-firewall-${statLookup[stat]}-value`).text());
- if (statPrice < (vars.balance * config.maxUpgradeCost)) {
- log(`. Buying: ${$('.window-shop-element-info b').eq(stat).text()}`);
- // buy more than one upgrade, but only if they cost less than a third of the bitcoin balance.
- }
- maxUpgradeCount++;
- vars.fireWall[i].needUpgrade = false;
- vars.fireWall[3].needUpgrade = false;
- }
- // let's go back
- if ($('#window-firewall-pagebutton').is(':visible') true) {
- }
- };
- gui = {
- if ($('#custom-gui').length > 0) {
- }
- const sizeCSS = `height: ${config.gui.height}; width: ${config.gui.width};`;
- word: 'Word Speed',
- upgrade: 'Firewall Upgrade',
- };
- return `<span>
- <input type='text' value='${config.freq[type]}'>
- </span>`;
- const botWindowHTML = `
- <div>
- <div>
- <span>
- <img src='http://s0urce.io/client/img/icon-close.png'>
- </div>
- <div>
- </div>
- <div>
- </div>
- <div>
- </div>
- <div>
- </div>
- <br>
- <input type='text' value='${config.message}' >
- ${freqInput('word')}
- ${freqInput('upgrade')}
- <div>
- </div>
- </div>`;
- // color the toggle buttons
- $('#custom-autoTarget-button').css('color', config.autoTarget ? 'green' : 'red');
- $('#custom-autoAttack-button').css('color', config.autoAttack ? 'green' : 'red');
- $('#custom-gui-bot-title > span.window-close-style').on('click', () => {
- });
- app.restart();
- $('#custom-stop-button').on('click', () => {
- });
- $('#custom-autoTarget-button').on('click', () => {
- $('#custom-autoTarget-button').css('color', config.autoTarget ? 'green' : 'red');
- $('#custom-autoAttack-button').on('click', () => {
- $('#custom-autoAttack-button').css('color', config.autoAttack ? 'green' : 'red');
- $('#custom-github-button').on('click', () => {
- window.open('https://github.com/snollygolly/sourceio-automation');
- $('.custom-gui-freq').on('keypress', (e) => {
- return;
- const type = $(e.target).attr('data-type');
- // invalid input, disregard i guess?
- }
- log(`* Frequency for '${type}' set to ${config.freq[type]}`);
- $('.custom-gui-msg').on('keypress', (e) => {
- return;
- config.message = $(e.target).val();
- });
- const botWindow = ('#custom-gui');
- vars.gui.dragReady = true;
- vars.gui.dragOffset.x = e.pageX - $(botWindow).position().left;
- vars.gui.dragOffset.y = e.pageY - $(botWindow).position().top;
- $(document).on('mouseup', botWindow, () => {
- });
- if (vars.gui.dragReady) {
- $(botWindow).css('top', `${e.pageY - vars.gui.dragOffset.y}px`);
- $(botWindow).css('left', `${e.pageX - vars.gui.dragOffset.x}px`);
- });
- };
- function checkFirewallsUpgrades(FW, index) {
- return true;
- }
- function parseHackProgress(progress) {
- const newProgress = progress.slice(0, -2);
- const newProgressParts = newProgress.split('width: ');
- }
- function getRandomInt(min, max) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- let hash = 0;
- return hash;
- for (let i = 0; i < data.length; i++) {
- hash = ((hash << 5) - hash) + c;
- }
- }
- function toDataURL(url) {
- .then(response => response.blob())
- const reader = new FileReader();
- reader.onerror = reject;
- }));
- console.log(`:: ${message}`);
S0urce.io - you're the best hacker! Find them by IP, ping them, connect and hack them!
![](/uploads/1/2/5/7/125736922/697890529.jpg)