Guest User

Untitled

a guest
May 21st, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. package pf.bot.loader;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.security.AllPermission;
  6. import java.security.cert.Certificate;
  7. import java.security.CodeSource;
  8. import java.security.Permissions;
  9. import java.security.ProtectionDomain;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. import java.util.jar.JarFile;
  13. import java.util.zip.ZipEntry;
  14.  
  15. import org.objectweb.asm.ClassReader;
  16. import org.objectweb.asm.ClassWriter;
  17.  
  18. import pf.bot.bot.Config;
  19. import pf.bot.inject.ScriptModifier;
  20.  
  21. public class ClientClassLoader extends ClassLoader {
  22.  
  23. private ProtectionDomain domain;
  24. private JarFile jfile;
  25.  
  26. private Map<String, Class<?>> classes;
  27.  
  28. private ScriptModifier mod;
  29.  
  30. public ClientClassLoader() {
  31. jfile = Config.getJar(Config.client_jar);
  32. domain = getDomain();
  33. classes = new HashMap<String, Class<?>>();
  34. mod = new ScriptModifier();
  35. mod.load();
  36. }
  37.  
  38. private final Permissions getPermissions() {
  39. Permissions permissions = new Permissions();
  40. permissions.add(new AllPermission());
  41. return permissions;
  42. }
  43.  
  44. private final ProtectionDomain getDomain() {
  45. CodeSource code = new CodeSource(null, (Certificate[]) null);
  46. return new ProtectionDomain(code, getPermissions());
  47. }
  48.  
  49. public final Class<?> loadClass(String name) throws ClassNotFoundException {
  50. if (classes.containsKey(name))
  51. return classes.get(name);
  52. Class<?> clas = null;
  53. try {
  54. clas = super.findSystemClass(name);
  55. } catch (Exception e) {
  56. ZipEntry entry = jfile.getEntry(name.replaceAll("\\.", "/") + ".class");
  57. if (entry != null) {
  58. try {
  59. InputStream stream = jfile.getInputStream(entry);
  60. ClassReader reader = new ClassReader(stream);
  61. ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  62. reader.accept(writer, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
  63.  
  64. /* class injection method */
  65. byte[] buffer = mod.process(name, writer.toByteArray());
  66.  
  67. clas = super.defineClass(name, buffer, 0, buffer.length, domain);
  68.  
  69. } catch (IOException e1) {
  70. clas = super.loadClass(name);
  71. }
  72.  
  73. }
  74. }
  75. classes.put(name, clas);
  76. return clas;
  77. }
  78. }
Add Comment
Please, Sign In to add comment