Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 17:46

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Java] epvp login and data extraction

Discussion on [Java] epvp login and data extraction within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2015
Posts: 3
Received Thanks: 0
[Java] epvp login and data extraction

Hallo alle zusammen

In diesem Tutorial möchte ich euch zeigen, wie ihr mithilfe von Java und relativ wenig arbeitsaufwand leicht einen Login auf beliebigen Webseiten automatisieren könnt. Ich werde dies an elitepvpers demonstrieren. Um dem ganzen einen kleinen Sinn zu geben, zeige ich zusätzlich, wie man die Zahl der ungelesenen Nachrichten sowie die Zahl von allen Nachrichten und die egold Nummer ausliest.

Wenn man den Code ausprobieren möchte, braucht man nur eine Javaumgebung und die jaunt library, die man sich kostenlos downloaden kann.

Achtung: Dieses TUT erklärt nicht wie man programmiert oder die Syntax zu Java. Auch werden keine HTML Sachen erklärt.

Schritt 1:

Simples GUI um die Daten strukturiert anzuzeigen. Diesen Code wird nicht weiter erklärt. Er dient einfach zur Erstellung eines GUI.

Code:
package elitepvpers_login;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;

public class code extends JFrame {

        JLabel lblNewLabel_1 = new JLabel("Private Messages:");
        JLabel lblNewLabel_2 = new JLabel("elite Gold: ");
        private JPanel contentPane;

	public code() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Account Information: ");
		lblNewLabel.setFont(new Font("Arial Black", Font.PLAIN, 23));
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setBounds(0, 11, 434, 28);
		contentPane.add(lblNewLabel);
		
		
		lblNewLabel_1.setFont(new Font("Arial", Font.PLAIN, 14));
		lblNewLabel_1.setBounds(59, 89, 172, 22);
		contentPane.add(lblNewLabel_1);
		
		
		lblNewLabel_2.setFont(new Font("Arial", Font.PLAIN, 14));
		lblNewLabel_2.setBounds(59, 122, 172, 22);
		contentPane.add(lblNewLabel_2);
	}
	
	public static void main(String[] args) {
		code frame = new code();
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
}
Schritt 2:

Einbindung der jaunt library
Code:
import com.jaunt.*;
import com.jaunt.component.Form;
Schritt 3:

Deklaration 3 Variablen, in denen später die Informationen des eigenen Accounts gespeichert werden.

Code:
private String first_message_number;
	private String second_message_number;
        private JPanel contentPane;
	private String e_gold;
	JLabel lblNewLabel_1 = new JLabel("Private Messages:");
	JLabel lblNewLabel_2 = new JLabel("elite Gold: ");
Schritt 4:

Adden zweier Funktionen in der Mainmethode. In der ersten Funktion befindet sich die ganze Logik, in der zweiten werden die Informationen in das Label geschrieben.

Code:
public static void main(String[] args) {
		code frame = new code();
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		frame.login_to_epvp_and_extract_account_information();
		frame.print_information();
	}
Schritt 5:

Jetzt kommen wir zum wichtigen Part dieses Tutorials, nämlich der Automatisierung des Logins.

Zuerst erstellen wir einen UserAgent innerhalb eines try catches Blocks. Mithilfe dieses Agents können wir nachher Seiten besuchen und requests senden.

Code:
try{

       UserAgent userAgent = new UserAgent(); 



     }
     catch(JauntException e){
         System.err.println(e);
     }
Schritt 6

Automatisierung Login

Dieser Schritt kann mit zwei verschiedenen Methoden gelöst werden. Ich zeige beide, erkläre aber nur die zweite Methode, da ich bei der Ersten Bilder benötige und ich momentan noch nicht berechtigt bin, diese einzubinden.

Methode 1:


Code:
userAgent.sendHEAD("http://www.elitepvpers.com/forum/login.php?do=login");
			  userAgent.sendPOST("http://www.elitepvpers.com/forum/login.php?do=login",
					    "vb_login_username=your_username&vb_login_password=&cookieuser=1&s=&securitytoken=1424094481-c28dfbdcc8291a7d2ff82ae234a3fb7fb8188941&do=login&vb_login_md5password=827ccb0eea8a706c4c34a16891f84e7b&vb_login_md5password_utf=827ccb0eea8a706c4c34a16891f84e7b&logintoken=62f6c856ac739a0304385e654ed1ff8f37c873f2662a72ad1ecef05ef8abf450&agentspecs=271&methoduuidv2=1&loginuuidv2=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImlzcyI6Imh0dHA6XC9cL3d3dy5lbGl0ZXB2cGVycy5jb21cL2ZvcnVtIn0.ImRXcWNHeWI4bGxWRUhZXC9PRGhtTEN1eUFBenpnaW0yeE0weTczK1VJZGF0Ig.dRsAffBinNqNyQmFSN8mwIFvk2_C0PT6ycg6LaKKO1A");
In der ersten Zeile sendet man den Header, der immer bei einem Seitenaufruf automatisch gesendet wird. Die URL ist der Ort der Verarbeitung der Logineingabe. Die Methode sendPOST sendet einen post request mit deinen Formular angaben. Wen interessiert wie man diese Daten bekommt klickt hier.


Methode 2

Code:
userAgent.visit("http://www.elitepvpers.com");
			  Form form = userAgent.doc.getForm(0);
			  form.setTextField("vb_login_username", "your_username");
			  form.setTextField("vb_login_password", "your_password");
			  form.submit();
			  System.out.println("location:" + userAgent.getLocation());
Die visit Methode ist relativ selbsterklärend.
Danach wird das erste Formular geholt.
Beim setTextField wird das username Textfeld mit dem Namen vb_login_username mit deinem username gefüllt. Um den Namen eines Feldes herauszufinden, klickt man rechtsklick auf das Feld, dann Element untersuchen und dort findet man den Namen des Elements.
Zum Schluss submitet man die Form und schickt sie somit an den Server zur Verarbeitung.
Mit dem Syste.out.print.ln kann man noch überprüfen, ob der Login geklappt hat, in dem die aktuelle location ausgibt.

Schritt 7

Finden und herauslesen der Account Infos im Quelltext.

Code:
                          Element elements = userAgent.doc.findFirst("<ul id=\"userbaritems\">");
			  String messages = elements.getElement(1).innerHTML();
			  
			  
			  int index = messages.lastIndexOf(",");
			  int index2 = messages.indexOf("Unread ");
			  first_message_number = messages.substring(index2+7, index);
			  
			  index = messages.lastIndexOf(".");
			  index2 = messages.indexOf("Total ");
			  second_message_number = messages.substring(index2+6, index);
			  
			  e_gold = elements.getElement(3).getElement(1).innerHTML();
Um diese Infos zu kriegen muss man den Quelltext analysieren. Die Infos zu deinen Nachrichten und dem Elitegold befinden sich im <ul> tag, deshalb speichere ich das in der Variable elements. Danach wird das ZWEITE Element innerhalb des ul tags herausgelesen, nämlich ein li tag in dem die Nachrichten gespeichert sind. Deshalb getElement(1). Die 6 nächsten Zeilen sind normale Stringoperationen, um die Nummern der Nachrichten zu extrahieren. In der letzten Zeile wird das egold aus dem Quelltext extrahiert. Dieses müssen wir glücklicherweise nicht mehr weiter bearbeiten.

Somit haben wir bereits alle Infos, die wir wollten. Nun kann man das noch schön darstellen, dieser Schritt gehört aber nicht mehr zum wsentlichen Part.

Code:
lblNewLabel_1.setText(lblNewLabel_1.getText() + first_message_number + "/" + second_message_number);
		lblNewLabel_2.setText(lblNewLabel_2.getText() + e_gold);

Der ganze Code:


Code:
package elitepvpers_login;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.SwingConstants;

import com.jaunt.*;
import com.jaunt.component.Form;

public class code extends JFrame {
	
	private String first_message_number;
	private String second_message_number;
	private String e_gold;
	JLabel lblNewLabel_1 = new JLabel("Private Messages:");
	JLabel lblNewLabel_2 = new JLabel("elite Gold: ");

	private JPanel contentPane;

	public code() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Account Information: ");
		lblNewLabel.setFont(new Font("Arial Black", Font.PLAIN, 23));
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setBounds(0, 11, 434, 28);
		contentPane.add(lblNewLabel);
		
		
		lblNewLabel_1.setFont(new Font("Arial", Font.PLAIN, 14));
		lblNewLabel_1.setBounds(59, 89, 172, 22);
		contentPane.add(lblNewLabel_1);
		
		
		lblNewLabel_2.setFont(new Font("Arial", Font.PLAIN, 14));
		lblNewLabel_2.setBounds(59, 122, 172, 22);
		contentPane.add(lblNewLabel_2);
	}
	
	public void login_to_epvp_and_extract_account_information()
	{
		try{
			  UserAgent userAgent = new UserAgent(); 
			  /*userAgent.sendHEAD("http://www.elitepvpers.com/forum/login.php?do=login");
			  userAgent.sendPOST("http://www.elitepvpers.com/forum/login.php?do=login",
					    "vb_login_username=yourname&vb_login_password=&cookieuser=1&s=&securitytoken=1424094481-c28dfbdcc8291a7d2ff82ae234a3fb7fb8188941&do=login&vb_login_md5password=827ccb0eea8a706c4c34a16891f84e7b&vb_login_md5password_utf=827ccb0eea8a706c4c34a16891f84e7b&logintoken=62f6c856ac739a0304385e654ed1ff8f37c873f2662a72ad1ecef05ef8abf450&agentspecs=271&methoduuidv2=1&loginuuidv2=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImlzcyI6Imh0dHA6XC9cL3d3dy5lbGl0ZXB2cGVycy5jb21cL2ZvcnVtIn0.ImRXcWNHeWI4bGxWRUhZXC9PRGhtTEN1eFRxK3ViQzhqa3RJa2Jid2lxYlpGR3dcL3ppbW8zWFRreXRSckVBV3BQUDNXT1YrKzdadnVFa0F5RThOc3ljVk1rZnRUQWlUektCTUt0c3JkN1M1T0k4dkVsdWNjYmM2TVNVaGVlNzRLT1wvd00wNDhiK1N4UXJsZmNSUjhPcUhpNXFDdkpETXl6NkRkYVlEUDVtbTR2dFRweEwxU2ZOdjVJc3hsRkptMHpqMTA5M3Mrd29KOWdcL1ZhWkt6WjFMTmxoM2FXeGpuNWdITkxxYW9BQVZJVVNZeUFBenpnaW0yeE0weTczK1VJZGF0Ig.dRsAffBinNqNyQmFSN8mwIFvk2_C0PT6ycg6LaKKO1A");
			  */
			  
			  userAgent.visit("http://www.elitepvpers.com");
			  Form form = userAgent.doc.getForm(0);
			  form.setTextField("vb_login_username", "yourname");
			  form.setTextField("vb_login_password", "your_password");
			  form.submit();
			  System.out.println("location:" + userAgent.getLocation() + "");
			  
			  Element elements = userAgent.doc.findFirst("<ul id=\"userbaritems\">");
			  String messages = elements.getElement(1).innerHTML();
			  
			  
			  int index = messages.lastIndexOf(",");
			  int index2 = messages.indexOf("Unread ");
			  first_message_number = messages.substring(index2+7, index);
			  
			  index = messages.lastIndexOf(".");
			  index2 = messages.indexOf("Total ");
			  second_message_number = messages.substring(index2+6, index);
			  
			  e_gold = elements.getElement(3).getElement(1).innerHTML();
			  
			}
			catch(JauntException e){
			  System.err.println(e);
			}
	}
	public void print_information()
	{
		lblNewLabel_1.setText(lblNewLabel_1.getText() + first_message_number + "/" + second_message_number);
		lblNewLabel_2.setText(lblNewLabel_2.getText() + e_gold);
	}
	
	public static void main(String[] args) {
		code frame = new code();
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		frame.login_to_epvp_and_extract_account_information();
		frame.print_information();
	}
	
}
ACHTUNG Hier müssen noch die userdaten angepasst werden.





Das wäre es schon. Ich entschuldige mich bereits im Voraus für Schreibfehler oder Unklarheiten, welche wahrscheinlich häufig vorkommen werden. Meine elementare Absicht mit diesem Tut war, euch die Einfachheit der Webautomatisierung mit Java aufzuzeigen.

Mit freundlichen Grüssen
w1nst0ne
w1nst0ne is offline  
Old 02/16/2015, 17:30   #2
 
Zunft's Avatar
 
elite*gold: 0
Join Date: Mar 2013
Posts: 3,185
Received Thanks: 1,317
Da ich gerade ebenfalls in die Richtung programmiere, habe ich hier einen alternativen Weg mithilfe von inkl. MD5 Hash vom Passwort erzeugen und Session Cookie holen und speichern:

Code:
private final String USER_AGENT = "Mozilla/5.0";
String strCookie;
    
    public void login(String username, String md5Password)
    {
        try { 
            
            HttpClient httpClient = new HttpClient();

            httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT, this.USER_AGENT);

            

                PostMethod postMethod = new PostMethod("http://www.elitepvpers.com/forum/login.php?do=login&langid=1") 
                {
                    @Override
                    public boolean getFollowRedirects()
                    {
                        return true;
                    }
                };

                postMethod.addParameter("vb_login_username", username);
                postMethod.addParameter("cookieuser", "1");
                postMethod.addParameter("s", "");
                postMethod.addParameter("securitytoken", "guest");        
                postMethod.addParameter("do", "login");
                postMethod.addParameter("vb_login_md5password", md5Password);
                postMethod.addParameter("vb_login_md5password_utf", md5Password);
                postMethod.addParameter("Content-Type", "ISO-8859-1");

                
                httpClient.executeMethod(postMethod);
                String resp = postMethod.getResponseBodyAsString();

                System.out.println("Cookie - wichtig: " + getCookies(httpClient));

                System.out.println("Response: " + resp);
                
                if(isLoggedIn(resp))
                    System.err.println("Erfolgreich eingeloggt");
                else
                    System.err.println("Nicht eingeloggt");        
            
        } catch (IOException ex) {
            Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

public boolean isLoggedIn(String input)
    {
        if(input.contains("Log Out"))
            return true;
        return false;
    }

public String getCookies(HttpClient client)
    {
      Cookie[] cookies = client.getState().getCookies();
      
      strCookie = "";
      
      for (int i = 0; i < cookies.length; i++) 
      {
        Cookie cookie = cookies[i];
        
        if(cookie.getName().equals("bbsessionhash"))
        {
            strCookie = cookie.toString();
        }
      }
      
      return strCookie;

    }
    
    public String createMd5(String input) throws NoSuchAlgorithmException, UnsupportedEncodingException
    {
        
        
        MessageDigest md = MessageDigest.getInstance("MD5");
		md.update(input.getBytes());
		byte[] digest = md.digest();
		StringBuffer sb = new StringBuffer();
		for (byte b : digest) {
			sb.append(String.format("%02x", b & 0xff));
		}
        
        System.out.println(sb.toString());
        
        return sb.toString();
    }
Zunft is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[JAVA SOURCE] unExif - META DATA von Fotos entfernen
12/09/2014 - Java - 2 Replies
Hallo! Ich präsentiere euch hier ein kleines Programm, das ich vor kurzem in Java schrieb. Das Tool entfernt Metadaten, wie GeoTags oder Daten über die Kamera von der Fotodatei und ist dabei sehr nutzerfreundlich gestaltet. Den Sourcecode und einen Download für unExif findet ihr auf meinem Repo bei BitBucket: unExif - Repository bei BitBucket http://i.imgur.com/smhbx4C.png
Browsergame Data Extraction
10/02/2014 - Browsergames - 4 Replies
I have been looking for a tool or away to extract data from a browsergame. Images to be exact. I'm not talking about facebook browsergames, I'm talking about games such as 'Monkey King Online'. Is there away to get all the images from these browsergames? Any help on this would be greatly appreciated! Thank you.
Data.dat extraction Developer Thread
04/16/2012 - Archlord - 17 Replies
Hi, i have coded an extractor for the Data.dat/Reference.dat file (easy going). This makes it possible to extract all the files in it. Inside the Data.dat files i have found some file formats: .tx1 .ecl .ean All of this files are encrypted with the Crypto API (like the ini files) but not with the <1111> key ... they use <asdfqwer> instead. So far it was easy going ^^ .
[resquest]Data Pk2 FUll Extraction
11/29/2011 - SRO Private Server - 2 Replies
Hi plz uplod lastest ksro Data pk2 >extrated<or plz tell me how to extract fulll i try with pk2 editor but get error >C++ end closed<



All times are GMT +1. The time now is 17:49.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.