FEATURE: bypass emulator detection #198

Open
opened 2024-11-29 09:09:08 -05:00 by ghost · 7 comments
ghost commented 2024-11-29 09:09:08 -05:00 (Migrated from github.com)

there are some games that do not allow being played on emulators.
I'm mostly concerned about Hayday a Supercell game.

There are some reddit threads that previously had mentioned changing some data such as manufacturer, brand and device model had solved the issue and they were able to play it fine for a short amount of time.
https://www.reddit.com/r/HayDay/comments/12yy6hq/is_anyone_playing_hay_day_on_bluestacks_and/
https://www.reddit.com/r/BlueStacks/comments/12ycpvr/hay_day_is_broken_in_the_new_update_for_me_on/
https://www.reddit.com/r/HayDay/comments/z7kqz3/hayday_wont_open_on_emulator_after_update/

These are pretty old so none work but there is some idea into how these detections work

Getting back to the main point:
Are there any ways to make An android emulator indistinguishable from a normal day to day device ?

there are some games that do not allow being played on emulators. I'm mostly concerned about Hayday a Supercell game. There are some reddit threads that previously had mentioned changing some data such as manufacturer, brand and device model had solved the issue and they were able to play it fine for a short amount of time. https://www.reddit.com/r/HayDay/comments/12yy6hq/is_anyone_playing_hay_day_on_bluestacks_and/ https://www.reddit.com/r/BlueStacks/comments/12ycpvr/hay_day_is_broken_in_the_new_update_for_me_on/ https://www.reddit.com/r/HayDay/comments/z7kqz3/hayday_wont_open_on_emulator_after_update/ These are pretty old so none work but there is some idea into how these detections work Getting back to the main point: Are there any ways to make An android emulator indistinguishable from a normal day to day device ?
YogSottot commented 2024-11-29 12:39:58 -05:00 (Migrated from github.com)

Try this script.
https://github.com/YogSottot/waydroid_stuff/blob/master/weston/spoof-device.sh
Run with sudo.

It works in some cases. For example, for konosuba.
But the solution is not universal, for example, wuthering waves still detects emulator.

Try this script. https://github.com/YogSottot/waydroid_stuff/blob/master/weston/spoof-device.sh Run with sudo. It works in some cases. For example, for [konosuba](https://github.com/waydroid/waydroid/issues/1060). But the solution is not universal, for example, [wuthering waves](https://github.com/waydroid/waydroid/issues/1504) still detects emulator.
ghost commented 2024-11-30 05:28:09 -05:00 (Migrated from github.com)

I would try it but suddenly my waydroid is not working anymore
similar issue to:
https://github.com/waydroid/waydroid/issues/183

also on the HayDay part
I have decompiled it and to my surprise it's emulator detection code is not obfuscated.
maybe I could get a grasp on how it manages to detect the emulator if I could run my waydroid again.
so far nothing seems to work

I would try it but suddenly my waydroid is not working anymore similar issue to: https://github.com/waydroid/waydroid/issues/183 also on the HayDay part I have decompiled it and to my surprise it's emulator detection code is not obfuscated. maybe I could get a grasp on how it manages to detect the emulator if I could run my waydroid again. so far nothing seems to work
YogSottot commented 2024-11-30 23:12:33 -05:00 (Migrated from github.com)

I would try it but suddenly my waydroid is not working anymore

Doesn't work after running the script? You can always manually delete the lines added by the script in waydroid.cfg and restart the upgrade command.

If it didn't work before running the script, you can do a full reset
https://docs.waydro.id/debugging/troubleshooting

> I would try it but suddenly my waydroid is not working anymore Doesn't work after running the script? You can always manually delete the lines added by the script in waydroid.cfg and restart the upgrade command. If it didn't work before running the script, you can do a full reset https://docs.waydro.id/debugging/troubleshooting
ghost commented 2024-12-08 14:11:56 -05:00 (Migrated from github.com)

I finally got my waydroid back working
Though your spoofing method does not seem to do the job

I finally got my waydroid back working Though your spoofing method does not seem to do the job
ghost commented 2024-12-08 14:25:23 -05:00 (Migrated from github.com)

I have access to this code from apk relevant to emulator detection:

private void checkEmulator() {
    this.emulatorDetectorThread = EmulatorDetector.with(this).setCheckTelephony(false).setDebug(false).detect(new f());
}

and also

public void run() {
            boolean detect = EmulatorDetector.this.detect();
            EmulatorDetector emulatorDetector = EmulatorDetector.this;
            StringBuilder sb = new StringBuilder();
            char[] cArr = {(char) (cArr[4] ^ 't'), (char) (cArr[6] ^ 17), (char) (cArr[13] ^ 26), (char) (cArr[4] ^ 'S'), (char) (cArr[16] ^ 'M'), (char) (cArr[3] ^ ' '), (char) (cArr[15] ^ Typography.less), (char) (cArr[11] ^ 'S'), (char) (cArr[13] ^ 7), (char) (cArr[4] ^ 'E'), (char) (cArr[5] ^ Typography.greater), (char) (cArr[8] ^ 'T'), (char) (cArr[13] ^ 26), (char) (cArr[15] ^ '6'), (char) (cArr[4] ^ 0), (char) ((-29490) ^ (-29557)), (char) (cArr[12] ^ 4), (char) (cArr[23] ^ 'O'), (char) (cArr[21] ^ 3), (char) (cArr[2] ^ '\b'), (char) (cArr[4] ^ 'T'), (char) (cArr[12] ^ 6), (char) (cArr[15] ^ '7'), (char) (cArr[15] ^ 127), (char) (cArr[10] ^ 'M')};
            sb.append(new String(cArr).intern());
            sb.append(detect);
            emulatorDetector.log(sb.toString());
            OnEmulatorDetectorListener onEmulatorDetectorListener = this.f12052a;
            if (onEmulatorDetectorListener != null) {
                onEmulatorDetectorListener.onResult(detect);
            }
        }

and much much other obfuscated data so I guess no easy way to spoof this one

I have access to this code from apk relevant to emulator detection: ```java private void checkEmulator() { this.emulatorDetectorThread = EmulatorDetector.with(this).setCheckTelephony(false).setDebug(false).detect(new f()); } ``` and also ```java public void run() { boolean detect = EmulatorDetector.this.detect(); EmulatorDetector emulatorDetector = EmulatorDetector.this; StringBuilder sb = new StringBuilder(); char[] cArr = {(char) (cArr[4] ^ 't'), (char) (cArr[6] ^ 17), (char) (cArr[13] ^ 26), (char) (cArr[4] ^ 'S'), (char) (cArr[16] ^ 'M'), (char) (cArr[3] ^ ' '), (char) (cArr[15] ^ Typography.less), (char) (cArr[11] ^ 'S'), (char) (cArr[13] ^ 7), (char) (cArr[4] ^ 'E'), (char) (cArr[5] ^ Typography.greater), (char) (cArr[8] ^ 'T'), (char) (cArr[13] ^ 26), (char) (cArr[15] ^ '6'), (char) (cArr[4] ^ 0), (char) ((-29490) ^ (-29557)), (char) (cArr[12] ^ 4), (char) (cArr[23] ^ 'O'), (char) (cArr[21] ^ 3), (char) (cArr[2] ^ '\b'), (char) (cArr[4] ^ 'T'), (char) (cArr[12] ^ 6), (char) (cArr[15] ^ '7'), (char) (cArr[15] ^ 127), (char) (cArr[10] ^ 'M')}; sb.append(new String(cArr).intern()); sb.append(detect); emulatorDetector.log(sb.toString()); OnEmulatorDetectorListener onEmulatorDetectorListener = this.f12052a; if (onEmulatorDetectorListener != null) { onEmulatorDetectorListener.onResult(detect); } } ``` and much much other obfuscated data so I guess no easy way to spoof this one
ghost commented 2024-12-08 14:30:52 -05:00 (Migrated from github.com)
12-08 22:56:53.016  2461  2461 W upercell.hayda: Unexpected CPU variant for X86 using defaults: x86_64
12-08 22:56:53.017  2461  2461 D houdini : [2461] Initialize library(version: 11.0.1b_z.38765.m RELEASE)... successfully.
12-08 22:56:53.017  2461  2461 E upercell.hayda: Not starting debugger since process cannot load the jdwp agent.

I also found these in logcat

``` 12-08 22:56:53.016 2461 2461 W upercell.hayda: Unexpected CPU variant for X86 using defaults: x86_64 12-08 22:56:53.017 2461 2461 D houdini : [2461] Initialize library(version: 11.0.1b_z.38765.m RELEASE)... successfully. 12-08 22:56:53.017 2461 2461 E upercell.hayda: Not starting debugger since process cannot load the jdwp agent. ``` I also found these in logcat
William2001GH commented 2026-03-29 09:59:22 -04:00 (Migrated from github.com)

Did you manage to solve it?

Did you manage to solve it?
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wbruno/waydroid_script#198