Clarity
2014-02-27 19:16:51
Paper on biometric authentication: http://www.cs.wm.edu/~hnw/paper/ccs11.pdf
TL;DR of the paper:

- They use a program called RUI to record user mouse activity, which is saved into a log file
- This log file is analyzed (pre-processing) to determine specific point and click events
- Use a classification system (SVM) to classify different profiles
- Decision making occurs to determine an impostor or actual user
When analyzing the raw mouse movement data, they calculate the following items:

- Direction: Angle X, the angle between line AB and the horizontal.
- Angle of curvature: Angle Y, or angle ABC.
- Curvature distance: Ratio of line AC to the line perpendicular to AC going to B.
Relevant paragraph:
I wonder if Jagex may be venturing towards a system like this, if not already there. At this time, antiban in our scripts is based on randomization, and at the moment I'm a personal fan of using gauss/normal distribution because I think total randomness isn't humanlike, and gauss is closer to following a trend.
But even with gaussian formulas, right now everything is 'random' in a very defined way that ultimately is detectable, especially if our community style is posting script code publicly.
But neither is any kind of distribution or blanket mathematical model. Our mouse functions look amazingly humanlike, but I suspect this is not what Jagex is tracking. Players have their own individual ways of handling computers, and this paper claims that these two most useful variables are direction and angle of curvature, as they do not change in relation to situational factors like screen size, how big the user's mouse pad is, et cetera. This data is then applied to a SVM (I don't know much about this) which according to them is used to distinguish individual users from each other.
Can we reverse engineer this for the 'perfect antiban'?
So, let's say we wrote a mouse movement recorder, something like this…
Which had an output just like RUI (edit: would probably also want to add a MOUSE_IDLE):
And we came up with a way to analyze this activity relative to RuneScape, adding in behavior analysis for interacting with certain game elements (choose option, banking, mousing objects, attacking objects, interacting with items, opening tabs)…frequency of distraction/mouse off client, etc…could we create user-specific profiles for use in scripts?
Result of a biometrics script:
Or, it could just generate a bunch of constants that could be interpreted by the antiban include.
With this kind of addition, antiban is truly player-specific to their playstyle and behavior. Also, antiban is no longer defined so clearly in the publicly posted script for easy interpretation.
I have no idea how easy or difficult this would be as I don't quite understand the math yet, but I may figure it out after some more googling. I found this very interesting though and think it would be cool to achieve for SRL.
TL;DR of the paper:

- They use a program called RUI to record user mouse activity, which is saved into a log file
- This log file is analyzed (pre-processing) to determine specific point and click events
- Use a classification system (SVM) to classify different profiles
- Decision making occurs to determine an impostor or actual user
When analyzing the raw mouse movement data, they calculate the following items:

- Direction: Angle X, the angle between line AB and the horizontal.
- Angle of curvature: Angle Y, or angle ABC.
- Curvature distance: Ratio of line AC to the line perpendicular to AC going to B.
Relevant paragraph:
I wonder if Jagex may be venturing towards a system like this, if not already there. At this time, antiban in our scripts is based on randomization, and at the moment I'm a personal fan of using gauss/normal distribution because I think total randomness isn't humanlike, and gauss is closer to following a trend.
But even with gaussian formulas, right now everything is 'random' in a very defined way that ultimately is detectable, especially if our community style is posting script code publicly.
But neither is any kind of distribution or blanket mathematical model. Our mouse functions look amazingly humanlike, but I suspect this is not what Jagex is tracking. Players have their own individual ways of handling computers, and this paper claims that these two most useful variables are direction and angle of curvature, as they do not change in relation to situational factors like screen size, how big the user's mouse pad is, et cetera. This data is then applied to a SVM (I don't know much about this) which according to them is used to distinguish individual users from each other.
Can we reverse engineer this for the 'perfect antiban'?
So, let's say we wrote a mouse movement recorder, something like this…
{...}
function mouseLocation: String;
var
x, y: Integer;
begin
getmousepos(x, y);
result := ('(' + ToStr(x) + ',' + ToStr(y) + ')');
end;
function mouseAction: String;
var
x, y: Integer;
begin
if not isMouseButtonDown(1) and not isMouseButtonDown(0) then result := ('MOUSE_MOVING');
if isMouseButtonDown(1) then result := ('MOUSE_LEFT');
if isMouseButtonDown(0) then result := ('MOUSE_RIGHT');
end;
procedure mainLoop;
begin
ClarityDebug(ToStr(timer.getTime) + ' | ' + mouseAction + ' | ' + mouseLocation);
end;
{...}Which had an output just like RUI (edit: would probably also want to add a MOUSE_IDLE):
== ClarityDebug == | 262468031 | MOUSE_RIGHT | (1201,500)
== ClarityDebug == | 262468031 | MOUSE_RIGHT | (1201,500)
== ClarityDebug == | 262468047 | MOUSE_RIGHT | (1201,500)
== ClarityDebug == | 262468047 | MOUSE_RIGHT | (1201,500)
== ClarityDebug == | 262468047 | MOUSE_RIGHT | (1201,500)
== ClarityDebug == | 262468062 | MOUSE_RIGHT | (1201,500)
== ClarityDebug == | 262468062 | MOUSE_RIGHT | (1201,500)
== ClarityDebug == | 262468109 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468328 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468328 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468343 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468343 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468343 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468359 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468359 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468359 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468359 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468390 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468421 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468437 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468452 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468452 | MOUSE_LEFT | (1201,500)
== ClarityDebug == | 262468452 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468468 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468515 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468530 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468562 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468562 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468562 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468562 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468562 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468577 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468577 | MOUSE_MOVING | (1201,500)
== ClarityDebug == | 262468608 | MOUSE_MOVING | (1191,500)
== ClarityDebug == | 262468640 | MOUSE_MOVING | (1144,500)
== ClarityDebug == | 262468671 | MOUSE_MOVING | (1107,500)
== ClarityDebug == | 262468671 | MOUSE_MOVING | (1087,500)
== ClarityDebug == | 262468671 | MOUSE_MOVING | (1087,500)
== ClarityDebug == | 262468671 | MOUSE_MOVING | (1010,500)
== ClarityDebug == | 262468671 | MOUSE_MOVING | (1010,500)
== ClarityDebug == | 262468702 | MOUSE_MOVING | (701,400)
== ClarityDebug == | 262468733 | MOUSE_MOVING | (596,347)
== ClarityDebug == | 262468749 | MOUSE_MOVING | (449,263)
== ClarityDebug == | 262468764 | MOUSE_MOVING | (394,229)
== ClarityDebug == | 262468764 | MOUSE_MOVING | (394,229)
== ClarityDebug == | 262468764 | MOUSE_MOVING | (394,229)
== ClarityDebug == | 262468780 | MOUSE_MOVING | (368,213)
== ClarityDebug == | 262468780 | MOUSE_MOVING | (335,191)
== ClarityDebug == | 262468811 | MOUSE_MOVING | (319,182)
== ClarityDebug == | 262468827 | MOUSE_MOVING | (297,171)
== ClarityDebug == | 262468858 | MOUSE_MOVING | (277,159)
== ClarityDebug == | 262468858 | MOUSE_MOVING | (275,157)
== ClarityDebug == | 262468874 | MOUSE_MOVING | (273,156)
== ClarityDebug == | 262468874 | MOUSE_MOVING | (273,156)
== ClarityDebug == | 262468905 | MOUSE_MOVING | (271,149)
== ClarityDebug == | 262468936 | MOUSE_MOVING | (286,139)
== ClarityDebug == | 262468952 | MOUSE_MOVING | (299,133)
== ClarityDebug == | 262468983 | MOUSE_MOVING | (308,129)
== ClarityDebug == | 262468983 | MOUSE_MOVING | (309,128)
== ClarityDebug == | 262468998 | MOUSE_MOVING | (309,128)
== ClarityDebug == | 262469014 | MOUSE_MOVING | (311,127)
== ClarityDebug == | 262469045 | MOUSE_MOVING | (312,126)
== ClarityDebug == | 262469061 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469092 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469092 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469092 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469092 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469108 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469108 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469139 | MOUSE_MOVING | (313,126)
== ClarityDebug == | 262469154 | MOUSE_MOVING | (312,125)
== ClarityDebug == | 262469154 | MOUSE_MOVING | (312,125)
== ClarityDebug == | 262469170 | MOUSE_MOVING | (310,125)
== ClarityDebug == | 262469170 | MOUSE_MOVING | (309,125)
== ClarityDebug == | 262469186 | MOUSE_MOVING | (307,125)
== ClarityDebug == | 262469186 | MOUSE_MOVING | (307,125)
== ClarityDebug == | 262469186 | MOUSE_MOVING | (307,125)
== ClarityDebug == | 262469217 | MOUSE_MOVING | (302,123)
== ClarityDebug == | 262469248 | MOUSE_MOVING | (299,123)
== ClarityDebug == | 262469264 | MOUSE_MOVING | (296,123)
== ClarityDebug == | 262469264 | MOUSE_MOVING | (296,123)
== ClarityDebug == | 262469264 | MOUSE_MOVING | (296,123)
== ClarityDebug == | 262469264 | MOUSE_MOVING | (296,123)
== ClarityDebug == | 262469279 | MOUSE_MOVING | (296,123)
== ClarityDebug == | 262469279 | MOUSE_LEFT | (295,123)
== ClarityDebug == | 262469357 | MOUSE_LEFT | (295,123)And we came up with a way to analyze this activity relative to RuneScape, adding in behavior analysis for interacting with certain game elements (choose option, banking, mousing objects, attacking objects, interacting with items, opening tabs)…frequency of distraction/mouse off client, etc…could we create user-specific profiles for use in scripts?
Result of a biometrics script:
Success, your unique antiban profile has been generated after one hour of recorded play!
Antiban User ID: ClarityPut into a script: antiban.setupProfile('Clarity');Or, it could just generate a bunch of constants that could be interpreted by the antiban include.
With this kind of addition, antiban is truly player-specific to their playstyle and behavior. Also, antiban is no longer defined so clearly in the publicly posted script for easy interpretation.
I have no idea how easy or difficult this would be as I don't quite understand the math yet, but I may figure it out after some more googling. I found this very interesting though and think it would be cool to achieve for SRL.
