Results 1 to 7 of 7

Thread: Runescape Loader

  1. #1
    Join Date
    Mar 2007
    Posts
    1,700
    Mentioned
    0 Post(s)
    Quoted
    8 Post(s)

    Default Runescape Loader

    Wee.. Another simple java based client loader. Attached jar with src.

    Code:
    package load;
    import java.applet.Applet;
    import java.applet.AppletContext;
    import java.applet.AppletStub;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.io.DataInputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.net.URLConnection;
    import java.util.HashMap;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    public class Loader extends JFrame implements AppletStub {
    
    	private static int world = 1;
    	
    	private static final HashMap<String, String> parameters = new HashMap<String, String>();
    	
    	public Loader(){
    		try {	
    			declareParameters(false);
    			URL loadURL = new URL(getBaseURL().toExternalForm()+"runescape.jar");			
    			
    	        URLClassLoader clientClassLoader = new URLClassLoader(new URL[] { loadURL });
    	        Class clientClass = clientClassLoader.loadClass("client");
    	        Applet loader = (Applet) clientClass.newInstance();   
    	        loader.setStub(this);
    	        
    	        setTitle("Runescape Loader by lordsaturn v"+Loader.class.getPackage().getImplementationVersion());
    	        JPanel theGame = new JPanel(new BorderLayout());
    	        theGame.setPreferredSize(new Dimension(768, 560));
    	        setDefaultCloseOperation(EXIT_ON_CLOSE);
    	        setSize(768, 560);
    	        
    	        loader.init();
    	        loader.start();
    	        theGame.add(loader);
    	        getContentPane().add(theGame, BorderLayout.CENTER);
            
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public void declareParameters(boolean hardcoded){        
    		if (hardcoded){ //build 612
    			//<applet name="RuneScape" id="game" width="100%" height="100%" alt="Please visit http://www.runescape.com/kbase/guid/the_game_won_t_load for assistance" archive="loader-976989916.jar" code="loader.class" mayscript="">
    			parameters.put("name", "RuneScape"); 
    			parameters.put("id", "game"); 
    			parameters.put("width", "100%"); 
    			parameters.put("height", "100%"); 
    			parameters.put("alt", "Please visit http://www.runescape.com/kbase/guid/the_game_won_t_load for assistance"); 
    			 
    			parameters.put("archive", "loader-976989916.jar");
    			parameters.put("code", "loader.class"); 
    			
    			parameters.put("cabbase", "loader-2057789173.cab");
    			parameters.put("java_arguments", "-Xmx102m -Dsun.java2d.noddraw=true");
    			parameters.put("colourid", "0");
    			parameters.put("worldid", Integer.toString(world));
    			parameters.put("lobbyid", "1103");//1100 - 1003
    			parameters.put("lobbyaddress", "lobby4.runescape.com"); //lobby1 - lobby4
    			parameters.put("demoid", "901");
    			parameters.put("demoaddress", "demoworld1.runescape.com");			
    			parameters.put("modewhere", "0");
    			parameters.put("modewhat", "0");
    			parameters.put("lang", "0");
    			parameters.put("objecttag", "0");
    			parameters.put("js", "1");
    			parameters.put("game", "0");
    			parameters.put("affid", "0");
    			parameters.put("advert", "1");
    			parameters.put("settings", "wwGlrZHF5gKN6D3mDdihco3oPeYN2KFybL9hUUFqOvk");
    			parameters.put("country", "0");
    			parameters.put("haveie6", "0");
    			parameters.put("havefirefox", "0");
    			parameters.put("cookieprefix", "");
    			parameters.put("cookiehost", ".runescape.com");
    			parameters.put("cachesubdirid", "0");
    			parameters.put("crashurl", "http://www.runescape.com/slu.ws?j=1&amp;crash=1");
    			parameters.put("unsignedurl", "http://www.runescape.com/slu.ws?j=1");
    			parameters.put("sitesettings_member", "0");
    			parameters.put("frombilling", "false");
    			parameters.put("sskey", "");
    			parameters.put("force64mb", "false");
    			parameters.put("worldflags", "1");
    			parameters.put("userFlow", "4513017905689612128");
    			parameters.put("separate_jvm", "true");	
    		}else
    			parseParams();
    	}
    	
    	public void parseParams(){
    		try {
    			//get first page source
    			URL aURL = new URL("http://www.runescape.com/game.ws?j=1");
    			URLConnection uc = openConnection(aURL, "http://www.runescape.com/");
    			String pgSrc = getPageSource(uc);
    			
    			//get second page url
    			int aIndex = pgSrc.indexOf("src")+5;
    			String aStr = pgSrc.substring(aIndex, pgSrc.indexOf("\"", aIndex));
    			aURL = new URL(aStr);
    			
    			//get world number
    			aIndex = aStr.indexOf(".");
    			world = Integer.parseInt(aStr.substring(aIndex-2, aIndex));
    			
    			//get second page source
    			uc = openConnection(aURL, uc.getRequestProperty("Referer"));
    			pgSrc = getPageSource(uc);
    			
    			//get third page url
    			aIndex = pgSrc.indexOf("plugin");
    			aURL = new URL(getBaseURL().toExternalForm()+pgSrc.substring(aIndex, pgSrc.indexOf("\"", aIndex)));
    
    			//get third page source
    			uc = openConnection(aURL, uc.getRequestProperty("Referer"));
    			pgSrc = getPageSource(uc);
    			
    			//get parameters
    			int firstIndex = pgSrc.indexOf("('", 0)+2;
    			int lastIndex = pgSrc.indexOf("')", firstIndex);
    			int lastCodePoint = firstIndex;
    			while (firstIndex >= lastCodePoint){				
    				aStr = pgSrc.substring(firstIndex, lastIndex);
    				aIndex = aStr.indexOf("=");
    				if ((aIndex != -1) && !aStr.contains("<div") && !aStr.contains("<br")){
    					if (!aStr.contains("param")){ //applet config
    						int firstSpaceIndex = 0, lastSpaceIndex = aStr.indexOf(" ");
    						while (firstSpaceIndex < lastSpaceIndex){//multiple params per line
    							if (aStr.charAt(aIndex+1) == '"'){ //use quotes to find lastSpaceIndex
    								lastSpaceIndex = aIndex+2;
    								while (aStr.charAt(lastSpaceIndex++) != '"') ;
    							}
    							parameters.put(aStr.substring(firstSpaceIndex, aIndex), 
    									aStr.substring(aIndex+1, lastSpaceIndex).replaceAll("\"", ""));
    							firstSpaceIndex = lastSpaceIndex+1;
    							lastSpaceIndex = aStr.indexOf(" ", firstSpaceIndex);
    							aIndex = aStr.indexOf("=", aIndex+1);
    						}
    					}else{
    						parameters.put(aStr.substring(aIndex+1, aStr.indexOf(" ", aIndex)).replaceAll("\"", ""),
    								aStr.substring(aStr.indexOf("=", aIndex+1)+1, aStr.indexOf(">")).replaceAll("\"", ""));
    					}					
    				}
    				lastCodePoint = firstIndex;
    				firstIndex = pgSrc.indexOf("('", firstIndex)+2;
    				lastIndex = pgSrc.indexOf("')", firstIndex);
    			}
    			
    			
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public URL getBaseURL(){
    		URL u = null;
    		try {
    			u = new URL("http://world"+world+".runescape.com/");
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return u;
    	}
    	
    	public URLConnection openConnection(URL at, String referer){
    		URLConnection uc = null;
    		try{
    			uc = at.openConnection();
    		
    			uc.addRequestProperty("Accept", "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
    			uc.addRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
    			uc.addRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
    			uc.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
    			uc.addRequestProperty("Connection", "keep-alive");
    			uc.addRequestProperty("Host", "runescape.com");
    			uc.addRequestProperty("Referer", referer);
    			uc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4");
    		}catch (Exception e){
    			e.printStackTrace();
    		}
    		return uc;
    	}
    	
    	public String getPageSource(URLConnection uc){
    		byte[] buffer = null;
    		try{
    			DataInputStream di = new DataInputStream(uc.getInputStream());
    	        buffer = new byte[uc.getContentLength()];
    	        di.readFully(buffer);
    	        di.close();
    	        //Thread.sleep(250 + (int) Math.random() * 500);
    	        return new String(buffer);
    		}catch (Exception e){
    			e.printStackTrace();
    		}
    		return new String(buffer);
    	}
    	
    	public void load(){}
    	
    	public static void main(String[] args) {
    		new Loader().setVisible(true);
    	}
    
    	@Override
    	public void appletResize(int arg0, int arg1) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public AppletContext getAppletContext() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public URL getCodeBase() {
    		return getBaseURL();
    	}
    
    	@Override
    	public URL getDocumentBase() {
    		return getBaseURL();
    	}
    
    	@Override
    	public String getParameter(String arg0) {
    		return parameters.get(arg0);
    	}
    
    }

  2. #2
    Join Date
    Feb 2006
    Location
    Tracy/Davis, California
    Posts
    12,631
    Mentioned
    135 Post(s)
    Quoted
    418 Post(s)

    Default

    Awesome stuff ! Now keep adding to it and make it an awesome runescape client with tons of tools and utilities!

  3. #3
    Join Date
    Nov 2007
    Location
    46696E6C616E64
    Posts
    3,069
    Mentioned
    44 Post(s)
    Quoted
    302 Post(s)

    Default

    Quote Originally Posted by YoHoJo View Post
    Awesome stuff ! Now keep adding to it and make it an awesome runescape client with tons of tools and utilities!
    Yeah, with automatic Simba download and hyperlink to villavu!
    There used to be something meaningful here.

  4. #4
    Join Date
    Feb 2006
    Location
    Tracy/Davis, California
    Posts
    12,631
    Mentioned
    135 Post(s)
    Quoted
    418 Post(s)

    Default

    Calculators, Hiscores, Maps, Timers, GE Lookup, Treasure Trail Helpers, SRL Built In, and then add WoW support, Starcraft Support, Xbox Support, PS3 Support, Ds Emulator, MP3 Player, and Blue Ray. That's what I would do man! Jus' Sayin'

  5. #5
    Join Date
    Jan 2010
    Posts
    5,227
    Mentioned
    6 Post(s)
    Quoted
    60 Post(s)

    Default

    ^ Out of those, I assume only the first seven are valid (I like the mp3 player, actually).

  6. #6
    Join Date
    Feb 2009
    Posts
    1,447
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    Nice. Why don't you use the loader instead of the client so it will load signed? Also, use regex to parse the parameters.

    Code:
    parameters.put("archive", "loader-976989916.jar");
    parameters.put("code", "loader.class");
    You're not using the loader... I also suggest you don't have the option for hard coded params.

  7. #7
    Join Date
    Jan 2007
    Posts
    8,876
    Mentioned
    123 Post(s)
    Quoted
    327 Post(s)

    Default

    Quote Originally Posted by YoHoJo View Post
    Calculators, Hiscores, Maps, Timers, GE Lookup, Treasure Trail Helpers, SRL Built In, and then add WoW support, Starcraft Support, Xbox Support, PS3 Support, Ds Emulator, MP3 Player, and Blue Ray. That's what I would do man! Jus' Sayin'
    Don't forget wi-fi, magnifying glass, frying pan, color picker, Steam Built In, Short-keys to your favorite games...

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •