SRL Archive - Research & Development Lounge

[2007] Using OSBuddy's quickhop code


derek22

2014-11-18 01:28:19

If anyone doesn't know what OSBuddy's quick hop feature is: it lets you change worlds instantly in OSRS without having to log out, exactly like the "Join friend" option in Runescape3.

OSBuddy does this by calling code in the client responsible for switching you to a bot world.
(Information: There are two "bot worlds". If the game suspects you of botting, it will transfer you to one of these worlds. This occurs without you logging out and the whole process takes ~one second.).

The gist of this is that there is code in the OSRS client that can allow you to switch to any world without logging out of the game. Any hacked client could call this, you don't have to be OSBuddy. The problem is that I haven't been able to locate this code in the gamepack. I haven't gotten any hints from OSBuddy either, because OSBuddy's gamepack is encrypted in a custom format ending in .fpack.

Any ideas on how I can locate the world switching code in the old school RS gamepack?

Harrier

2014-11-18 02:24:20

@Cheddy

Jethr0x

2014-11-18 10:40:39

If you don't understand the client enough to even find the code, you should not even bother trying to use it, because if you do just one thing wrong, you'll probably just be banned for using a hacked client.

Cheddy

2014-11-18 11:34:44

You won't get banned for using a hacked client ;)

Quite easily actually to hop worlds.

You need to construct a new in-game world object and set the domain, worldID, and mask. Then using that you invoke the world hop method, and finally set the gamestate to 45 to refresh the client

derek22

2014-11-18 12:44:58

Hmm I'm not following you simply because I don't understand the client too well. My "bot" is completely at the packet level so up until know I've been able to avoid having to find hooks.

So you're saying that creating a world object, calling hop, setting the gamestate, this allows you to switch worlds without logging out from the game like OSBuddy's quick hop?

EDIT: I can't find the WorldObject class that you're talking about. The WorldObject in the OSRReflection client seems to be referencing an object in the world you can interact with (like a bank booth) instead of a World you can log into.

Wetish

2014-11-18 15:01:23

From: derek22
Hmm I'm not following you simply because I don't understand the client too well. My "bot" is completely at the packet level so up until know I've been able to avoid having to find hooks.

So you're saying that creating a world object, calling hop, setting the gamestate, this allows you to switch worlds without logging out from the game like OSBuddy's quick hop?

EDIT: I can't find the WorldObject class that you're talking about. The WorldObject in the OSRReflection client seems to be referencing an object in the world you can interact with (like a bank booth) instead of a World you can log into.


Do you have a working standalone packet bot?

derek22

2014-11-18 15:38:35

It's not standalone: I can send out one packet at a time or send a list of packets in a text file.

It prints out the unencrypted packet opcodes and the packet parameters before they're sent out to the server. I can also inject my own opcode/parameters into the same point in the code. It's a very ghetto bot though: no GUI. It rides on top of vInsert which is an open source injection bot.

@Cheddy I'm having trouble finding which call represents the world object and which class has the world hop method. Any hints :p

derek22

2014-11-19 19:02:02

@Cheddy What classes hold the world object, the world object array, and the hop method? I'm having difficulty finding them!

derek22

2014-11-19 20:14:46

@Cheddy I'm having trouble finding the class that represents the World object and the class that has the hop world method. Any hints?


And yeah, I have a rudimentary packet bot but it essentially only sends packets one at a time (I have to manually type them into System.in). If you want any more info on it, let me know!

Cheddy

2014-11-20 02:11:26

I wouldn't suggest using a packet bot, those things are a thing of the past (highly detectable)

World = s
> getActivity = s.d
> getDomain = s.i
> getIndex = s.m (-781463647)
> getLocation = s.q (122560199)
> getMask = s.x (-485706191)
> getPopulation = s.k (-1825444877)
> getWorldID = s.n (-1049303969)
@Summary(7/7 Fields : 0/0 Methods)

% changeGameState(II)V = i.e (-1398873718)
% setCurrentWorld(Ls;I)V = fp.o (2079200391)
> getGameState = client.c (346046433)

Obviously when setting the mask and id of the world object you make you will have to mod inverse the multi first and then multiply your value by it to set the field. The rest is straight forward I beleive

derek22

2014-11-20 14:22:35

@Cheddy

Hmm right now when I try it I end up on a random world (something like world 5000-30000:mad:) which obviously is not a real world and does not let me log in.

What do you mean by "mod inverse the mult"? If I have x.mod-1(y), and the multi = x, then what is y?
EDIT: It looks like I might do some kind of bitflip on the multi and then multiply it with the actual value?

NKN

2014-11-20 16:06:16

From: derek22
@Cheddy

Hmm right now when I try it I end up on a random world (something like world 5000-30000:mad:) which obviously is not a real world and does not let me log in.

What do you mean by "mod inverse the mult"? If I have x.mod-1(y), and the multi = x, then what is y?
EDIT: It looks like I might do some kind of bitflip on the multi and then multiply it with the actual value?


http://en.wikipedia.org/wiki/Modular_multiplicative_inverse

Does that help at all?

Cheddy

2014-11-22 06:24:56

Here is the code I use to get the mod inverse of a given multi, "multi". =)

public static long modInverse(long multi) {
return new BigInteger(String.valueOf(multi)).modInverse(new BigInteger(String.valueOf(4294967296L))).longValue();
}