SRL Archive - General Botting Help

A little bit Concern


Marius90

2014-11-08 19:30:36

Well i read somewhere(Jagex team) that the colored-based bots are easy problem to solve, we are left for last and we are just 2% of bots, the only reason is that they are using their resources for the Injection bots and Reflection bots which are more sophisticated and problematic than us i have seen that they have Dungeoniring, Quests bots and so on, well is good that Simba is slower than other bots but when the have dealt with the Java bots they will come for us.
What do you think about this concern of mine?

YoHoJo

2014-11-08 19:36:30

A lot of what Jagex says about botting is PR and scare tactics.

Java/Injection/Reflection bots (to my best knowledge) have only been down for a few months after the Cluster Flutter update until they were back at it again.

And color bots have been up and kicking for years and years too, with very little downtime at all.
As many people say "As long as Runescape is in color*, color bots will work"
*(or a game you play with your sight :p)

Jagex seems to be nowhere near solving even the Injection/Reflection botters yet, although they are getting a bit more on it/better about banning bots, they still have quite a long way to go.

riwu

2014-11-08 19:45:08

imo color bots are the hardest to tackle. There's hardly any way u can stop colors bots without impairing a legit's experience too since we are 'screen scraping' like a human (unlike injection/reflection)

Clarity

2014-11-08 21:11:59

Yeah, there's no real way they could completely eliminate us without making it impossible/incredibly annoying for a real human to play the game.

KeepBotting

2014-11-08 21:26:00

Don't believe anything those idiot JMods say, half of them aren't even involved with the development aspect of the game.

Regardless of anything, there's no way Jagex can't stop color bots without making the game unplayable for legit players.

Jacmob threatened us with "screen-shimmering" that was supposed to stop color bots. Two years later…

Clarity

2014-11-08 22:07:51

From: KeepBotting
Don't believe anything those idiot JMods say, half of them aren't even involved with the development aspect of the game.

Regardless of anything, there's no way Jagex can't stop color bots without making the game unplayable for legit players.

Jacmob threatened us with "screen-shimmering" that was supposed to stop color bots. Two years later…


What possible "screen-shimmering" could disable color scripts and be unnoticeable to humans? Even if they implemented some random hyperquick color shifts that weren't humanly perceptible (some 1ms long thing or color shift by 1 RGB/HSL unit) then we can just add in wait(1) or extra color searches.

KeepBotting

2014-11-08 23:32:23

From: Clarity
What possible "screen-shimmering" could disable color scripts and be unnoticeable to humans? Even if they implemented some random hyperquick color shifts that weren't humanly perceptible (some 1ms long thing or color shift by 1 RGB/HSL unit) then we can just add in wait(1) or extra color searches.
Exactly my point. There's no conceivable way.

Oh wait, Actually I just installed my special "l33t legit ub3r gold generator hax legit notavirus.jpg.exe" onto Jacmob's IP address.
On his personal computer I found a leaked screenshot of the proposed "color-nuke" that will defeat all screen scraper bots forever!


We're really in for it this time guys!!!11!1!1one!!!!!1111

Olly

2014-11-08 23:47:04

From: KeepBotting
Exactly my point. There's no conceivable way.

Oh wait, Actually I just installed my special "l33t legit ub3r gold generator hax legit notavirus.jpg.exe" onto Jacmob's IP address.
On his personal computer I found a leaked screenshot of the proposed "color-nuke" that will defeat all screen scraper bots forever!

We're really in for it this time guys!!!11!1!1one!!!!!1111


They don't have to change the way the game looks, we are vulnerable in so many other ways…

TomTuff

2014-11-08 23:58:06

From: Olly
They don't have to change the way the game looks, we are vulnerable in so many other ways…


Really? The only things I could think of would be minor changes to interfaces that would make some of our less fluent methods not work. Any color change that would throw off a color bot would interrupt legit players.

Kyle

2014-11-09 00:00:04

From: TomTuff
Really? The only things I could think of would be minor changes to interfaces that would make some of our less fluent methods not work. Any color change that would throw off a color bot would interrupt legit players.


One word - SMART

KeepBotting

2014-11-09 00:10:14

From: Olly
They don't have to change the way the game looks, we are vulnerable in so many other ways…

From: elfyyy
One word - SMART


If Jagex wanted to detect SMART, I believe they would have done so by now. Personally I don't think they give two craps about color bots. We're too small for them to care or really notice, and they're concentrating all their efforts on killing reflection/injection. Even those efforts have been faltering as of late - RSBot's ban rate is far less than what it was a few months ago.

Besides, we could dump SMART if we really needed to.

Clarity

2014-11-09 00:17:26

From: elfyyy
One word - SMART


SMART is a convenience, if it didn't exist we'd just use VMs on official client instead. I already do this anyway to avoid any potential 3rd party client detection.
I think what Olly is talking about are the input methods of Simba. I don't know enough about them to really have an informed opinion.

Olly

2014-11-09 00:19:31

From: KeepBotting
If Jagex wanted to detect SMART, I believe they would have done so by now. Personally I don't think they give two craps about color bots. We're too small for them to care or really notice, and they're concentrating all their efforts on killing reflection/injection. Even those efforts have been faltering as of late - RSBot's ban rate is far less than what it was a few months ago.

Besides, we could dump SMART if we really needed to.


Then there's the minor thing that windows api has methods to detect 'fake' input.

Ian

2014-11-09 01:15:57

From: Olly
Then there's the minor thing that windows api has methods to detect 'fake' input.


Does Linux?

Olly

2014-11-09 01:30:28

From: BMWxi
Does Linux?

No idea! I would assume so in one way or another.

akarigar

2014-11-09 02:25:10

I'm only aware of one way in the Windows API to see if an event is injected or 'fake.' I didn't think it was very reliable since it thought my keyboard was sending fake events. Things might have changed by now, I guess.

Clarity

2014-11-09 02:34:54

What I'm curious about is how far they can go with that type of detection before they infringe upon privacy policies. I guess they can update their privacy policy to say whatever they want but isn't there some sort of limit?

akarigar

2014-11-09 04:47:17

From: Clarity
What I'm curious about is how far they can go with that type of detection before they infringe upon privacy policies. I guess they can update their privacy policy to say whatever they want but isn't there some sort of limit?


If you're referring to the method I was talking about, then they don't need to go far at all. When Windows tells the active window that a key event took place, this data (along with some additional data) is presented to them. It's just a matter of looking in the right place. Every application has access to this information, so it isn't anything special that would be breaking any privacy.

If Jagex wanted to, they could very easily code something that bans everyone that only sends injected events. Since they haven't implemented that, it just seems like this method of detection is not very accurate, even today. So, maybe they consider it when they suspect you of using SMART, but I doubt they can make a good call from only that data.

Justin

2014-11-09 05:32:37

From: akarigar
If Jagex wanted to, they could very easily code something that bans everyone that only sends injected events.



What about people like myself who use TeamViewer to sometimes play on the go, doing afk-able tasks (mining, fishing, woodcutting, runecrafting(runespan)) ect, or using VNC, would that be detected as injected events? I know several players and even people in my clan who use TeamViewer to play while walking between college classes ect.

Incurable

2014-11-09 05:38:11

From: Justin
What about people like myself who use TeamViewer to sometimes play on the go, doing afk-able tasks (mining, fishing, woodcutting, runecrafting(runespan)) ect, or using VNC, would that be detected as injected events? I know several players and even people in my clan who use TeamViewer to play while walking between college classes ect.


I do the same thing, and I'm pretty sure that's exactly why they don't just ban everyone who doesn't play at a mouse and keyboard.

Justin

2014-11-09 05:41:49

From: Incurable
I do the same thing, and I'm pretty sure that's exactly why they don't just ban everyone who doesn't play at a mouse and keyboard.


Also the 'cloud browsers' in the App Store that run java applications (almost a replicate of RDP/TeamViewer only paid for)

Incurable

2014-11-09 06:04:25

From: Justin
Also the 'cloud browsers' in the App Store that run java applications (almost a replicate of RDP/TeamViewer only paid for)


I use Chrome Remote Desktop, so there's definitely a variety of options out there.

akarigar

2014-11-09 06:06:30

From: Justin
What about people like myself who use TeamViewer to sometimes play on the go, doing afk-able tasks (mining, fishing, woodcutting, runecrafting(runespan)) ect, or using VNC, would that be detected as injected events? I know several players and even people in my clan who use TeamViewer to play while walking between college classes ect.


Yeah, exactly. I would imagine TeamViewer, VNC and many other programs inject all their events, so yes. You could always make a simple program to be 100% sure. ;)

I was just trying to imply that there are too many false positives to be banning people based only off whether or not their input is injected. It isn't like they couldn't (since the coding part would not be difficult). They don't do do it because they would probably end up banning more legit players than botters.

KeepBotting

2014-11-09 09:13:58

From: Olly
Then there's the minor thing that windows api has methods to detect 'fake' input.


Do other clients have this problem or is it an issue limited to SMART?

NKN

2014-11-09 10:44:14

From: KeepBotting
Do other clients have this problem or is it an issue limited to SMART?



IIRC, @Brandon wrote something in C++ to detect mouse/keyboard clicks, and weren't custom drivers the only way to fool it?

As for Java bots, same thing, I'm pretty sure.

Olly

2014-11-09 11:16:55

Forget I said anything….

NKN

2014-11-09 11:19:07

From: Olly
Forget I said anything….


We always do. ;)

Ian

2014-11-09 23:08:17

From: Olly
Forget I said anything….


Why?

TomTuff

2014-11-10 03:49:30

From: BMWxi
Why?


Probably because everyone took his point, ran with it, and took it off a cliff.

Brandon

2014-11-10 09:48:32

I don't see why these threads come up so often and it's always the same thing :S "How to detect SMART or Simba".. Since most use Windows (most stuff below is native).. Anyway, you could just ask Benland100 how to detect SMART. He will most likely tell you the best way. For Simba, it's harder.. by a lot.. Go to gamedeception or unknowncheats and look at the decompiled code and circumventions for many detection engines (ie: punkbuster) to see how they do it: http://www.unknowncheats.me/forum/anti-cheat-bypass/ Post a thread on rohitab or w/e.. they will tell you exactly how a company could detect you. Some games are so serious about cheating, they ban you by hardware ID's.. lol.


Here's the most naive ways I could come up with (by no means advanced):


Simba:

- ReadProcessMemory from Winapi could scan for a specific signature in each process (perhaps the layout of one of the functions that hasn't changed in ages). Just like how malware scan for signatures (and UGC condition zero servers).

- Get each process's physical location on disk, map the file, and scan for known signature and name.

- Scan each process's import and export tables.. Look for "FindCol" or "FindColorTol", etc..

- Scan each process's folder for .dll's or export table to find all loaded modules.. Read each dll's export table. Look for tesseract's exports, smart's exports, etc..

- If simba uses SendInput and set the dwExtraInfo as the hwnd or anything that can be used to identify it, you can read this with a low-level keyboard or mouse hook. And yes, that would rule out teamviewer and vnc (no false positives).

- Scan the resource table (almost never changes). Read the resource strings, images, etc..

- Install a global hook module (installs to every process automatically aka low-level hook [similar to keyboard mouse hook]) and hook any GDI functions that deal with bitmaps (GetDC is extremely common; if not, a must). Check if the returned DC or HWND parameter is that of our applet. Ban for attempting to screen scrape. Unhook upon termination (as usual).

- Install a global hook module. Do whatever you want to detect whatever you want. Global hooks are installed into every process (FRAPS for example.. uses such a hook to decide what dx applications to capture).


Smart:

- Scan module tables: LoadLibraryEx("some_module.dll", NULL, DONT_RESOLVE_DLL_REFERENCES); and check for exported function names that don't belong. Anything beginning with SMART_. You'd of course enumerate each module from all processes running (keep a hash table of the names of modules checked already.. this way you don't check the same ones twice [user32, kernel32, etc.. are loaded by every process always]). This is actually very fast. Also can be done in a thread.

- Scan the PEB and TEB tables (undocumented winapi) to see if any unknown modules were loaded once or twice (opengl or direct-x or any smart plugins and smart itself.. can be patched). VAC2 does this (or at least.. they used to. Not sure if they still do). The PEB alone contains: ProcessParameters, BeingDebugged, ImageBaseAddress, ImageSubsystem (can be used to see if it is a DLL or EXE.. Smart is a dll), .

- Scan the PEB table (could also just use NtQueryInformationProcess to get a pointer to it) and read: RTL_USER_PROCESS_PARAMETERS. SMART passes specific parameters upon creation of the process. RTL_USER_PROCESS_PARAMETERS contains: CurrentDirectory, ImagePathName, CommandLine, DebugFlags, WindowTitle.

- ipcs -m on linux will give a list of processes using SharedMemory. Since RS does not use it and has no need for it, you can ban if your process id shows up in the list (granted, this is a pretty bad technique). SMART relies on SHM. On windows, use: GetMappedFileName.

- Scan the title bar (ineffective)

- Get the highest parent of the applet owner. Use reflection to get the hwnd, call GetWindowClass, if it's not the regular, ban.. Most bots use SunAwtFrame (a JFrame).. but a browser doesn't.. Would probably have to take measures to not ban that RSBuddy thing.

- Call CreateToolhelpSnapshot(TH32CS_SNAPMODULE, processID) to find a list of all modules loaded (same as peb/teb.. patch peb/teb, it disables this). Scan each module's import and export table for smart's exports, OpenGL smart plugin export, direct-x smart plugin export, etc..

- Call List<String> getInputArguments() to get a list of JVM arguments. Look for -Xbootclasspath and ban.. Use JNI to make this not easily patchable by regular java programmers. There is no browser out there that uses -Xbootclasspath and neither does the official client.

- Use JNI, attach to current JVM using JNI_GetCreatedJavaVMs (from jni.dll/jni.so). Attach to the first JVM found (because usually only one JVM can be ran per process). After attaching, call whatever you want. I'd call "env->FindClass" to find classes that are known to be in bots. Can be used for injection bots as well.. Hard to remove for the average Java programmers. You have a pointer to the JVM, environment, etc.. You can do whatever you feel like.

- To prevent removal of library loading from the Java side (such as System.load or System.loadLibrary), I'd have the module ping the server upon loading with the same identifier they use when a jar is distributed per person. That way, if you log in and the server doesn't have the ping + extra info for that client, ban the user for circumvention.

- Implement a java security policy to prevent reflection and "setAccessible": System.setSecurityManager(new SecurityManager()) should do the trick. Otherwise a custom security manager can be used.

- Call NtQueryInformationProcess (undocumented) and check for the ProcessImageFileName and ban upon known names. Call the same function to check for the parent process id and name and signature (because Simba start's SMART with shellexecute, simba would be detected here and not SMART itself).


Could go on forever.. Now stop asking these questions. Every bot is detectable in infinite amounts of ways (and the dumbest/naive but easiest ways are shown above).. Do they do it? No.. do they have time for it? maybe.. Do they have the knowledge on their team? Maybe.. You'll never know.. It can be done (natively as mostly shown above or on the java side [barely shown above]). Cat-mouse game goes on; it is a risk you take with ALL bots.

You'll know if you're being hunted (everyone would be banned.. not just you) and that's all the proof you need..

Lipcot

2014-11-10 11:18:20

From: Brandon
I don't see why these threads come up so often and it's always the same thing :S "How to detect SMART or Simba".. Since most use Windows (most stuff below is native).. Anyway, you could just ask Benland100 how to detect SMART. He will most likely tell you the best way. For Simba, it's harder.. by a lot.. Go to gamedeception or unknowncheats and look at the decompiled code and circumventions for many detection engines (ie: punkbuster) to see how they do it: http://www.unknowncheats.me/forum/anti-cheat-bypass/ Post a thread on rohitab or w/e.. they will tell you exactly how a company could detect you. Some games are so serious about cheating, they ban you by hardware ID's.. lol.


Here's the most naive ways I could come up with (by no means advanced):


Simba:

- ReadProcessMemory from Winapi could scan for a specific signature in each process (perhaps the layout of one of the functions that hasn't changed in ages). Just like how malware scan for signatures (and UGC condition zero servers).

- Get each process's physical location on disk, map the file, and scan for known signature and name.

- Scan each process's import and export tables.. Look for "FindCol" or "FindColorTol", etc..

- Scan each process's folder for .dll's or export table to find all loaded modules.. Read each dll's export table. Look for tesseract's exports, smart's exports, etc..

- If simba uses SendInput and set the dwExtraInfo as the hwnd or anything that can be used to identify it, you can read this with a low-level keyboard or mouse hook. And yes, that would rule out teamviewer and vnc (no false positives).

- Scan the resource table (almost never changes). Read the resource strings, images, etc..

- Install a global hook module (installs to every process automatically aka low-level hook [similar to keyboard mouse hook]) and hook any GDI functions that deal with bitmaps (GetDC is extremely common; if not, a must). Check if the returned DC or HWND parameter is that of our applet. Ban for attempting to screen scrape. Unhook upon termination (as usual).

- Install a global hook module. Do whatever you want to detect whatever you want. Global hooks are installed into every process (FRAPS for example.. uses such a hook to decide what dx applications to capture).


Smart:

- Scan module tables: LoadLibraryEx("some_module.dll", NULL, DONT_RESOLVE_DLL_REFERENCES); and check for exported function names that don't belong. Anything beginning with SMART_. You'd of course enumerate each module from all processes running (keep a hash table of the names of modules checked already.. this way you don't check the same ones twice [user32, kernel32, etc.. are loaded by every process always]). This is actually very fast. Also can be done in a thread.

- Scan the PEB and TEB tables (undocumented winapi) to see if any unknown modules were loaded once or twice (opengl or direct-x or any smart plugins and smart itself.. can be patched). VAC2 does this (or at least.. they used to. Not sure if they still do). The PEB alone contains: ProcessParameters, BeingDebugged, ImageBaseAddress, ImageSubsystem (can be used to see if it is a DLL or EXE.. Smart is a dll), .

- Scan the PEB table (could also just use NtQueryInformationProcess to get a pointer to it) and read: RTL_USER_PROCESS_PARAMETERS. SMART passes specific parameters upon creation of the process. RTL_USER_PROCESS_PARAMETERS contains: CurrentDirectory, ImagePathName, CommandLine, DebugFlags, WindowTitle.

- ipcs -m on linux will give a list of processes using SharedMemory. Since RS does not use it and has no need for it, you can ban if your process id shows up in the list (granted, this is a pretty bad technique). SMART relies on SHM. On windows, use: GetMappedFileName.

- Scan the title bar (ineffective)

- Get the highest parent of the applet owner. Use reflection to get the hwnd, call GetWindowClass, if it's not the regular, ban.. Most bots use SunAwtFrame (a JFrame).. but a browser doesn't.. Would probably have to take measures to not ban that RSBuddy thing.

- Call CreateToolhelpSnapshot(TH32CS_SNAPMODULE, processID) to find a list of all modules loaded (same as peb/teb.. patch peb/teb, it disables this). Scan each module's import and export table for smart's exports, OpenGL smart plugin export, direct-x smart plugin export, etc..

- Call List<String> getInputArguments() to get a list of JVM arguments. Look for -Xbootclasspath and ban.. Use JNI to make this not easily patchable by regular java programmers. There is no browser out there that uses -Xbootclasspath and neither does the official client.

- Use JNI, attach to current JVM using JNI_GetCreatedJavaVMs (from jni.dll/jni.so). Attach to the first JVM found (because usually only one JVM can be ran per process). After attaching, call whatever you want. I'd call "env->FindClass" to find classes that are known to be in bots. Can be used for injection bots as well.. Hard to remove for the average Java programmers. You have a pointer to the JVM, environment, etc.. You can do whatever you feel like.

- To prevent removal of library loading from the Java side (such as System.load or System.loadLibrary), I'd have the module ping the server upon loading with the same identifier they use when a jar is distributed per person. That way, if you log in and the server doesn't have the ping + extra info for that client, ban the user for circumvention.

- Implement a java security policy to prevent reflection and "setAccessible": System.setSecurityManager(new SecurityManager()) should do the trick. Otherwise a custom security manager can be used.

- Call NtQueryInformationProcess (undocumented) and check for the ProcessImageFileName and ban upon known names. Call the same function to check for the parent process id and name and signature (because Simba start's SMART with shellexecute, simba would be detected here and not SMART itself).


Could go on forever.. Now stop asking these questions. Every bot is detectable in infinite amounts of ways (and the dumbest/naive but easiest ways are shown above).. Do they do it? No.. do they have time for it? maybe.. Do they have the knowledge on their team? Maybe.. You'll never know.. It can be done (natively as mostly shown above or on the java side [barely shown above]). Cat-mouse game goes on; it is a risk you take with ALL bots.

You'll know if you're being hunted (everyone would be banned.. not just you) and that's all the proof you need..


this is probably the definiton of quallity posting :P

Marius90

2014-11-12 02:00:14

Thank you for all your posts, they made me to have less expectations on botting(in the good way) so i won't be so dissapointed if i get banned and one more thing, can you please erase the thread now, cuz' maybe they're not that smart:p

TimeRiders

2014-11-12 21:19:49

From: KeepBotting
Exactly my point. There's no conceivable way.

Oh wait, Actually I just installed my special "l33t legit ub3r gold generator hax legit notavirus.jpg.exe" onto Jacmob's IP address.
On his personal computer I found a leaked screenshot of the proposed "color-nuke" that will defeat all screen scraper bots forever!


We're really in for it this time guys!!!11!1!1one!!!!!1111



ahahahaha

J_R

2014-11-12 22:13:13

From: Ionutz900
Thank you for all your posts, they made me to have less expectations on botting(in the good way) so i won't be so dissapointed if i get banned and one more thing, can you please erase the thread now, cuz' maybe they're not that smart:p


lol, it's probably way too late and I'd be shocked if they didn't already know at least half of that stuff.

As long as you don't bot something which will adversely affect other players (gold farming, running a fishing/wcing army to ruin rocktail/yew log prices etc), I don't think Jagex comes after you apart from those big ban waves that they do in order to discourage us once in a while(unless you run multiple bots for the lulz, let's be real, no one legit has 5+ accounts that they play on regularly).