Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

HabBit - Habbo Hotel Client Modifier

RaGEZONE VIP
[VIP] Member
Joined
Aug 13, 2014
Messages
121
Reaction score
239
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

HabBit v1.3.73:

  • Updated date time check removal process.
  • Added host check bypass. (No connections were being received)
  • Disassembling process is now faster due to only extracting the incoming/outgoing messages if the "/dumpheaders" parameter is found.

Download:
 
Last edited:
Developer
Developer
Joined
Dec 11, 2010
Messages
2,955
Reaction score
2,688
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Thank you for this amazing release Arachis :):
 
RaGEZONE VIP
[VIP] Member
Joined
Aug 13, 2014
Messages
121
Reaction score
239
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Sorry, I forgot to add something to the host check thingy bypass stuff, so if you're client is getting stuck on 76% it is not your fault. It's a pain implementing the rest of it, jump instructions are cancer.

Edit:
Took a few good hours to figure out a decent way to do this(thanks Burak):
PeanutButterHam - HabBit - Habbo Hotel Client Modifier - RaGEZONE Forums


It's not as easily done in bytecode, especially when all the obfuscation is placing retarded jump instructions everywhere. You also can't really update something that's inside of an IF statement so easily, you need to correct the amount of bytes it needs to jump so you need to go back and re-write it from that point if the code inside is bigger/smaller.

I just took the easy route and made it jump +6 bytes, because yea.
 
Last edited:
Junior Spellweaver
Joined
Oct 20, 2013
Messages
105
Reaction score
27
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Hello,
I know how to update etc. (Finding packets and structures) but i dont know things about the crypto so i have a question:
In the RSA file there are 3 Keys:
NED
in your topic stays 2 Keys, N and E

So my question is, what is the D key?
 
Developer
Developer
Joined
Dec 11, 2010
Messages
2,955
Reaction score
2,688
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Hello,
I know how to update etc. (Finding packets and structures) but i dont know things about the crypto so i have a question:
In the RSA file there are 3 Keys:
NED
in your topic stays 2 Keys, N and E

So my question is, what is the D key?

D key is private, your emulator defines that (I believe), but you should double check with Arachis.
 
Skilled Illusionist
Joined
Mar 26, 2013
Messages
371
Reaction score
280
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Nice Arachis ! Your version is definitively the best !

(You do all I do in NodeJS better in C# xD (packetlogger, bot, swf cracker) )
 
RaGEZONE VIP
[VIP] Member
Joined
Aug 13, 2014
Messages
121
Reaction score
239
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Hello,
I know how to update etc. (Finding packets and structures) but i dont know things about the crypto so i have a question:
In the RSA file there are 3 Keys:
NED
in your topic stays 2 Keys, N and E

So my question is, what is the D key?
The RSA keys in the main post are placed into the client by default, I just now added the private exponent(D) to the main post(I forgot to) for it to be used by the initiator(Using Joopie's keys, since most people are "familiar" with them already).

Does anyone want anything else to be added to this application, ideas, suggestions?
  • Header extractor,
  • Splash photo changer,
  • Build string changer(packet)
  • Message name changer(_-AB > Incoming_4000)

I wouldn't want to start to work on any of this unless people would actually use it.
 
Skilled Illusionist
Joined
Mar 26, 2013
Messages
371
Reaction score
280
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Arachis nice, if you want I have a lot of useful idea (PM me your skype if you have) !
 
RaGEZONE VIP
[VIP] Member
Joined
Aug 13, 2014
Messages
121
Reaction score
239
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

HabBit v1.3.91:

  • Minor UI changes.
  • Fixed bug that failed to remove local use restrictions:

Download:
 
RaGEZONE VIP
[VIP] Member
Joined
Aug 13, 2014
Messages
121
Reaction score
239
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

HabBit v1.3.177:

  • When the "dumpheaders" argument is set, each message instance will have a hash. This hash could be used to compare previous client build messages, with newer ones, or find similar message types within the current build.
mn3VCaE - HabBit - Habbo Hotel Client Modifier - RaGEZONE Forums


Download:


This feature is still new, and there is still a bit more I can add to make more "unique" message hashes(MD5). I took the idea from XDR's AHPU, since it's a pretty Ducking cool idea. To summarize the brilliant idea, imagine a red flower with 6 petals, but some punk always paints it blue every week. The point is, the flower will still have 6 petals, regardless of the paint.
 

Attachments

You must be registered for see attachments list
git bisect -m
Loyal Member
Joined
Sep 2, 2011
Messages
2,171
Reaction score
916
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

HabBit v1.3.177:

  • When the "dumpheaders" argument is set, each message instance will have a hash. This hash could be used to compare previous client build messages, with newer ones, or find similar message types within the current build.
mn3VCaE - HabBit - Habbo Hotel Client Modifier - RaGEZONE Forums


Download:


This feature is still new, and there is still a bit more I can add to make more "unique" message hashes(MD5). I took the idea from XDR's AHPU, since it's a pretty Ducking cool idea. To summarize the brilliant idea, imagine a red flower with 6 petals, but some punk always paints it blue every week. The point is, the flower will still have 6 petals, regardless of the paint.


Xdr is master haha, i really liked his idea of using "points" system to check which packet is the updated packet of the previous.
Is good but not totally 100%. I saw that 99% of the Outgoing packet's are correct, but the major mistakes happens in Incoming packets.

I think because some packets doesn't has really something to compare. For manually help some strings, messages, variables, and non obfuscated strings, also structures, and size of the line helps to the AHPU to check which packet is the right one. But some packets is really hard to compare. Some packets also change the position compared of other packets (generally example packet _-XHD456 will be above _-fhnjbj87 so in newest release the _-44444yeg (the new packet from _-XHD456) will also be above from the new packet from _-fhnjbj87, but some times the packet voids changes, some un-obfuscated methods will be obfuscated.

I'm trying to figure out how is the packet name obfuscation, i think is not random. I thought every release the gamedata file names and also the PRODUCTION, RELEASE, DEVELOPMENT folders from gordon follows a hash. This hash probably is used for a base SALT for the Habbo.swf obfuscation, packet id changes, and also the same in (example: furniture.xml furnitures id's). Some things changes others not. Some packets doesn't change ID too.

Will be funny if they-re using some old ciphers like RSA to obfuscation. If the SWF was in C++ using IL decompiler will be really hopeful.

Also the Void names of the Habbo.swf follows some 64bit-HEX criterias. Soo, someday we will figure out how this xit is encrypted and encoded.
 

Attachments

You must be registered for see attachments list
Developer
Developer
Joined
Dec 11, 2010
Messages
2,955
Reaction score
2,688
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

HabBit v1.3.177:

  • When the "dumpheaders" argument is set, each message instance will have a hash. This hash could be used to compare previous client build messages, with newer ones, or find similar message types within the current build.
mn3VCaE - HabBit - Habbo Hotel Client Modifier - RaGEZONE Forums


Download:


This feature is still new, and there is still a bit more I can add to make more "unique" message hashes(MD5). I took the idea from XDR's AHPU, since it's a pretty Ducking cool idea. To summarize the brilliant idea, imagine a red flower with 6 petals, but some punk always paints it blue every week. The point is, the flower will still have 6 petals, regardless of the paint.

Holy poop, this is pretty Ducking awesome.

Nice analogy too :):
 

Attachments

You must be registered for see attachments list
RaGEZONE VIP
[VIP] Member
Joined
Aug 13, 2014
Messages
121
Reaction score
239
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Going to take a minute to explain the process thoroughly, since some of you might want to know without trying to "decipher" the source code( : ).

When choosing the objects to include in the hashing process, you cannot include the object's name for very obvious reasons(name obfuscation). You can include anything else, as long as it's not the "name" of said object.

As many of you know already, each packet is represented by a class/type. With each class/type, comes a set of traits that represents the type's properties/methods/constants/fields. Each trait contains unique data, a method with two parameters, a constant with a specific value, and the method body(bytecode) that contains the instructions to read/write the data of the message. By using these values, we can start generating a unique personality for each message handler. Although, there are many Outgoing message that construct a basic packet the same way, so it becomes harder to create a unique hash for it.

Here are two Outgoing message handlers:
Code:
public class _-1Yy implements _-2kQ, _-2D-
{
    private var _-2pd:Array;

    public function _-1Yy(_arg1:int, _arg2:int)
    {
        this._-2pd = new Array();
        super();
        this._-2pd.push(_arg1);
        this._-2pd.push(_arg2);
    }
    public function _-4bf():Array
    {
        return (this._-2pd);
    }
    public function dispose():void
    {
        this._-2pd = null;
    }
    public function get disposed():Boolean
    {
       return (false);
    }
}
Code:
public class _-2AS implements _-2kQ, _-2D-
{
    private var _-2pd:Array;

    public function _-2AS(_arg1:int, _arg2:int)
    {
        this._-2pd = new Array();
        super();
        this._-2pd.push(_arg1);
        this._-2pd.push(_arg2);
    }
    public function _-4bf():Array
    {
        return (this._-2pd);
    }
    public function dispose():void
    {
        this._-2pd = null;
    }
    public function get disposed():Boolean
    {
       return (false);
    }
}
Disregarding their names, they will both generate the exact same hash.
A good way(possibly the only way) to combat this problem, is to scan each method body that sends packets and check if this instance/type is called in the bytecode. Once it has been determined if it is being used by the method, add the instance that houses the method to the hashing process.

Fortunately, every Incoming packet handler is a bit more unique compared to that of the Outgoing composers. The "uniqueness" does not come from the type that is connected to the id, but from the Parser type that it uses.

This is a basic Incoming packet event handler:
Code:
public class _-260 extends _-1l0 implements _-3GS
{
    public function _-260(_arg1:Function)
    {
        super(_arg1, _-3vs);
    }
    public function _-67n():_-3vs
    {
        return ((this._-1uA as _-3vs));
    }
}
They all mostly look like this, except for some that have a second parameter in the constructor, but don't worry about that. The parser is "_-3vs", but since we can't use that name for the hashing process, we use that type's inner data to represent it:
Code:
public class _-3vs implements _-3DS
{
    private var _-5sT:Array;

    public function flush():Boolean
    {
        this._-5sT = [];
        return (true);
    }
    public function parse(_arg1:_-5gX):Boolean
    {
        var k:int = _arg1._-1We();
        var k:int;
        while (k < k)
        {
            this._-5sT.push(new _-2nE(_arg1));
            k++;
        };
        return (true);
    }
    public function get prizes():Array
    {
        return (this._-5sT);
    }
}
Look at all that unique stuff, it's so unique I'll name him billy. We can use billy's methods/bytecode/slots to build an identity for him, case closed. Please note that HabBit(1.3.177), currently does not use the Parser for the hashing process, this will be included in the next update but I wan't to include a bit more to it before releasing.

I've managed to reduce the amount of Incoming duplicate hashes to 125 out of a total of 468 Incoming message handlers.
 
Last edited:
Joined
Aug 24, 2012
Messages
603
Reaction score
300
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Xdr is master haha, i really liked his idea of using "points" system to check which packet is the updated packet of the previous.
Is good but not totally 100%. I saw that 99% of the Outgoing packet's are correct, but the major mistakes happens in Incoming packets.

I think because some packets doesn't has really something to compare. For manually help some strings, messages, variables, and non obfuscated strings, also structures, and size of the line helps to the AHPU to check which packet is the right one. But some packets is really hard to compare. Some packets also change the position compared of other packets (generally example packet _-XHD456 will be above _-fhnjbj87 so in newest release the _-44444yeg (the new packet from _-XHD456) will also be above from the new packet from _-fhnjbj87, but some times the packet voids changes, some un-obfuscated methods will be obfuscated.

I'm trying to figure out how is the packet name obfuscation, i think is not random. I thought every release the gamedata file names and also the PRODUCTION, RELEASE, DEVELOPMENT folders from gordon follows a hash. This hash probably is used for a base SALT for the Habbo.swf obfuscation, packet id changes, and also the same in (example: furniture.xml furnitures id's). Some things changes others not. Some packets doesn't change ID too.

Will be funny if they-re using some old ciphers like RSA to obfuscation. If the SWF was in C++ using IL decompiler will be really hopeful.

Also the Void names of the Habbo.swf follows some 64bit-HEX criterias. Soo, someday we will figure out how this xit is encrypted and encoded.

The header ids are all generated randomly.
The obfuscation is just obfuscation, nothing special about that. I have no idea where you'd get this idea from.
Noce updates, Arachis! Can't wait to see more updates :):
 
git bisect -m
Loyal Member
Joined
Sep 2, 2011
Messages
2,171
Reaction score
916
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

Going to take a minute to explain the process thoroughly, since some of you might want to know without trying to "decipher" the source code( : ).

When choosing the objects to include in the hashing process, you cannot include the object's name for very obvious reasons(name obfuscation). You can include anything else, as long as it's not the "name" of said object.

As many of you know already, each packet is represented by a class/type. With each class/type, comes a set of traits that represents the type's properties/methods/constants/fields. Each trait contains unique data, a method with two parameters, a constant with a specific value, and the method body(bytecode) that contains the instructions to read/write the data of the message. By using these values, we can start generating a unique personality for each message handler. Although, there are many Outgoing message that construct a basic packet the same way, so it becomes harder to create a unique hash for it.

Here are two Outgoing message handlers:
Code:
public class _-1Yy implements _-2kQ, _-2D-
{
    private var _-2pd:Array;

    public function _-1Yy(_arg1:int, _arg2:int)
    {
        this._-2pd = new Array();
        super();
        this._-2pd.push(_arg1);
        this._-2pd.push(_arg2);
    }
    public function _-4bf():Array
    {
        return (this._-2pd);
    }
    public function dispose():void
    {
        this._-2pd = null;
    }
    public function get disposed():Boolean
    {
       return (false);
    }
}
Code:
public class _-2AS implements _-2kQ, _-2D-
{
    private var _-2pd:Array;

    public function _-2AS(_arg1:int, _arg2:int)
    {
        this._-2pd = new Array();
        super();
        this._-2pd.push(_arg1);
        this._-2pd.push(_arg2);
    }
    public function _-4bf():Array
    {
        return (this._-2pd);
    }
    public function dispose():void
    {
        this._-2pd = null;
    }
    public function get disposed():Boolean
    {
       return (false);
    }
}
Disregarding their names, they will both generate the exact same hash.
A good way(possibly the only way) to combat this problem, is to scan each method body that sends packets and check if this instance/type is called in the bytecode. Once it has been determined if it is being used by the method, add the instance that houses the method to the hashing process.

Fortunately, every Incoming packet handler is a bit more unique compared to that of the Outgoing composers. The "uniqueness" does not come from the type that is connected to the id, but from the Parser type that it uses.

This is a basic Incoming packet event handler:
Code:
public class _-260 extends _-1l0 implements _-3GS
{
    public function _-260(_arg1:Function)
    {
        super(_arg1, _-3vs);
    }
    public function _-67n():_-3vs
    {
        return ((this._-1uA as _-3vs));
    }
}
They all mostly look like this, except for some that have a second parameter in the constructor, but don't worry about that. The parser is "_-3vs", but since we can't use that name for the hashing process, we use that type's inner data to represent it:
Code:
public class _-3vs implements _-3DS
{
    private var _-5sT:Array;

    public function flush():Boolean
    {
        this._-5sT = [];
        return (true);
    }
    public function parse(_arg1:_-5gX):Boolean
    {
        var k:int = _arg1._-1We();
        var k:int;
        while (k < k)
        {
            this._-5sT.push(new _-2nE(_arg1));
            k++;
        };
        return (true);
    }
    public function get prizes():Array
    {
        return (this._-5sT);
    }
}
Look at all that unique stuff, it's so unique I'll name him billy. We can use billy's methods/bytecode/slots to build an identity for him, case closed. Please note that HabBit(1.3.177), currently does not use the Parser for the hashing process, this will be included in the next update but I wan't to include a bit more to it before releasing.

I've managed to reduce the amount of Incoming duplicate hashes to 125 out of a total of 468 Incoming message handlers.

These things i already know. I said that only in hypothetic terms. Not that is really that.

But thanks for the explanation, other people will love. I lov'd too.

I know also manually cracking, updating and these things.. Only supposing if Sulake was really dumb..



The header ids are all generated randomly.
The obfuscation is just obfuscation, nothing special about that. I have no idea where you'd get this idea from.
Noce updates, Arachis! Can't wait to see more updates :):

Please do comments that will do difference, no SPAM. This is spam.

Remembering: all that i said is hypothetic.
 
Master Summoner
Joined
Dec 1, 2013
Messages
547
Reaction score
694
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

So what's causing the black screen on the habbo.swf loading? And how to disable it since the new habbit source doesn't include it ?
 
Joined
Aug 24, 2012
Messages
603
Reaction score
300
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

These things i already know. I said that only in hypothetic terms. Not that is really that.

But thanks for the explanation, other people will love. I lov'd too.

I know also manually cracking, updating and these things.. Only supposing if Sulake was really dumb..





Please do comments that will do difference, no SPAM. This is spam.

Remembering: all that i said is hypothetic.
Not spam, I was just staying you both your ideas was incorrect. The obfuscation is totally random, as well as the header ids..
 
Initiate Mage
Joined
Dec 29, 2015
Messages
4
Reaction score
1
Re: HabBit - Automatic Habbo Client Cracker(Source | .NET 2.0 | C# 6)

It is really helpful and it works fine for me. Thank You very much!
 
Back
Top