From c863c2a5752943143d989b8d418ba76a2aa17800 Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 6 May 2023 00:24:49 +0300 Subject: [PATCH] [windows] Begin work on HWID HWID activation uses a lobotomised util found on windows 10 isos for migration from windows 7 to generate a license upgrade ticket that can be redeemed on ms servers for a full digital license. Started work on this, currently it only downloads and creates the util, but does not perform any other action, work to be done in the future EXPERIMENTAL VERSION, NOT ALL FEATURES ARE COMPLETE!!! DEVMODE IS ON!!!! --- Makefile | 4 +- main.js | 92 ++++++++++++++++++++++++++++++++++++- package-lock.json | 18 +++++++- package.json | 3 ++ webPage/css/dist.css | 29 ++++++++++-- webPage/css/source.css | 11 +++++ webPage/windows/index.html | 4 +- webPage/winhwid/edt.html | 77 +++++++++++++++++++++++++++++++ webPage/winhwid/genexe.html | 78 +++++++++++++++++++++++++++++++ webPage/winhwid/index.html | 4 +- 10 files changed, 306 insertions(+), 14 deletions(-) create mode 100644 webPage/winhwid/edt.html create mode 100644 webPage/winhwid/genexe.html diff --git a/Makefile b/Makefile index 5e2ae0c..649560a 100644 --- a/Makefile +++ b/Makefile @@ -3,10 +3,10 @@ all: linux windows node_modules node_modules: npm install -linux: +linux: node_modules npx electron-builder build --linux appImage -windows: +windows: node_modules npx electron-builder build --win portable diff --git a/main.js b/main.js index ce20907..0d0fb9d 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,9 @@ const { app, BrowserWindow, ipcMain, dialog, shell } = require('electron') const { exec } = require('child_process') const path = require('path') -const { stringify } = require('querystring') +const { fstat } = require('fs') +const fs = require('fs') +const crypto = require('crypto') let win = null; @@ -12,7 +14,7 @@ const createWindow = () => { webPreferences: { nodeIntegration: true, contextIsolation: false, - devTools: false, + devTools: true, }, autoHideMenuBar: true }) @@ -86,6 +88,88 @@ function activationSettings(){ exec("start ms-settings:activation"); } +function downloadExe(){ + + if(fs.existsSync('C:\\Users\\Public\\ActTicket\\14f4df8a2a7fc82a4f415cf6a341415d.cab')){ + var exeStream = fs.readFileSync('C:\\Users\\Public\\ActTicket\\14f4df8a2a7fc82a4f415cf6a341415d.cab') + var checksum = crypto.createHash('sha256').update(exeStream).digest('hex') + + if(checksum.toLowerCase() === '24399eb37ca3e935ab5aa8e501fea950f99ff25565553b7641598d85b3cf381d'){ + win.webContents.send('exeDownloadOk') + return + } + } + + let exeDownProc = exec('powershell mkdir C:\\Users\\Public\\ActTicket & cd C:\\Users\\Public\\ActTicket & echo "Y -> Downloading binary archive .cab file from microsoft Z" & powershell wget -UseBasicParsing -Uri https://download.microsoft.com/download/9/A/E/9AE69DD5-BA93-44E0-864E-180F5E700AB4/adk/Installers/14f4df8a2a7fc82a4f415cf6a341415d.cab -Outfile .\\14f4df8a2a7fc82a4f415cf6a341415d.cab ') + + exeDownProc.stdout.on('data', (data) => { + win.webContents.send('stdout', String(data)) + }) + + exeDownProc.stderr.on('data', (data) => { + win.webContents.send('stderr', String(data)) + }) + + exeDownProc.on('close', () => { + if(fs.existsSync('C:\\Users\\Public\\ActTicket\\14f4df8a2a7fc82a4f415cf6a341415d.cab')){ + var exeStream = fs.readFileSync('C:\\Users\\Public\\ActTicket\\14f4df8a2a7fc82a4f415cf6a341415d.cab') + var checksum = crypto.createHash('sha256').update(exeStream).digest('hex') + win.webContents.send('stdout', checksum) + win.webContents.send('stdout', "EXPECTED CHECKSUM (SHA256, HEX): 1f6e56a5467ab472c915cd98b4e93226182684358ca1cdc14ec3bbb2e584b3e7") + if(checksum.toLowerCase() === '24399eb37ca3e935ab5aa8e501fea950f99ff25565553b7641598d85b3cf381d'){ + win.webContents.send('exeDownloadOk') + }else{ + win.webContents.send('exeDownloadErr') + } + }else{ + win.webContents.send('exeDownloadErr') + } + }) + +} + +function genExe(){ + + + if(fs.existsSync('C:\\Users\\Public\\ActTicket\\gatherosstatemodified.exe')){ + var exeStream = fs.readFileSync('C:\\Users\\Public\\ActTicket\\gatherosstatemodified.exe') + var checksum = crypto.createHash('sha256').update(exeStream).digest('hex') + win.webContents.send('stdout', checksum) + if(checksum.toLowerCase() === '1f6e56a5467ab472c915cd98b4e93226182684358ca1cdc14ec3bbb2e584b3e7'){ + win.webContents.send('exeGenOk') + return + } + } + + let exeGenProc = exec('powershell cd C:\\Users\\Public\\ActTicket ; echo "Y-> EXTRACTING GATHEROSSTATE.EXE Z" ; expand .\\14f4df8a2a7fc82a4f415cf6a341415d.cab -F:filf8377e82b29deadca67bc4858ed3fba9 . ; powershell mv .\\filf8377e82b29deadca67bc4858ed3fba9 .\\gatherosstate.exe ; echo "*Modifying Binary Code To Enable Exploit, credit to GamerOSState*" & powershell "" $bytes = [System.IO.File]::ReadAllBytes("""C:\\Users\\Public\\ActTicket\\gatherosstate.exe""") ; $bytes[320] = 0xf8 ; $bytes[321] = 0xfb ; $bytes[322] = 0x05 ; $bytes[324] = 0x03 ; $bytes[13672] = 0x25 ; $bytes[13674] = 0x73 ; $bytes[13676] = 0x3b ; $bytes[13678] = 0x00 ; $bytes[13680] = 0x00 ; $bytes[13682] = 0x00 ; $bytes[13684] = 0x00 ; $bytes[32748] = 0xe9 ; $bytes[32749] = 0x9e ; $bytes[32750] = 0x00 ; $bytes[32751] = 0x00 ; $bytes[32752] = 0x00 ; $bytes[32894] = 0x8b ; $bytes[32895] = 0x44 ; $bytes[32897] = 0x64 ; $bytes[32898] = 0x85 ; $bytes[32899] = 0xc0 ; $bytes[32900] = 0x0f ; $bytes[32901] = 0x85 ; $bytes[32902] = 0x1c ; $bytes[32903] = 0x02 ; $bytes[32904] = 0x00 ; $bytes[32906] = 0xe9 ; $bytes[32907] = 0x3c ; $bytes[32908] = 0x01 ; $bytes[32909] = 0x00 ; $bytes[32910] = 0x00 ; $bytes[32911] = 0x85 ; $bytes[32912] = 0xdb ; $bytes[32913] = 0x75 ; $bytes[32914] = 0xeb ; $bytes[32915] = 0xe9 ; $bytes[32916] = 0x69 ; $bytes[32917] = 0xff ; $bytes[32918] = 0xff ; $bytes[32919] = 0xff ; $bytes[33094] = 0xe9 ; $bytes[33095] = 0x80 ; $bytes[33096] = 0x00 ; $bytes[33097] = 0x00 ; $bytes[33098] = 0x00 ; $bytes[33449] = 0x64 ; $bytes[33576] = 0x8d ; $bytes[33577] = 0x54 ; $bytes[33579] = 0x24 ; $bytes[33580] = 0xe9 ; $bytes[33581] = 0x55 ; $bytes[33582] = 0x01 ; $bytes[33583] = 0x00 ; $bytes[33584] = 0x00 ; $bytes[33978] = 0xc3 ; $bytes[34189] = 0x59 ; $bytes[34190] = 0xeb ; $bytes[34191] = 0x28 ; $bytes[34238] = 0xe9 ; $bytes[34239] = 0x4f ; $bytes[34240] = 0x00 ; $bytes[34241] = 0x00 ; $bytes[34242] = 0x00 ; $bytes[34346] = 0x24 ; $bytes[34376] = 0xeb ; $bytes[34377] = 0x63 ; [System.IO.File]::WriteAllBytes("""C:\\Users\\Public\\ActTicket\\gatherosstatemodified.exe""", $bytes) "" & echo "-> Set exe Compatiblility Mode to xpsp3 in Registry" & powershell start-process powershell -verb runas { reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Users\Public\ActTicket\gatherosstatemodified.exe" /d "WINXPSP3" /f } & echo "Y -> File gatherosstatemodified.exe has now been sucesfully pacified and should output DownLevel tickets regardless or conditions met Z"') + + exeGenProc.stdout.on('data', (data) => { + win.webContents.send('stdout', String(data)) + }) + + exeGenProc.stderr.on('data', (data) => { + win.webContents.send('stderr', String(data)) + }) + + exeGenProc.on('close', () => { + exec('powershell {reg.exe Add `HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers` /v "C:\\ProgramData\\ActTicket\\gatherosstatemodified.exe" /d "WINXPSP3" /f ; echo "`n=======> Put file (gatherosstatemodified.exe) in Windows XP SP3 compatibility mode`n" ; pause}') + + if(fs.existsSync('C:\\Users\\Public\\ActTicket\\gatherosstatemodified.exe')){ + var exeStream = fs.readFileSync('C:\\Users\\Public\\ActTicket\\gatherosstatemodified.exe') + var checksum = crypto.createHash('sha256').update(exeStream).digest('hex') + win.webContents.send('stdout', checksum) + if(checksum.toLowerCase() === '1f6e56a5467ab472c915cd98b4e93226182684358ca1cdc14ec3bbb2e584b3e7'){ + win.webContents.send('exeGenOk') + }else{ + win.webContents.send('exeGenErr') + } + }else{ + win.webContents.send('exeGenErr') + } + + }) +} + ipcMain.on("getCertDetails", getCertDetails) ipcMain.on("setKMS", (event, response) => { @@ -118,6 +202,10 @@ ipcMain.on("openServerPage", openServerPage) ipcMain.on("activationSettings", activationSettings) +ipcMain.on("downloadexe", downloadExe) + +ipcMain.on("genexe", genExe) + app.whenReady().then(() => { createWindow() }) diff --git a/package-lock.json b/package-lock.json index 9a7cb98..9bbe2f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,16 @@ { "name": "univator", - "version": "1.1.2", + "version": "1.1.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "univator", - "version": "1.1.2", + "version": "1.1.5", "license": "0BSD", + "dependencies": { + "crypto": "^1.0.1" + }, "devDependencies": { "electron": "^24.1.0", "electron-builder": "^24.2.0" @@ -1393,6 +1396,12 @@ "node": ">= 8" } }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4947,6 +4956,11 @@ "which": "^2.0.1" } }, + "crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", diff --git a/package.json b/package.json index f0dfbc4..1eb7756 100644 --- a/package.json +++ b/package.json @@ -12,5 +12,8 @@ "devDependencies": { "electron": "^24.1.0", "electron-builder": "^24.2.0" + }, + "dependencies": { + "crypto": "^1.0.1" } } diff --git a/webPage/css/dist.css b/webPage/css/dist.css index da086d0..5fee79d 100644 --- a/webPage/css/dist.css +++ b/webPage/css/dist.css @@ -585,14 +585,14 @@ Ensure the default browser behavior of the `hidden` attribute. width: 80%; } -.w-3\/4 { - width: 75%; -} - .w-5\/6 { width: 83.333333%; } +.w-3\/4 { + width: 75%; +} + .min-w-\[60vw\] { min-width: 60vw; } @@ -643,6 +643,11 @@ Ensure the default browser behavior of the `hidden` attribute. background-color: rgb(49 46 129 / var(--tw-bg-opacity)); } +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + .bg-\[\#D0E7A6\] { --tw-bg-opacity: 1; background-color: rgb(208 231 166 / var(--tw-bg-opacity)); @@ -818,6 +823,11 @@ Ensure the default browser behavior of the `hidden` attribute. color: rgb(0 0 0 / var(--tw-text-opacity)); } +.underline { + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} + .shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); @@ -1081,6 +1091,17 @@ button:hover{ max-width: 700px; } +.oppositec{ + color: black; + background-color: white; +} + +.oppositecx{ + color: black; + background-color: white; + font-size: large; +} + .hover\:bg-indigo-900:hover { --tw-bg-opacity: 1; background-color: rgb(49 46 129 / var(--tw-bg-opacity)); diff --git a/webPage/css/source.css b/webPage/css/source.css index 4c07621..17a0892 100644 --- a/webPage/css/source.css +++ b/webPage/css/source.css @@ -145,4 +145,15 @@ button:hover{ display: block; width: 80%; max-width: 700px; +} + +.oppositec{ + color: black; + background-color: white; +} + +.oppositecx{ + color: black; + background-color: white; + font-size: large; } \ No newline at end of file diff --git a/webPage/windows/index.html b/webPage/windows/index.html index 0fff265..223da7b 100644 --- a/webPage/windows/index.html +++ b/webPage/windows/index.html @@ -22,7 +22,7 @@

- Non-intrusive

- Easily Reversible (see options)

- Requires connection to e-KMS server every 180 days to refresh

- Show More + Show More