Guest User

Untitled

a guest
May 21st, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. package pf.bot.inject;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9.  
  10. import javax.xml.parsers.DocumentBuilder;
  11. import javax.xml.parsers.DocumentBuilderFactory;
  12. import javax.xml.parsers.ParserConfigurationException;
  13.  
  14. import org.objectweb.asm.ClassAdapter;
  15. import org.objectweb.asm.ClassReader;
  16. import org.objectweb.asm.ClassVisitor;
  17. import org.objectweb.asm.ClassWriter;
  18. import org.w3c.dom.Document;
  19. import org.w3c.dom.Element;
  20. import org.w3c.dom.NodeList;
  21. import org.xml.sax.SAXException;
  22.  
  23. import pf.bot.inject.data.FieldData;
  24. import pf.bot.inject.scripts.FieldScript;
  25. import pf.bot.inject.scripts.InterfaceScript;
  26.  
  27. public class ScriptModifier {
  28.  
  29. public final Map<String, ClassWriter> writers = new HashMap<String, ClassWriter>();
  30. public final Map<String, ClassAdapter> adapters = new HashMap<String, ClassAdapter>();
  31.  
  32. public byte[] process(String name, byte[] bytes) {
  33. ClassAdapter adapter = adapters.get(name);
  34. if (adapter != null) {
  35. ClassReader reader = new ClassReader(bytes);
  36. reader.accept(adapter, ClassReader.SKIP_FRAMES);
  37. return writers.get(name).toByteArray();
  38. }
  39. return bytes;
  40. }
  41.  
  42. public byte[] process(String name, InputStream input) throws IOException {
  43. ByteArrayOutputStream out = new ByteArrayOutputStream();
  44. byte[] buffer = new byte[4096];
  45. int i;
  46. while ((i = input.read(buffer)) != -1) {
  47. out.write(buffer, 0, i);
  48. }
  49. return process(name, out.toByteArray());
  50. }
  51.  
  52. public void load() {
  53. DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
  54. try {
  55. DocumentBuilder doc = fact.newDocumentBuilder();
  56. Document document = doc.parse(new File("log.xml"));
  57. NodeList elements = document.getElementsByTagName("class");
  58. for (int i = 0; i < elements.getLength(); i++) {
  59. Element element = (Element) elements.item(i);
  60. String name = element.getAttribute("name");
  61. String newname = element.getAttribute("new");
  62. adapters.put(name, new InterfaceScript(make(name), newname));
  63. NodeList fields = element.getElementsByTagName("field");
  64. for (int k = 0; k < fields.getLength(); k++) {
  65. Element field = (Element) fields.item(k);
  66. FieldData fd = new FieldData();
  67. fd.origType = field.getAttribute("origType");
  68. fd.parent = field.getAttribute("parent");
  69. fd.stat = field.getAttribute("static");
  70. fd.name = field.getAttribute("new");
  71. fd.type = field.getAttribute("type");
  72. fd.orig = field.getAttribute("name");
  73. adapters.put(name, new FieldScript(make(name), fd));
  74. }
  75. }
  76.  
  77. } catch (ParserConfigurationException e) {
  78. e.printStackTrace();
  79. } catch (SAXException e) {
  80. e.printStackTrace();
  81. } catch (IOException e) {
  82. e.printStackTrace();
  83. }
  84. }
  85.  
  86. public ClassVisitor make(String name) {
  87. ClassAdapter adapter = adapters.get(name);
  88. if (adapter == null) {
  89. ClassWriter writer = new ClassWriter(0);
  90. writers.put(name, writer);
  91. return writer;
  92. }
  93. return adapter;
  94. }
  95. }
Add Comment
Please, Sign In to add comment