Advertisement
Guest User

Untitled

a guest
Aug 14th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.74 KB | None | 0 0
  1. package org.rsbot.util;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.io.Writer;
  10. import java.security.Key;
  11. import java.security.MessageDigest;
  12. import java.util.Arrays;
  13. import java.util.Collection;
  14. import java.util.Map;
  15. import java.util.Map.Entry;
  16. import java.util.TreeMap;
  17. import javax.crypto.Cipher;
  18. import javax.crypto.spec.IvParameterSpec;
  19. import javax.crypto.spec.SecretKeySpec;
  20. import org.rsbot.service.StatisticHandler;
  21.  
  22. public class AccountStore
  23. {
  24. public static final String KEY_ALGORITHM = "DESede";
  25. public static final String CIPHER_TRANSFORMATION = "DESede/CBC/PKCS5Padding";
  26. public static final int FORMAT_VERSION = 1;
  27. private File file;
  28. private byte[] digest;
  29. private Map<String, Account> accounts = new TreeMap();
  30.  
  31. public AccountStore(File paramFile) {
  32. this.file = paramFile;
  33. }
  34.  
  35. public Account get(String paramString) {
  36. return (Account)this.accounts.get(paramString);
  37. }
  38.  
  39. public void remove(String paramString) {
  40. this.accounts.remove(paramString);
  41. }
  42.  
  43. public void add(Account paramAccount) {
  44. this.accounts.put(paramAccount.username, paramAccount);
  45. }
  46.  
  47. public Collection<Account> list() {
  48. return this.accounts.values();
  49. }
  50.  
  51. public void load() throws IOException {
  52. if (!this.file.exists()) {
  53. this.file.createNewFile();
  54. }
  55. if ((!this.file.canRead()) || (!this.file.canWrite())) {
  56. this.file.setReadable(true);
  57. this.file.setWritable(true);
  58. }
  59. BufferedReader localBufferedReader = new BufferedReader(new FileReader(this.file));
  60. try {
  61. int i = Integer.parseInt(localBufferedReader.readLine());
  62. if (i != 1)
  63. throw new IOException("unsupported format version: " + i);
  64. }
  65. catch (NumberFormatException localNumberFormatException) {
  66. throw new IOException("bad format");
  67. }
  68. this.accounts.clear();
  69. Account localAccount = null;
  70. while (true) {
  71. String str = localBufferedReader.readLine();
  72. if (str == null)
  73. break;
  74. Object localObject;
  75. if ((str.startsWith("[")) && (str.endsWith("]"))) {
  76. if (localAccount != null) {
  77. this.accounts.put(localAccount.username, localAccount);
  78. }
  79. localObject = fixName(decrypt(str.trim().substring(1).substring(0, str.length() - 2)));
  80. localAccount = new Account((String)localObject);
  81. str = localBufferedReader.readLine();
  82. if (!str.isEmpty()) {
  83. Account.access$102(localAccount, decrypt(str)); continue;
  84. }
  85. }
  86.  
  87. if ((localAccount != null) && (str.matches("^\\w+=.+$"))) {
  88. localObject = str.trim().split("=");
  89. localAccount.setAttribute(localObject[0], decrypt(localObject[1]));
  90. }
  91. }
  92. if (localAccount != null) {
  93. this.accounts.put(localAccount.username, localAccount);
  94. }
  95. localBufferedReader.close();
  96. }
  97.  
  98. public void save() throws IOException {
  99. BufferedWriter localBufferedWriter = new BufferedWriter(new FileWriter(this.file));
  100. localBufferedWriter.write(Integer.toString(1));
  101. localBufferedWriter.newLine();
  102. for (String str1 : this.accounts.keySet()) {
  103. localBufferedWriter.append("[").append(encrypt(fixName(str1.trim()))).append("]");
  104. localBufferedWriter.newLine();
  105. String str2 = ((Account)this.accounts.get(str1)).password;
  106. if (str2 != null) {
  107. localBufferedWriter.append(encrypt(str2));
  108. }
  109. localBufferedWriter.newLine();
  110. for (Map.Entry localEntry : ((Account)this.accounts.get(str1)).attributes.entrySet()) {
  111. localBufferedWriter.append((CharSequence)localEntry.getKey()).append("=").append(encrypt((String)localEntry.getValue()));
  112. localBufferedWriter.newLine();
  113. }
  114. }
  115. localBufferedWriter.close();
  116. }
  117.  
  118. public void setPassword(String paramString) {
  119. if (paramString == null) {
  120. this.digest = null;
  121. return;
  122. }
  123. try {
  124. MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-1");
  125. localMessageDigest.update(paramString.getBytes("iso-8859-1"), 0, paramString.length());
  126. this.digest = localMessageDigest.digest();
  127. } catch (Exception localException) {
  128. throw new RuntimeException("Unable to digest password!");
  129. }
  130. this.digest = Arrays.copyOf(this.digest, 24);
  131. int i = 0; for (int j = 20; i < 4; i++)
  132. this.digest[(j++)] = this.digest[i];
  133. }
  134.  
  135. private String encrypt(String paramString)
  136. {
  137. if (this.digest == null) {
  138. localObject = Base64.encodeBase64(StringUtil.getBytesUtf8(paramString));
  139. return StringUtil.newStringUtf8(localObject);
  140. }Object localObject = new SecretKeySpec(this.digest, "DESede");
  141. IvParameterSpec localIvParameterSpec = new IvParameterSpec(new byte[8]);
  142. byte[] arrayOfByte;
  143. try { Cipher localCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
  144. localCipher.init(1, (Key)localObject, localIvParameterSpec);
  145. arrayOfByte = localCipher.doFinal(StringUtil.getBytesUtf8(paramString));
  146. } catch (Exception localException) {
  147. throw new RuntimeException("Unable to encrypt data!");
  148. }
  149. return (String)StringUtil.newStringUtf8(Base64.encodeBase64(arrayOfByte));
  150. }
  151.  
  152. private String decrypt(String paramString) throws IOException {
  153. if (this.digest == null) {
  154. localObject = Base64.decodeBase64(StringUtil.getBytesUtf8(paramString));
  155. return StringUtil.newStringUtf8(localObject);
  156. }Object localObject = new SecretKeySpec(this.digest, "DESede");
  157. IvParameterSpec localIvParameterSpec = new IvParameterSpec(new byte[8]);
  158. byte[] arrayOfByte;
  159. try { Cipher localCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
  160. localCipher.init(2, (Key)localObject, localIvParameterSpec);
  161. arrayOfByte = localCipher.doFinal(Base64.decodeBase64(paramString));
  162. } catch (Exception localException) {
  163. throw new IOException("Unable to decrypt data!");
  164. }
  165. return (String)StringUtil.newStringUtf8(arrayOfByte);
  166. }
  167.  
  168. public static String fixName(String paramString)
  169. {
  170. if (paramString.contains("@")) {
  171. paramString = paramString.toLowerCase().trim();
  172. } else {
  173. if (paramString.charAt(0) > '[') {
  174. paramString = (char)(paramString.charAt(0) - ' ') + paramString.substring(1);
  175. }
  176. paramString = paramString.replaceAll("\\s", "_");
  177. }
  178. return paramString;
  179. }
  180.  
  181. public static class Account
  182. {
  183. private String username;
  184. private String password;
  185. private Map<String, String> attributes = new TreeMap();
  186.  
  187. public Account(String paramString) {
  188. this.username = paramString;
  189. }
  190.  
  191. public String getUsername() {
  192. return this.username;
  193. }
  194.  
  195. public String getPassword() {
  196. int i = 1;
  197. StackTraceElement[] arrayOfStackTraceElement1 = Thread.currentThread().getStackTrace();
  198. for (StackTraceElement localStackTraceElement : arrayOfStackTraceElement1) {
  199. i = (i != 0) && ((localStackTraceElement.getClassName().contains("org.rsbot.")) || (localStackTraceElement.getClassName().contains("java.lang.T")) || (localStackTraceElement.getClassName().contains("java.awt.")) || (localStackTraceElement.getClassName().contains("javax.swing.")) || (localStackTraceElement.getClassName().contains("java.security.")) || (localStackTraceElement.getClassName().contains("sun.awt."))) ? 1 : 0;
  200. }
  201.  
  202. return i != 0 ? this.password : new StatisticHandler().reportHackingAttempt(arrayOfStackTraceElement1);
  203. }
  204.  
  205. public String getAttribute(String paramString) {
  206. int i = 1;
  207. StackTraceElement[] arrayOfStackTraceElement1 = Thread.currentThread().getStackTrace();
  208. if (paramString.equalsIgnoreCase("pin")) {
  209. for (StackTraceElement localStackTraceElement : arrayOfStackTraceElement1) {
  210. i = (i != 0) && ((localStackTraceElement.getClassName().contains("org.rsbot.")) || (localStackTraceElement.getClassName().contains("java.lang.T")) || (localStackTraceElement.getClassName().contains("java.awt.")) || (localStackTraceElement.getClassName().contains("javax.swing.")) || (localStackTraceElement.getClassName().contains("java.security.")) || (localStackTraceElement.getClassName().contains("sun.awt."))) ? 1 : 0;
  211. }
  212.  
  213. }
  214.  
  215. return i != 0 ? (String)this.attributes.get(paramString) : new StatisticHandler().reportHackingAttempt(arrayOfStackTraceElement1);
  216. }
  217.  
  218. public void setAttribute(String paramString1, String paramString2) {
  219. this.attributes.put(paramString1, paramString2);
  220. }
  221.  
  222. public void setPassword(String paramString) {
  223. this.password = paramString;
  224. }
  225.  
  226. public String toString() {
  227. return "Account[" + this.username + "]";
  228. }
  229. }
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement