Page 3 of 8 FirstFirst 12345 ... LastLast
Results 31 to 45 of 118
  1. #31
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    I figure it is easier figuring out the ids from the client instead of reverse engineering them the hard way ... ;-) Thank you for your efforts!

    Here the HELLO packet specs ...

    Code:
    sub deconstruct_hello {
     my $self=shift;
     my($ref_data)=@_;
     
     my $buildVersion=readUTF($ref_data);
     my $gameId=readInt($ref_data);
     my $guid=readUTF($ref_data);
     my $password=readUTF($ref_data);
     my $secret=readUTF($ref_data);
     my $keyTime=readInt($ref_data);
     
     my @Key=();
     my $keySize=readUnsignedShort($ref_data);
     for(my $s=0;$s<$keySize;$s++){
      push @Key,readUnsignedByte($ref_data));
     }
     
     my @unknown=();  
     my $unknownSize=readInt($ref_data);
     for(my $s=0;$s<$unknownSize;$s++){
      push @unknown,readUTF($ref_data));
     }
     
     # misc = either
     # steamworks, steam, 7654321, steam
     # for steam or
     # <empty>, rotmg, <empty> , rotmg
     # for the web client
     
     my @misc=();
     push @misc,readUTF($ref_data));
     push @misc,readUTF($ref_data));
     push @misc,readUTF($ref_data));
     push @misc,readUTF($ref_data));
     
     my @Key2=(); 
     my $keySize2 = readUnsignedShort($ref_data);
     for(my $s=0;$s<$keySize2;$s++){
      push @Key2,readUnsignedByte($ref_data));
     }

    Wtf is wrong with this forum? I post stuff within [CODE] tags and turn off every parsing and it still converts variable names to fucking tags?


    p.s.: Does anyone happen to know what this is good for? What does "logFteStep" stand for?

    Code:
    2013-03-28 12:55:54 POST https://realmofthemadgod.appspo*****m/log/logFteStep                                                                     
                             ? 200 text/plain 25B                                                                                                    
    Request                                                                  Response                                                                
    Accept:           */*                                                                                                                            
    Accept-Language:  de-AT                                                                                                                          
    Referer:          https://realmofthemadgod.appspo*****m/AssembleeGameClient1364846922.swf                                                          
    x-flash-version:  11,6,602,180                                                                                                                   
    Content-Type:     application/x-www-form-urlencoded                                                                                              
    Content-Length:   137                                                                                                                            
    Accept-Encoding:  gzip, deflate                                                                                                                  
    User-Agent:       Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)                                                         
    Host:             realmofthemadgod.appspo*****m                                                                                                   
    Connection:       Keep-Alive                                                                                                                     
    Cache-Control:    no-cache                                                                                                                       
    URLEncoded form                                                                                                                                  
    ignore:            187286                                                                                                                        
    game_net:          rotmg                                                                                                                         
    fteStepCompleted:  100                                                                                                                           
    password:          foobar                                                                                                                        
    play_platform:     rotmg                                                                                                                         
    guid:             foo@bar.com
    Last edited by eth0nic; 05-13-2013 at 06:33 PM.

  2. #32
    DatCoder's Avatar
    Join Date
    Feb 2013
    Gender
    male
    Posts
    265
    Reputation
    10
    Thanks
    178
    My Mood
    Inspired
    Try editing your post, I'm not sure why the forum converts your variables to forum tags...
    That fteStep is bugging me too. I've met it many times so I know what it is but I don't know why it is there ...

    Fte stands for watchForTutorialExit. When you connect for the first time and your client still has the default needsTutorial=true parameter, it connects you to the tutorial and sets the ftp to True, calls ExternalInterface.call("rotmg.Marketing.track(\"in stall\")") if it's available (more info here: ExternalInterface - Adobe ActionScript® 3 (AS3 ) API Reference), and sets the first step to 100. At every step it sends the userinfo, step, platform, game_net to /log/logFteStep.
    The next step is the Kitchen which is 200, and when you finished the tutorial it sets the step to 9900 and turns off the watchForTutorialExit (fte) and needsTutorial.
    I'm not sure why they does this but it must have something to do with statistics and marketing... :/ I hope you could follow me.

  3. #33
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    Quote Originally Posted by DatCoder View Post
    Try editing your post, I'm not sure why the forum converts your variables to forum tags...
    That fteStep is bugging me too. I've met it many times so I know what it is but I don't know why it is there ...

    Fte stands for watchForTutorialExit.
    I tried 5 times ... it always converts @<somename> to the users page if <somename> is found in the Users table apparently ...

    Aaaaah, ok ... I thought it had to do with soem anti-cheat measurement they implemented ... like some invisible heartbeat thingy bots would be likely not to send ... i.e. to have a blacklists of not-so-legit clients. Thank you for clearing things up yet again! :-)

    ---------- Post added at 07:24 PM ---------- Previous post was at 07:21 PM ----------



    p.s.: parsing code of this forum seems to be broken ... should of course exclude anything between [CODE] tags from s/@foo/[MENTION...]...[/MENTION...]/ substitution ...

    Code:
     foobar
    
     @eth0nic
    
     @hello


    ---------- Post added at 07:43 PM ---------- Previous post was at 07:24 PM ----------

    Quote Originally Posted by DatCoder View Post
    and when you finished the tutorial it sets the step to 9900 and turns off
    OVER 9000? ;-)
    Last edited by eth0nic; 05-13-2013 at 07:27 PM.

  4. #34
    DatCoder's Avatar
    Join Date
    Feb 2013
    Gender
    male
    Posts
    265
    Reputation
    10
    Thanks
    178
    My Mood
    Inspired
    Quote Originally Posted by eth0nic View Post
    OVER 9000? ;-)
    Sure
    Anyway here is my HELLO packet, that misc data is the account data that is sent to the logFteStep, and the unknown one is the map itself, it's probably there for the mapeditor (I've never used it).
    Code:
    class HELLO(Packet):
    	"""First packet to send after establishing a connection with the server.
    	It contains informations about the account, client and connection."""
    	def __init__(self):
    		Packet.__init__(self)
    	def loadData(self, data):
    		self.buildVersion, data = readUTF(data)
    		self.gameId, data = readInt(data)
    		self.guid, data = readUTF(data)
    		self.password, data = readUTF(data)
    		self.secret, data = readUTF(data)
    		self.keyTime, data = readInt(data)
    		size, data = readShort(data)
    		self.key, data = readBytes(data, size)
    		size, data = readInt(data)
    		self.mapdata, data = readUTFBytes(data, size)
    		self.entrytag, data = readUTF(data)
    		self.game_net, data = readUTF(data)
    		self.game_net_user_id, data = readUTF(data)
    		self.play_platform, data = readUTF(data)
    		self.platform_token, data = readUTF(data)
    		self.isExhausted(data)
    	def getData(self):
    		data = bytearray()
    		data = writeUTF(self.buildVersion, data)
    		data = writeInt(self.gameId, data)
    		data = writeUTF(self.guid, data)
    		data = writeUTF(self.password, data)
    		data = writeUTF(self.secret, data)
    		data = writeInt(self.keyTime, data)
    		data = writeShort(len(self.key), data)
    		data = writeBytes(self.key, data)
    		data = writeInt(len(self.mapdata), data)
    		data = writeUTFBytes(self.mapdata, data)
    		data = writeUTF(self.entrytag, data)
    		data = writeUTF(self.game_net, data)
    		data = writeUTF(self.game_net_user_id, data)
    		data = writeUTF(self.play_platform, data)
    		data = writeUTF(self.platform_token, data)
    		return data
    	def debugString(self):
    		return 'HELLO:' + \
    			' buildVersion="' + self.buildVersion + '"' + \
    			' gameId="' + str(self.gameId) + '"' + \
    			' guid="' + self.guid + '"' + \
    			' password="' + self.password + '"' + \
    			' secret="' + self.secret + '"' + \
    			' keyTime=' + str(self.keyTime) + \
    			' key=' + str(binascii.hexlify(self.key), 'ascii')
    ^And without tags

  5. The Following User Says Thank You to DatCoder For This Useful Post:

    eth0nic (05-13-2013)

  6. #35
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    Quote Originally Posted by DatCoder View Post
    that misc data is the account data that is sent to the logFteStep
    I figured that ... hence the question about logFteStep ;-) Thank you (yet) again!

    ---------- Post added at 08:36 PM ---------- Previous post was at 08:35 PM ----------

    Quote Originally Posted by DatCoder View Post
    hexlify
    i love that ;-)

    ---------- Post added at 08:39 PM ---------- Previous post was at 08:36 PM ----------

    p.s.: Isn't your packet parsing missing the Key2 stuff? You will need it if using a steam client with your proxy and if you don't just pass through the HELLO packet that is of course.
    Last edited by eth0nic; 05-13-2013 at 08:46 PM.

  7. #36
    DatCoder's Avatar
    Join Date
    Feb 2013
    Gender
    male
    Posts
    265
    Reputation
    10
    Thanks
    178
    My Mood
    Inspired
    Quote Originally Posted by eth0nic View Post
    p.s.: Isn't your packet parsing missing the Key2 stuff? You will need it if using a steam client with your proxy and if you just don't pass through the HELLO packet that is.
    That's called platform token and it's there.

  8. #37
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    Quote Originally Posted by DatCoder View Post
    That's called platform token and it's there.
    Ah ok ... the data doesn't look like a PascalString to me. I thought that line still belongs to the "misc" block because of the writeUTF() call ...

  9. #38
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    There is a new unsignedShort value for every tile in the UPDATE packet ... anyone happens to know its purpose?

    Code:
    for(my $t=0;$t<$tsize;$t++){
     my %tile=(
      'x'=>readUnsignedShort($self->{data}),
      'y'=>readUnsignedShort($self->{data}),
      'foo'=>readUnsignedByte($self->{data}),
      'type'=>readUnsignedByte($self->{data})
     );
     #print Dumper(\%tile) . "\n";
     print $tile{'x'} . '/' . $tile{'y'} . ' ' . $tile{'foo'} . ' ' . $tile{'type'} . "\n";
     push(@{$self->{'tiles'}},\%tile);
    }
    Last edited by eth0nic; 05-20-2013 at 03:13 PM.

  10. The Following User Says Thank You to eth0nic For This Useful Post:

    gorgor (05-22-2013)

  11. #39
    Botmaker's Avatar
    Join Date
    Nov 2012
    Gender
    male
    Location
    England
    Posts
    1,360
    Reputation
    89
    Thanks
    7,597
    My Mood
    Amused

  12. #40
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    roger ... so they changed it from UByte to Short ... maybe they ran out of ids ;-) thanks!

    so the correct tile struct now is:

    Code:
    my %tile=('x'=>readUnsignedShort($self->{data}),'y'=>readUnsignedShort($self->{data}),'type'=>readUnsignedShort($self->{data}));

  13. #41
    Adri4nPvP's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    7
    Reputation
    10
    Thanks
    0
    Does anyone have a working 13.3 client? I would happely be using it

  14. #42
    eth0nic's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    507
    Reputation
    10
    Thanks
    80
    Quote Originally Posted by Adri4nPvP View Post
    Does anyone have a working 13.3 client? I would happely be using it
    This thread is only meant as a collection of useful postings - tank you.

  15. #43
    Adri4nPvP's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Posts
    7
    Reputation
    10
    Thanks
    0
    but i need one now pm me with DL

  16. #44
    Botmaker's Avatar
    Join Date
    Nov 2012
    Gender
    male
    Location
    England
    Posts
    1,360
    Reputation
    89
    Thanks
    7,597
    My Mood
    Amused
    Quote Originally Posted by eth0nic View Post
    roger ... so they changed it from UByte to Short ... maybe they ran out of ids ;-) thanks!

    so the correct tile struct now is:

    Code:
    my %tile=('x'=>readUnsignedShort($self->{data}),'y'=>readUnsignedShort($self->{data}),'type'=>readUnsignedShort($self->{data}));
    Yeah it appears the only relevant thing they have change is the tile id from byte to short , I’m testing the bots for stability, I’m going to implement a 2 min chat interval, has you suggested. thanks for your help.
    Last edited by Botmaker; 05-20-2013 at 03:44 PM.

  17. #45
    MasterFart's Avatar
    Join Date
    Mar 2013
    Gender
    male
    Location
    Eastern Steppes
    Posts
    833
    Reputation
    15
    Thanks
    124
    Quote Originally Posted by Adri4nPvP View Post
    but i need one now pm me with DL
    Doesn't that suck. GO and learn to play the game without using hacked client. Also, trying to bypass the approval thing can get you banned. TELL SOMEONE WHO CARES.
    The ends justify the means.

Page 3 of 8 FirstFirst 12345 ... LastLast

Similar Threads

  1. Please stop ruining the thread of relevant information.
    By FainTMako in forum Realm of the Mad God Discussions
    Replies: 15
    Last Post: 12-19-2014, 09:56 PM
  2. Information on: Your thread activities
    By Woods in forum Minecraft Help
    Replies: 0
    Last Post: 04-07-2013, 12:52 PM
  3. Replies: 6
    Last Post: 09-07-2011, 07:10 PM
  4. Sonic Generations Information Thread
    By Hotsuma in forum General Gaming
    Replies: 0
    Last Post: 06-08-2011, 09:58 PM
  5. Replies: 10
    Last Post: 08-15-2009, 06:07 PM