SRL Archive - News and General

What Jagex Knows...


TRiLeZ

2009-09-14 10:18:54

I went into runescape.jar and looked into the class file jk.class…

I found that jagex knows when your dragging the mouse along with recording where your dragging it, when you release the mouse and where, when and where you click, when and where your mouse has been moved, when your cursor enters the client and where, when the focus is gained, when and where your mouse moves out of the client and when focus has been lost.

I dont know for sure if Jagex records this… they might; thats there new macro detection? :confused:

If you auto with SMART, the mouse dosnt move out of the client and I dont think the focus is ever lost… In fact, SCAR dosnt move the mouse out of the client.

Ill continue to search through the jar file and Ill post anything interesting I find.

jas0npc

2009-09-14 10:19:52

ohhhhh intresting

Simtoon

2009-09-14 10:53:41

wow, Mr Java man

senrath

2009-09-14 10:58:38

I'm pretty sure that stuff has been in the Runescape client for a long time now.

JPHamlett

2009-09-14 15:16:09

we can move the mouse out of the client

we do it in flag

NiCbaZ

2009-09-14 15:17:38

From: TRiLeZ
I went into runescape.jar and looked into the class file jk.class…

I found that jagex knows when your dragging the mouse along with recording where your dragging it, when you release the mouse and where, when and where you click, when and where your mouse has been moved, when your cursor enters the client and where, when the focus is gained, when and where your mouse moves out of the client and when focus has been lost.

I dont know for sure if Jagex records this… they might; thats there new macro detection? :confused:

If you auto with SMART, the mouse dosnt move out of the client and I dont think the focus is ever lost… In fact, SCAR dosnt move the mouse out of the client.

Ill continue to search through the jar file and Ill post anything interesting I find.


Proof Please :)

Sir R. M8gic1an

2009-09-14 15:31:11

Interesting… meaning that a very good antiban would be to actually lose focus of RS and move the mouse outside…

~RM

Main

2009-09-14 15:33:55

An other reason for us to stop using smart then ^^.

Tickyy

2009-09-14 15:35:46

From: Main_Ftw
An other reason for us to stop using smart then ^^.


why would that be a reason?

Daniel

2009-09-14 15:52:39

When you Disable SMART, doesn't the mouse just disappear then always enter the client from the top left corner of the screen (or is it the bottom left? i forget :p) xD

That means, SMART could very well be catchable..

rogeruk

2009-09-14 16:48:15

This has always been the case, ever since they first introduced their first anti-macroing (detecting silent mouse).

They record - where, what, when and how you clicked it.

Common knowledge by now

Gu3st...

2009-09-14 16:59:12

From: rogeruk
This has always been the case, ever since they first introduced their first anti-macroing (detecting silent mouse).

They record - where, what, when and how you clicked it.

Common knowledge by now


Yeah, been known for ages :p
What's the news? :rolleyes:

Method

2009-09-14 17:22:07

From: Zyt3x
Yeah, been known for ages :p
What's the news? :rolleyes:


The news is he actually took some initiative to look into the client instead of assuming or guessing like the rest of you. Yes, it's old news, but then again not everyone has years of experience with the client.

n3ss3s

2009-09-14 17:46:21

Guys, I'm 100% sure Jagex doesn't record your mouse actions outside the client, and it doesn't matter if it always drags it from the top left of the client, as in theory you maybe just could have a weird habit, ofcourse nobody doesn't but you get the point… Basically Jagex would have to detect whether its dragged from outside of the client to the client, or does it 'spawn' in there… Also, keep in mind that SMART doesn't have an actual cursor, it just sends fake events to the client and paints a cool red dot where it was last time.

The Claw

2009-09-14 18:04:16

But if it always enters from (0,0) thats pretty damn bot-like. No one is that accurate. What happens to the mouse with SMART when you click disable? Does it just dissapear (as in theres no mouse on the client anymore), or does it leave the client by moving off it? It would be pretty sus (if it just dissapears) to be autoing, click disable, then move the mouse up from the bottom.

Rich

2009-09-14 19:57:20

From: The Claw
What happens to the mouse with SMART when you click disable? Does it just dissapear (as in theres no mouse on the client anymore), or does it leave the client by moving off it?


I think the co-ords that Jagex detect would show that the mouse was at one point (SMART mouse) then when you disable SMART, the co-ord instantly changes to where the actually cursor is. So to answer your question, it just disappears.

Also, what do you mean, "lose focus of RS?"

Richard

Nadeem

2009-09-14 20:22:21

From: R1ch
I think the co-ords that Jagex detect would show that the mouse was at one point (SMART mouse) then when you disable SMART, the co-ord instantly changes to where the actually cursor is. So to answer your question, it just disappears.

Also, what do you mean, "lose focus of RS?"

Richard


Java applets are able to tell if the client is currently on the runescape's applet or it is focused on another window/ another part of the page. Thats what he means when he refers to "lose forcus of RS?"

Also with new updates in Java, they are also able to check your clipboard, I remember reading somewhere on another site that runescape already implemented this but its still not used..? They might implement pasting into the applet with this feature how ever :)



~NS

TRiLeZ

2009-09-14 21:23:16

Not much people already knew about this so I just posted it here to let people know.
Im at school right now so I cant show proof, but Ill post my proof when I get home.

n3ss3s, Jagex cant record mouse actions outside the client which you said.. it can only record mouse actions when your mouse is over the client.

Cartmann

2009-09-14 21:51:13

New randoms ftw?
Can't you just make a random that once in a while clicks on a tab, without ruining the script by loosing the (+) ??

Main

2009-09-14 23:24:02

??????

Heysus

2009-09-15 00:10:29

Tbh it doesn't really matter how their macro detection works. Even if we found out exactly how it works and updated our scripts accordingly, hundreds of people could get banned if they ever update their system.

The best way to avoid getting banned will always be to look like a human. No matter how many times they update their system.

TRiLeZ

2009-09-15 01:43:54

Heres the whole jk.class:


import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

final class jk
implements MouseListener, MouseMotionListener, FocusListener
{
static int a;
static int b;
static int c;
static int d;
static int e = -1;
static boolean f;
static int g;
static int h;
static String[] i = new String[100];
static int j;
static int k;
static int l;
static int[] m = { 4, 2, 1, 1, 2, 2, 3, 1, 3, 3, 3, 2 };
static int n;
static int o;
static int p;
static int q;
static dn[][][] r;
static int s;

static final void a(int paramInt1, int paramInt2, int paramInt3, mg parammg, int paramInt4, int paramInt5)
{
int i5 = client.rb;
try
{
Object localObject1;
Object localObject2;
n += 1;
if ((parammg.v == -1) && (parammg.q == null))
return;
int i1 = 0;
if (parammg.y < paramInt5)
i1 += -parammg.y + paramInt5;
if ((i5 != 0) && ((paramInt5 ^ 0xFFFFFFFF) > (parammg.r ^ 0xFFFFFFFF)))
i1 += -paramInt5 + parammg.r;
int i2 = hr.f * parammg.l >> -1703626872;
if ((paramInt3 ^ 0xFFFFFFFF) < (parammg.k ^ 0xFFFFFFFF))
i1 += -parammg.k + paramInt3;
if ((i5 != 0) && (paramInt3 < parammg.i))
i1 += parammg.i + -paramInt3;
if (((parammg.n ^ 0xFFFFFFFF) == -1) || (-64 + i1 > parammg.n) || ((hr.f ^ 0xFFFFFFFF) == -1) || ((parammg.J ^ 0xFFFFFFFF) != (paramInt1 ^ 0xFFFFFFFF)))
{
if (parammg.p != null)
{
ae.xb.a(parammg.p);
parammg.p = null;
}
if (parammg.G != null)
{
ae.xb.a(parammg.G);
parammg.G = null;
}
return;
}
if (paramInt4 != 2)
i = null;
if ((i1 -= 64) < 0)
i1 = 0;
int i3 = i2 * (-i1 + parammg.n) / parammg.n;
if (parammg.p != null)
parammg.p.h(i3);
if ((i5 != 0) && (parammg.v >= 0))
{
u localu = u.a(gf.b, parammg.v, 0);
if (localu != null)
{
localObject1 = localu.a().a(mn.i);
localObject2 = gj.a((fp)localObject1, 100, i3);
((gj)localObject2).g(-1);
ae.xb.b((nf)localObject2);
parammg.p = ((gj)localObject2);
}
}
if (parammg.G == null)
{
if (parammg.q == null)
break label526;
if ((parammg.o -= paramInt2 ^ 0xFFFFFFFF) < -1)
break label526;
int i4 = (int)(Math.random() * parammg.q.length);
localObject1 = u.a(gf.b, parammg.q[i4], 0);
if (localObject1 == null)
break label526;
localObject2 = ((u)localObject1).a().a(mn.i);
gj localgj = gj.a((fp)localObject2, 100, i3);
localgj.g(0);
ae.xb.b(localgj);
parammg.G = localgj;
parammg.o = (parammg.I - -(int)(Math.random() * (-parammg.I + parammg.B)));
return;
}
parammg.G.h(i3);
if (parammg.G.a(109))
return;
parammg.G = null;
label526: return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.E(" + paramInt1 + ',' + paramInt2 + ',' + paramInt3 + ',' + ((parammg != null) ? "{...}" : "null") + ',' + paramInt4 + ',' + paramInt5 + ')');
}
}

public final synchronized void mouseDragged(MouseEvent paramMouseEvent)
{
try
{
if (cr.n != null)
{
pk.K = 0;
bg.c = paramMouseEvent.getX();
ce.j = paramMouseEvent.getY();
}
l += 1;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.mouseDragged(" + ((paramMouseEvent != null) ? "{...}" : "null") + ')');
}
}

public final synchronized void mouseReleased(MouseEvent paramMouseEvent)
{
try
{
if (cr.n != null)
{
pk.K = 0;
fg.H = 0;
int i1 = paramMouseEvent.getModifiers();
}
b += 1;
if (!(paramMouseEvent.isPopupTrigger()))
return;
paramMouseEvent.consume();
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.mouseReleased(" + ((paramMouseEvent != null) ? "{...}" : "null") + ')');
}
}

static final void a(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5, int paramInt6, int paramInt7, int paramInt8)
{
try
{
if ((paramInt5 >= mb.x) && (fa.q >= paramInt8) && ((paramInt3 ^ 0xFFFFFFFF) <= (uc.N ^ 0xFFFFFFFF)) && (paramInt6 <= vm.C))
{
br.a(paramInt1, paramInt4, 2, paramInt5, paramInt6, paramInt8, paramInt2, paramInt3);
if (client.rb == 0)
break label70;
}
qa.a(paramInt6, paramInt3, paramInt8, 116, paramInt1, paramInt2, paramInt4, paramInt5);
if (paramInt7 >= -120)
label70: f = true;
p += 1;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.A(" + paramInt1 + ',' + paramInt2 + ',' + paramInt3 + ',' + paramInt4 + ',' + paramInt5 + ',' + paramInt6 + ',' + paramInt7 + ',' + paramInt8 + ')');
}
}

public final void mouseClicked(MouseEvent paramMouseEvent)
{
try
{
if (paramMouseEvent.isPopupTrigger())
paramMouseEvent.consume();
h += 1;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.mouseClicked(" + ((paramMouseEvent != null) ? "{...}" : "null") + ')');
}
}

public final synchronized void mouseMoved(MouseEvent paramMouseEvent)
{
try
{
d += 1;
if (cr.n == null)
return;
pk.K = 0;
bg.c = paramMouseEvent.getX();
ce.j = paramMouseEvent.getY();
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.mouseMoved(" + ((paramMouseEvent != null) ? "{...}" : "null") + ')');
}
}

public final synchronized void mouseEntered(MouseEvent paramMouseEvent)
{
try
{
c += 1;
if (cr.n == null)
return;
pk.K = 0;
bg.c = paramMouseEvent.getX();
ce.j = paramMouseEvent.getY();
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.mouseEntered(" + ((paramMouseEvent != null) ? "{...}" : "null") + ')');
}
}

public final void focusGained(FocusEvent paramFocusEvent)
{
try
{
a += 1;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.focusGained(" + ((paramFocusEvent != null) ? "{...}" : "null") + ')');
}
}

static final void a(int paramInt1, int paramInt2)
{
try
{
synchronized (lk.b)
{
lk.b.a(97, paramInt2);
}
o += 1;
if (paramInt1 != 1)
f = true;
synchronized (ki.h)
{
ki.h.a(97, paramInt2);
return;
}
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.F(" + paramInt1 + ',' + paramInt2 + ')');
}
}

public final synchronized void mouseExited(MouseEvent paramMouseEvent)
{
try
{
j += 1;
if (cr.n == null)
return;
pk.K = 0;
bg.c = -1;
ce.j = -1;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.mouseExited(" + ((paramMouseEvent != null) ? "{...}" : "null") + ')');
}
}

public final synchronized void focusLost(FocusEvent paramFocusEvent)
{
try
{
g += 1;
if (cr.n == null)
return;
fg.H = 0;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.focusLost(" + ((paramFocusEvent != null) ? "{...}" : "null") + ')');
}
}

public final synchronized void mousePressed(MouseEvent paramMouseEvent)
{
try
{
q += 1;
if (cr.n != null)
{
pk.K = 0;
up.P = paramMouseEvent.getX();
client.X = paramMouseEvent.getY();
ig.h = rr.a(5);
if (!(paramMouseEvent.isMetaDown()))
{
jl.d = 1;
fg.H = 1;
if (client.rb == 0)
break label68;
}
jl.d = 2;
fg.H = 2;
label68: int i1 = paramMouseEvent.getModifiers();
}
if (!(paramMouseEvent.isPopupTrigger()))
return;
paramMouseEvent.consume();
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.mousePressed(" + ((paramMouseEvent != null) ? "{...}" : "null") + ')');
}
}

static final void a(int paramInt, bk parambk)
{
int i4 = client.rb;
try
{
if (paramInt != -4370)
return;
int i1 = 0;
if (i4 != 0);
do
{
int i2 = parambk.l(paramInt ^ 0xFFFFEE6E);
int i3 = parambk.i(paramInt + 36506);
if ((i3 ^ 0xFFFFFFFF) == -65536)
i3 = -1;
if (kd.y[i2] == null)
continue;
kd.y[i2].h = i3;
}
while (mj.n > ++i1);
s += 1;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.B(" + paramInt + ',' + ((parambk != null) ? "{...}" : "null") + ')');
}
}

public static void a(int paramInt)
{
try
{
m = null;
if (paramInt != 0)
return;
i = null;
r = null;
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.C(" + paramInt + ')');
}
}

static final void a(jf paramjf, int paramInt1, boolean paramBoolean, int paramInt2, int paramInt3)
{
try
{
k += 1;
int i1 = paramjf.Jc;
int i2 = paramjf.Hb;
if ((paramjf.rb ^ 0xFFFFFFFF) == paramInt3)
paramjf.Jc = paramjf.W;
else if ((paramjf.rb ^ 0xFFFFFFFF) == -2)
paramjf.Jc = (-paramjf.W + paramInt2);
else if (paramjf.rb != 2)
if ((paramjf.rb ^ 0xFFFFFFFF) == -4)
if (paramjf.sc != 2)
if ((paramjf.sc ^ 0xFFFFFFFF) == -8)
paramjf.Jc = (paramjf.G * (-1 + paramjf.W) + 115 * paramjf.W);
else
paramjf.Jc = (32 * paramjf.W + paramjf.G * (-1 + paramjf.W));
else
paramjf.Jc = (paramInt2 * paramjf.W >> 623919598);
if (paramjf.Gb == 0)
paramjf.Hb = paramjf.T;
else if ((paramjf.Gb ^ 0xFFFFFFFF) != -2)
if (paramjf.Gb != 2)
if ((paramjf.Gb ^ 0xFFFFFFFF) == -4)
if (paramjf.sc != 2)
if (paramjf.sc == 7)
paramjf.Hb = ((paramjf.T + -1) * paramjf.i + paramjf.T * 12);
else
paramjf.Hb = (32 * paramjf.T - -(paramjf.i * (-1 + paramjf.T)));
else
paramjf.Hb = (paramInt1 * paramjf.T >> -767503058);
else
paramjf.Hb = (paramInt1 + -paramjf.T);
if ((paramjf.rb ^ 0xFFFFFFFF) == -5)
paramjf.Jc = (paramjf.Q * paramjf.Hb / paramjf.O);
if (paramjf.Gb == 4)
paramjf.Hb = (paramjf.Jc * paramjf.O / paramjf.Q);
if ((nq.db) && (((client.b(paramjf).l != 0) || ((paramjf.sc ^ 0xFFFFFFFF) == -1))))
if (((paramjf.Hb ^ 0xFFFFFFFF) <= -6) || ((paramjf.Jc ^ 0xFFFFFFFF) <= -6))
{
if ((paramjf.Hb ^ 0xFFFFFFFF) >= -1)
paramjf.Hb = 5;
if (paramjf.Jc <= 0)
paramjf.Jc = 5;
}
else
{
paramjf.Hb = 5;
paramjf.Jc = 5;
}
if ((paramjf.vc ^ 0xFFFFFFFF) == -1338)
eg.N = paramjf;
if ((!(paramBoolean)) || (paramjf.a == null))
return;
if ((i1 != paramjf.Jc) || (i2 != paramjf.Hb))
{
dj localdj = new dj();
localdj.m = paramjf.a;
localdj.p = paramjf;
ji.j.a(-1, localdj);
}
return;
}
catch (RuntimeException localRuntimeException)
{
throw bp.a(localRuntimeException, "jk.D(" + ((paramjf != null) ? "{...}" : "null") + ',' + paramInt1 + ',' + paramBoolean + ',' + paramInt2 + ',' + paramInt3 + ')');
}
}
}

rogeruk

2009-09-15 02:08:19

I have no knowledge of java.

But couldnt the focus just belong to the logout timer?. If you arnt in focus log you out quicker than just standing in one spot?

Smarter Child

2009-09-15 02:08:21

Well if they do record mouse movements like this, I don't think they are always checking this, I have ran Smart a lot and disabled it a lot too. Nothing has ever happened to me :p

Also, JaGex won't be able to detect off-screen mouse movements, it definitely goes against your privacy.

senrath

2009-09-15 02:12:58

From: Smarter Child
Also, JaGex won't be able to detect off-screen mouse movements, it definitely goes against your privacy.


It's not so much a privacy issue as the fact that Java cannot record off-screen mouse movements without relying on JNI, which Runescape does not use.

TRiLeZ

2009-09-15 02:14:24

From: Smarter Child
Well if they do record mouse movements like this, I don't think they are always checking this, I have ran Smart a lot and disabled it a lot too. Nothing has ever happened to me :p

Also, JaGex won't be able to detect off-screen mouse movements, it definitely goes against your privacy.


I never said they could detect off screen mouse movements…

Story: 2 of my accounts got banned using my Grand Hackn Bank script. I abused it though… The 2 accounts never got stuck in a random, had a auto responder and an auto trade accept er.

If someone reported me, Jagex could have possibly looked at this stuff if they record this.

Rubix

2009-09-15 02:35:50

i thought recently, they made the entire page a java applet, and when you made it smaller, it just put black around the edge? at least that's what i thought since when it loads in my browser the entire screen is gray until it loads.

Lance

2009-09-15 05:05:57

From: TRiLeZ

If you auto with SMART, the mouse dosnt move out of the client and I dont think the focus is ever lost… In fact, SCAR dosnt move the mouse out of the client.


Ive talked to SC about this before, most people when they are playing rs legit dont click on a monster, wait for it to die, click again, wait for it to die, and so on for an hour streight (i know some people are going to pipe in here and say I do!!) but gtfo >=[ When I play im always on msn, or something else to keep my attention, and im always flicking through differant internet tabs reading or doing something cause legit training is just so boring.

Also with smart, the mouse always enteres the script from Point (0, 0), and it never mouses off the client (as a normal legit player would). And to add to that, when you take controle over smart the mouse jumps from its position where the red dot was, to the bottom left hand corner of smart where your mouse has just clicked the disable smart button.

Im supprized that jagex dosnt look for iregular mouse over client patterns like this, and if they do well they must just not be very bright o.O

Edit: haha oops, suppose i should have read what people have already posted. every thing i said has already been said

Method

2009-09-15 05:14:13

From: rogeruk
I have no knowledge of java.

But couldnt the focus just belong to the logout timer?. If you arnt in focus log you out quicker than just standing in one spot?


From what I remember, each "cycle" of the game, variables that are used to check mouse and keyboard inactivity are incremented and then checked against constant values to see if your player should be logged out. They're reset when you type a key or move/click the mouse (basically when a KeyEvent or MouseEvent is spawned).

From: Smarter Child
Well if they do record mouse movements like this, I don't think they are always checking this, I have ran Smart a lot and disabled it a lot too. Nothing has ever happened to me :p

Also, JaGex won't be able to detect off-screen mouse movements, it definitely goes against your privacy.


They do send mouse movements to the server, and it's quite likely that they use them to replay a player's mouse movements if the account is suspected or macroing.

l 3 3 t6

2009-09-15 23:29:43

They know to much these days lol

Dervish

2009-09-16 00:07:44

From: Rasta Magician
Interesting… meaning that a very good antiban would be to actually lose focus of RS and move the mouse outside…

~RM


Not meaning to sound cocky, or whatever, but I've been saying this for quite a time… Maybe not exactly the same thing, but basically the same.

n3ss3s

2009-09-17 16:17:53


n3ss3s, Jagex cant record mouse actions outside the client which you said.. it can only record mouse actions when your mouse is over the client.


I said that Jagex can't record actions outside the client…