I took a little peek under the hood, and I found this
.data:0093A110 class GNET::CompressARCFourSecurity
.data:0093A110 class GNET::CompressARCFourSecurity
these are both RTTI type descriptors :)
I saw those called pretty close to some ws_32.send calls. Coincidence? I don't think so.
But who cares about those, when you have the objects that get used for sending data. You don't even have to reverse engineer the packet data, nor decrypt it.
I'm talking about these:
GNET::ChatMessage
GNET::WorldChat
GNET::RoleStatusAnnounce
and maybe more interesting for trade hacks:
GNET::TradeAddGoods_Re
GNET::TradeStart_Re
GNET::TradeRemoveGoods_Re
and there are lots more, for walking, fighting, etc
Just find the constructor of these objects, add breakpoints, and you can figure the other stuff out yourself I think :)
ohyeah, receiving data, I don't know exactly how that works, but I am pretty sure it will clear itself up when you dig into these GNET objects. I'm guessing there is actually a callback to these objects when receiving data.
Just throwing in some ideas ;)
EDIT:
I went a little deeper, I chose 1 object, GNET::ChatRoomCreate, and did some debugging, this is what I found.
Code:
005C86C0 [COLOR="Green"]CONSTRUCTOR of chatRoomCreate, gets normal string of the name of the chatroom[/COLOR]
v
sub_5B3B30, [COLOR="Green"]ENCRYPTION starts here, all data that gets send passes through here, this means walking, battling, skills etc
this is a function of a baseclass, either GNET::MARSHALL or GNET::PROTOCOL I know this because ecx gets passed [/COLOR]
v
sub_5B3B70, [COLOR="Green"]this is a function of an object at offset 0AC, this could be the encryption object?[/COLOR]
calls CALL DWORD PTR DS:[EDX] [COLOR="Green"]///these are just here[/COLOR]
v
somefunc [COLOR="Green"]///to show how the data gets at the socket[/COLOR]
v
00431490
{
00431507 |. FFD5 CALL EBP [COLOR="Green"]//copy data into socket to send[/COLOR]
}
BUT I am not sure if there is really encryption going on, no breakpoints hit on the RCFOUR code while I was testing. They might be just serializing the data in some compressed binary format, which would make more sense anyway