From 32865c4908958e49ea57b6cbcb5468cd64a7a852 Mon Sep 17 00:00:00 2001 From: Szymon Marczak <36894700+szmarczak@users.noreply.github.com> Date: Fri, 4 Dec 2020 10:55:51 +0100 Subject: [PATCH] sv_pure_bypass_8 (Danger Zone) (#38) * sv_pure_bypass_7_2 got fixed * sv_pure_bypass_8 --- README.md | 5 +- sv_pure_bypass_5_2/wallhack.js | 279 ++++++++++++++++++++ sv_pure_bypass_8/README.md | 47 ++++ sv_pure_bypass_8/mirror.exe | Bin 0 -> 143360 bytes sv_pure_bypass_8/wallhack.js | 451 +++++++++++++++++++++++++++++++++ 5 files changed, 780 insertions(+), 2 deletions(-) create mode 100644 sv_pure_bypass_5_2/wallhack.js create mode 100644 sv_pure_bypass_8/README.md create mode 100644 sv_pure_bypass_8/mirror.exe create mode 100644 sv_pure_bypass_8/wallhack.js diff --git a/README.md b/README.md index da987d5..1bd6e6e 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,11 @@ Why post stuff like this in public? Valve doesn't care anymore, see the [model_b | sv_pure_bypass_3 | Yes | 24-07-2020 | [06-08-2020](https://blog.counter-strike.net/index.php/2020/08/31269/) | [DepoSit](https://www.youtube.com/watch?v=aL2rQzhFTn4), [@mbhound](https://github.com/mbhound) and [@szmarczak](https://github.com/szmarczak) | | sv_pure_bypass_4 | Yes | 06-08-2020 | [17-08-2020](https://blog.counter-strike.net/index.php/2020/08/31374/) | [@szmarczak](https://github.com/szmarczak) and [@mbhound](https://github.com/mbhound) | | sv_pure_bypass_5 | Yes | 06-08-2020 | [17-09-2020](https://blog.counter-strike.net/index.php/2020/09/31687/) | [@szmarczak](https://github.com/szmarczak) | -| sv_pure_bypass_5_2 | No | 18-09-2020 | | [@szmarczak](szmarczak) | +| sv_pure_bypass_5_2 | Yes | 18-09-2020 | [04-12-2020](https://blog.counter-strike.net/index.php/2020/12/31908/) | [@szmarczak](szmarczak) | | sv_pure_bypass_6 | Yes | 21-08-2020 | [01-09-2020](https://blog.counter-strike.net/index.php/2020/09/31532/) | [@kkthxbye-code](https://github.com/kkthxbye-code) | | sv_pure_bypass_7 | Yes | 10-08-2020 | [17-09-2020](https://blog.counter-strike.net/index.php/2020/09/31687/) | [@szmarczak](szmarczak) | -| sv_pure_bypass_7_2 | No | 18-09-2020 | | [@szmarczak](szmarczak) | +| sv_pure_bypass_7_2 | Yes | 18-09-2020 | [03-12-2020](https://blog.counter-strike.net/index.php/2020/12/31908/) | [@szmarczak](szmarczak) | +| sv_pure_bypass_8 | No | 04-12-2020 | | [@szmarczak](szmarczak) | | con_logfile_tricks | Yes | ??-??-2018 | [01-09-2020](https://blog.counter-strike.net/index.php/2020/09/31532/) | [@kkthxbye-code](https://github.com/kkthxbye-code) | | netcon_stuff | Yes | ??-03-2020 | [26-08-2020](https://blog.counter-strike.net/index.php/2020/08/31476/) | [@403-fruit](https://github.com/403-Fruit) and [@szmarczak](https://github.com/szmarczak) | | netcon_hitmarker | Yes | 10-08-2020 | [01-09-2020](https://blog.counter-strike.net/index.php/2020/09/31532/) | [DepoSit](https://youtu.be/T7ShZxNGr5E?t=226) and [@szmarczak](https://github.com/szmarczak) | diff --git a/sv_pure_bypass_5_2/wallhack.js b/sv_pure_bypass_5_2/wallhack.js new file mode 100644 index 0000000..f8a617b --- /dev/null +++ b/sv_pure_bypass_5_2/wallhack.js @@ -0,0 +1,279 @@ +'use strict'; +const {basename} = require('path'); +const readline = require('readline'); +const {promisify} = require('util'); +const {constants: {O_RDWR}, promises: fs} = require('fs'); +const net = require('net'); + +fs.write = promisify(require('fs').write); + +const existsAsync = async path => { + try { + await fs.access(path); + + return true; + } catch (error) { + if (error.code === 'ENOENT') { + return false; + } + + throw error; + } +}; + +const PAK_FILE = '/home/szm/.local/share/Steam/steamapps/common/Counter-Strike Global Offensive/csgo/pak01_008.vpk'; +const VIDEO_FILE = '/home/szm/.local/share/Steam/userdata/1105952182/730/local/cfg/video.txt'; +const NETCON_PORT = 2121; + +let wallhackProps = []; +let isPakOverwritten = false; + +const SHADER_REGEXP = /("setting.gpu_level"\s+")(\d)(")/; + +const connect = port => new Promise((resolve, reject) => { + const socket = net.connect(port, '127.0.0.1', () => { + resolve(socket); + }); + + socket.once('error', error => { + if (error.code !== 'ECONNREFUSED') { + reject(error); + return; + } + + setTimeout(() => { + resolve(connect(port)); + }, 1000); + }); +}); + +let toggleIndex = -1; +const toggleUpdate = async socket => { + console.log('Reading video.txt'); + const video = await fs.readFile(VIDEO_FILE, 'utf8'); + const match = video.match(SHADER_REGEXP); + + if (!match) { + console.log('Invalid video.txt. Exiting.'); + return; + } + + toggleIndex *= -1; + + console.log('Updating shader settings...'); + await fs.writeFile(VIDEO_FILE, video.replace(SHADER_REGEXP, `$1${(Number(match[2]) + toggleIndex + 4) % 4}$3`)); + + if (!socket.destroyed) { + console.log('Reloading VPKs...'); + socket.write(`mat_updateconvars\n`); + } +}; + +const write = async entries => { + const fd = await fs.open(PAK_FILE, O_RDWR); + + for (const entry of entries) { + await fs.write(fd.fd, entry.insert, entry.index); + } + + await fd.close(); +}; + +const revert = async (entries, socket) => { + const fd = await fs.open(PAK_FILE, O_RDWR); + + for (const entry of entries) { + await fs.write(fd.fd, entry.original, entry.index); + } + + await fd.close(); +}; + +const onPureServer = async socket => { + if (isPakOverwritten) { + return; + } + + isPakOverwritten = true; + + await new Promise(resolve => setTimeout(resolve, 2000)); + console.log('Got pure server! Overwriting the PAK file...'); + + await write(wallhackProps); + console.log('Write successful.'); + + await toggleUpdate(socket); +}; + +const runReader = async socket => { + const reader = readline.createInterface({ + input: socket, + crlfDelay: Infinity + }); + + socket.once('error', error => { + // console.error(error); + reader.close(); + }); + + for await (let line of reader) { + line = line.trim(); + + if (line === 'Got pure server whitelist: sv_pure = 1.') { + await onPureServer(socket); + } + } +}; + +const findWallhackProps = buffer => { + const allowedValueCharacters = '0123456789.'.split('').map(string => string.charCodeAt(0)); + const whitespaceCharacters = ' \t'.split('').map(string => string.charCodeAt(0)); + const keys = [ + 'rimlightalbedo', + 'phongalbedoboost', + 'ambientreflectionboost', + 'teammatevar' + ]; + + const search = keys.map(key => `${key}"`); + + const getNext = (buffer, start) => { + const occurrences = search.map(value => { + return { + value, + index: buffer.indexOf(value, start) + }; + }).filter(result => result.index !== -1).sort((a, b) => { + if (a.index < b.index) { + return -1; + } + + if (a.index > b.index) { + return 1; + } + + return 0; + }); + + return occurrences[0] || {index: -1}; + }; + + const entries = []; + let index = 0; + + while (true) { + const {value: search, index: indexOfValue} = getNext(buffer, index); + + if (indexOfValue === -1) { + break; + } + + index = indexOfValue + search.length; + + while (whitespaceCharacters.includes(buffer[index])) { + index++; + } + + const includesQuotationMark = index => buffer[index] === 34; // " + if (includesQuotationMark(index)) { + index++; + } else { + continue; + } + + let numberBuffer = ''; + let iterated = 0; + + while (allowedValueCharacters.includes(buffer[index]) && iterated < 4) { + numberBuffer += String.fromCharCode(buffer[index]); + index++; + iterated++; + } + + if (Number.isNaN(Number(numberBuffer)) || !includesQuotationMark(index)) { + continue; + } + + const ignorez = 'ignorez" "1"'; + const insert = `${ignorez}${Buffer.alloc((index - indexOfValue) - ignorez.length + 1).fill(' ')}`; + + entries.push({ + index: indexOfValue, + insert, + original: buffer.slice(indexOfValue, indexOfValue + insert.length).toString() + }); + } + + return entries; +}; + +(async () => { + const BACKUP_FILE = `${PAK_FILE}.backup`; + + try { + console.log(`Reading ${basename(PAK_FILE)}`); + const buffer = await fs.readFile(PAK_FILE); + + console.log('Looking for possible wallhack props...'); + wallhackProps = findWallhackProps(buffer); + + if (wallhackProps.length === 0) { + console.log('No entries were found. Exiting.'); + return; + } + + console.log(`Found ${wallhackProps.length} entries.`); + + const backupExists = await existsAsync(BACKUP_FILE); + if (backupExists) { + console.log('Backup already exists. Skipping.'); + } else { + console.log('Creating backup...'); + await fs.writeFile(BACKUP_FILE, buffer); + console.log('Write successful.'); + } + + console.log(`Connecting to port ${NETCON_PORT}...`); + const socket = await connect(NETCON_PORT); + + // See https://github.com/ValveSoftware/csgo-osx-linux/issues/2554 + await new Promise(resolve => setTimeout(resolve, 2000)); + console.log('Connected! You can start playing now.'); + + await toggleUpdate(socket); + + process.once('SIGINT', async () => { + if (!isPakOverwritten) { + process.exit(); + return; + } + + console.log(''); + console.log('Gotta go. Reverting changes.'); + + try { + await revert(wallhackProps, socket); + + console.log('Write successful. Exiting.'); + } catch (error) { + console.error(error); + } + + process.exit(); + }); + + await runReader(socket); + + console.log('Netcon server closed.'); + + if (isPakOverwritten) { + console.log('Reverting changes.'); + await revert(wallhackProps, socket); + console.log('Write successful.'); + } + + console.log('Exiting.'); + } catch (error) { + console.error(error); + } +})(); diff --git a/sv_pure_bypass_8/README.md b/sv_pure_bypass_8/README.md new file mode 100644 index 0000000..11b713e --- /dev/null +++ b/sv_pure_bypass_8/README.md @@ -0,0 +1,47 @@ +## sv\_pure bypass \#8 (Windows, Linux, macOS) + +It took Valve 3 months to fix the recent (`sv_pure_bypass_5_2` and `sv_pure_bypass_7_2`) exploits. + +While they mostly fixed it, they have left something behind... Danger Zone. + +#### Compile mirror.exe (optional) + +**Note:** This note is only for Windows users. + +**Note:** This is optional. You can use the precompiled `mirror.exe` instead. + +If you don't trust our modified `mirror.exe` (a Dokany example), you can compile one by yourself: + +Replace + +https://github.com/dokan-dev/dokany/blob/6ae6188e61df3f7a1448591a3675c130c4d22bc7/samples/dokan_mirror/mirror.c#L396 + +with + +```c + CreateFile(filePath, genericDesiredAccess, 3, +``` + +then recompile with Visual Studio. + +### Steps + +0. Install [`Node.js`](https://nodejs.org/en/download/current/). +1. If you're not running Windows, skip this step. + 1. Install [Dokany](https://github.com/dokan-dev/dokany) (necessary for mirroring the VPK files) - [Download from GitHub](https://github.com/dokan-dev/dokany/releases/download/v1.4.0.1000/Dokan_x64.msi) + 2. Reboot the computer. + 3. Download [`mirror.exe`](mirror.exe) or compile it using the instructions above. +2. Add `-netcon 2121` to launch options. +3. Update `CSGO_EXE_DIR` and `VIDEO_FILE` constants in the `wallhack.js` file. + Note that on Windows you need to use `\\` to add a backslash. +4. Run `node wallhack.js` +5. Wait till you see `Connecting to port 2121...` +6. Run CS:GO and connect to any Danger Zone server. +7. Profit! +8. To revert changes either close CS:GO or press CTRL+C in the terminal (this will close CS:GO on Windows). + +Please note that it does **not** work on Competitive and Wingman. It rarely works on Deathmatch and Casual. Always works on Danger Zone. + +### Credits + +* [@szmarczak](https://github.com/szmarczak) for discovering the bug. diff --git a/sv_pure_bypass_8/mirror.exe b/sv_pure_bypass_8/mirror.exe new file mode 100644 index 0000000000000000000000000000000000000000..c51c8f0f9a0f09a9e61a9fc2b62e71ce9e0399a2 GIT binary patch literal 143360 zcmeFa3w%`7wLgAlGD!xQa0UqwAj%+7qo4*RYGQ&Uz$BmqCr0v6612iNj;LukC!pn# za1zbQW-9$%y;pDTr&z5Q+uoMmssx`C29scshgwBJOcZ;ckOd#G6`tw zz5mDW_xUvWoOAYG`?dDkYp=cb+K(x@X{(SR2!aJqBq9iH_|jhifB&7ANf5?Pdw#6& z%&6C=x0#l_KK(}T9cvu5b@$v}ck5k_+it!4?t3K14^}zq4*AZ&RYP^$Yc@b%#v_g4UdT&71898(aG1saUS*M@K0Ux6S5 zE~{HpcN<{5uBbE7P?&N?yn@T>R;|7V5vlG1XdtBGn|?;T`GEfO?|(pnHtV(Xh2Xx} z-!j[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�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 new Promise(resolve => setTimeout(resolve, ms)); + +if (isWindows) { + const input = readline.createInterface({ + input: process.stdin + }); + + input.on('SIGINT', () => { + if (!process.emit('SIGINT')) { + process.exit(); + } + }); + + process.stdin.unref(); +} + +const existsAsync = async path => { + try { + await fs.access(path); + + return true; + } catch (error) { + if (error.code === 'ENOENT') { + return false; + } + + throw error; + } +}; + +const CSGO_EXE_DIR = '/home/szm/.local/share/Steam/steamapps/common/Counter-Strike Global Offensive'; +const VIDEO_FILE = '/home/szm/.local/share/Steam/userdata/1105952182/730/local/cfg/video.txt'; +const NETCON_PORT = 2121; + +let wallhackProps = []; +let isPakOverwritten = false; + +let PAK_FILE = isWindows ? `${CSGO_EXE_DIR}\\csgo\\pak01_008.vpk` : `${CSGO_EXE_DIR}/csgo/pak01_008.vpk`; +const MIRROR_EXE = `${__dirname}\\mirror.exe`; +const SHADER_REGEXP = /("setting.gpu_level"\s+")(\d)(")/; + +const connect = port => new Promise((resolve, reject) => { + const socket = net.connect(port, '127.0.0.1', () => { + resolve(socket); + }); + + socket.once('error', error => { + if (error.code !== 'ECONNREFUSED') { + reject(error); + return; + } + + setTimeout(() => { + resolve(connect(port)); + }, 1000); + }); +}); + +let toggleIndex = -1; +const toggleUpdate = async socket => { + console.log('Reading video.txt'); + const video = await fs.readFile(VIDEO_FILE, 'utf8'); + const match = video.match(SHADER_REGEXP); + + if (!match) { + console.log('Invalid video.txt. Exiting.'); + return; + } + + toggleIndex *= -1; + + console.log('Updating shader settings...'); + await fs.writeFile(VIDEO_FILE, video.replace(SHADER_REGEXP, `$1${(Number(match[2]) + toggleIndex + 4) % 4}$3`)); + + if (!socket.destroyed) { + console.log('Reloading VPKs...'); + socket.write(`mat_updateconvars\n`); + } +}; + +const write = async entries => { + const fd = await fs.open(PAK_FILE, O_RDWR); + + for (const entry of entries) { + await fs.write(fd.fd, entry.insert, entry.index); + } + + await fd.close(); +}; + +const revert = async (entries, socket) => { + if (isPakOverwritten) { + const fd = await fs.open(PAK_FILE, O_RDWR); + + for (const entry of entries) { + await fs.write(fd.fd, entry.original, entry.index); + } + + await fd.close(); + + console.log(`Restored ${basename(PAK_FILE)} successfully.`); + } + + if (!isWindows) { + return; + } + + const csgoBakExists = await existsAsync(`${CSGO_EXE_DIR}\\csgo_bak`); + if (csgoBakExists) { + console.log('Renaming csgo_bak back to csgo...'); + + try { + await fs.rmdir(`${CSGO_EXE_DIR}\\csgo`); + await fs.rename(`${CSGO_EXE_DIR}\\csgo_bak`, `${CSGO_EXE_DIR}\\csgo`); + } catch (error) { + console.error(`Failed. Error code: ${error.code} - try closing CS:GO first.`); + } + + PAK_FILE = `${CSGO_EXE_DIR}\\csgo\\pak01_008.vpk`; + + console.log('Done.'); + } +}; + +const onPureServer = async socket => { + if (isPakOverwritten) { + return; + } + + isPakOverwritten = true; + + await wait(2000); + console.log('Got pure server! Overwriting the PAK file...'); + + await write(wallhackProps); + console.log('Write successful.'); + + await toggleUpdate(socket); +}; + +const runReader = async socket => { + const reader = readline.createInterface({ + input: socket, + crlfDelay: Infinity + }); + + socket.once('error', error => { + // console.error(error); + reader.close(); + }); + + for await (let line of reader) { + line = line.trim(); + + if (line.startsWith('R_RedownloadAllLightmaps took')) { + await onPureServer(socket); + } + } +}; + +const findWallhackProps = buffer => { + const allowedValueCharacters = '0123456789.'.split('').map(string => string.charCodeAt(0)); + const whitespaceCharacters = ' \t'.split('').map(string => string.charCodeAt(0)); + const keys = [ + 'rimlightalbedo', + 'phongalbedoboost', + 'ambientreflectionboost', + 'teammatevar', + // 'anisotropyamount', + // 'envmaptint', + // 'envmaplightscaleminmax', + // 'envmapsaturation', + // 'envmap', + // 'basealphaenvmask', + // 'phongboost', + // 'rimlightexponent', + // 'rimlightboost', + // 'ambientreflectionbouncecenter', + // 'ambientreflectionbouncecolor', + // 'shadowsaturationbounds', + // 'shadowtint', + // 'shadowcontrast', + // 'shadowsaturationbounds', + // 'shadowsaturation', + // 'shadowtint', + // 'fakerimboost', + // 'fakerimtint', + // 'phongexponent', + // 'rimlighttint', + // 'warpindex', + // 'fakerimlightscaleminmax', + // 'econ_patches_enabled', + // 'nodecal', + // 'rimmask', + // 'rimlight', + // 'translucent', + // 'fresnelranges', + // 'alphatest', + // 'phongfresnelranges', + // 'phongdisablehalflambert', + // 'phongexponenttexture', + // 'bumpmap', + // 'selfillum', + // 'selfillumfresnel', + // 'selfillumfresnelminmaxexp', + // 'selfillummask', + // 'envmapfresnel', + // 'phongdisablehalflambert', + // 'basemapalphaphongmask', + // 'normalmapalphaenvmapmask', + // 'phongalbedotint' + ]; + + const search = keys.map(key => `${key}"`); + + const searchLetters = {}; + + for (const key of search) { + let current = searchLetters; + + for (const letter of key) { + const charCode = letter.charCodeAt(0); + + if (!current[charCode]) { + current[charCode] = {}; + } + + current = current[charCode]; + } + } + + const getNext = (buffer, start) => { + let index; + let current; + + const bufferLength = buffer.length; + + while (start < bufferLength) { + index = start; + current = searchLetters; + + while (buffer[index] in current) { + current = current[buffer[index++]]; + + if (Object.keys(current).length === 0) { + return { + startIndex: start, + endIndex: index + }; + } + } + + start++; + } + + return { + startIndex: -1, + endIndex: -1 + }; + }; + + const entries = []; + let index = 0; + + while (true) { + const {startIndex, endIndex} = getNext(buffer, index); + + if (startIndex === -1) { + break; + } + + index = endIndex; + + while (whitespaceCharacters.includes(buffer[index])) { + index++; + } + + const includesQuotationMark = index => buffer[index] === 34; // " + if (includesQuotationMark(index)) { + index++; + } else { + continue; + } + + let numberBuffer = ''; + let iterated = 0; + + while (allowedValueCharacters.includes(buffer[index]) && iterated < 4) { + numberBuffer += String.fromCharCode(buffer[index]); + index++; + iterated++; + } + + if (Number.isNaN(Number(numberBuffer)) || !includesQuotationMark(index)) { + continue; + } + + const ignorez = 'ignorez" "1"'; + const insert = `${ignorez}${Buffer.alloc((index - startIndex) - ignorez.length + 1).fill(' ')}`; + + entries.push({ + index: startIndex, + insert, + original: buffer.slice(startIndex, startIndex + insert.length).toString() + }); + } + + return entries; +}; + +(async () => { + console.log('Tip: to revert changes simply close CS:GO. If closed already, press CTRL+C here.'); + console.log(''); + + if (isWindows) { + console.log('Tip: in case of a mirror error:'); + console.log(' - close all Windows Explorer windows,'); + console.log(' - run this script as an administrator.'); + console.log(''); + } + + const BACKUP_FILE = `${PAK_FILE}.backup`; + + try { + console.log(`Reading ${basename(PAK_FILE)}`); + const buffer = await fs.readFile(PAK_FILE); + + const now = Date.now(); + + console.log('Looking for possible wallhack props...'); + wallhackProps = findWallhackProps(buffer); + + console.log(`Searching took ${Date.now() - now} ms`); + + if (wallhackProps.length === 0) { + console.log('No entries were found. Exiting.'); + return; + } + + console.log(`Found ${wallhackProps.length} entries.`); + + const backupExists = await existsAsync(BACKUP_FILE); + if (backupExists) { + console.log('Backup already exists. Skipping.'); + } else { + console.log('Creating backup...'); + await fs.writeFile(BACKUP_FILE, buffer); + console.log(`Backup saved as ${basename(BACKUP_FILE)}`); + } + + PAK_FILE = isWindows ? `${CSGO_EXE_DIR}\\csgo_bak\\pak01_008.vpk` : PAK_FILE; + let socket; + let mirror; + + process.once('SIGINT', async () => { + if (socket && socket.destroyed) { + return; + } + + console.log(''); + console.log('Forcing exit.'); + + const callback = async () => { + console.log('Reverting changes.'); + + try { + await revert(wallhackProps, socket); + } catch (error) { + console.error(error); + } + }; + + if (mirror) { + try { + console.log('Closing CS:GO.'); + await execFile('taskkill', ['/f', '/im', 'csgo.exe']); + } catch {} + + mirror.once('close', callback); + mirror.kill('SIGINT'); + } else { + callback(); + } + }); + + if (isWindows) { + console.log('Renaming csgo to csgo_bak...'); + await fs.rename(`${CSGO_EXE_DIR}\\csgo`, `${CSGO_EXE_DIR}\\csgo_bak`); + await fs.mkdir(`${CSGO_EXE_DIR}\\csgo`); + + console.log('Bypassing write access lock via Dokany...'); + + mirror = spawn(MIRROR_EXE, ['/r', `${CSGO_EXE_DIR}\\csgo_bak`, '/l', `${CSGO_EXE_DIR}\\csgo`]); + + mirror.stdout.resume(); + mirror.stderr.resume(); + // mirror.stderr.setEncoding('utf8'); + // mirror.stderr.on('data', chunk => { + // console.log(`[mirror.exe stderr] ${chunk}`); + // }); + + mirror.once('close', code => { + if (code === null) { + console.error(`${basename(MIRROR_EXE)} exited via ${mirror.signalCode}.`); + } else if (code !== 0) { + console.error(`${basename(MIRROR_EXE)} exited with error code ${code}`); + } + }); + } + + console.log('You can now launch CS:GO.'); + console.log(`Connecting to port ${NETCON_PORT}...`); + socket = await connect(NETCON_PORT); + + // See https://github.com/ValveSoftware/csgo-osx-linux/issues/2554 + await wait(2000); + console.log('Connected! You can start playing now.'); + + await toggleUpdate(socket); + await runReader(socket); + + console.log('Netcon server closed.'); + + if (mirror) { + mirror.kill('SIGINT'); + + await new Promise((resolve, reject) => { + mirror.once('close', resolve); + mirror.once('error', reject); + }); + } + + console.log('Reverting changes.'); + await revert(wallhackProps, socket); + } catch (error) { + console.error(error); + } +})();