Abyssrium cheats and tricks
I stumble upon a nice game called Abyssrium yesterday. It allows you to raise all kinds of beautiful fishes and create your own aquarium in a deep ocean. The basic play style is repetitively tapping around and collecting the so called “vitality” to buy everything you need. Well, if you occasionally program a little, then I guess you can understand the irritation I feel when there’s something needs manually “repeating”.
So I dug a little and implemented two ways of avoiding such repeating work. A kind notice though, these are cheats and I don’t suggest you take it if you are really enjoying the game. Also I’m only working with the android version.
You asked for tapping, so tapping I give you, a lot. There are two ways of doing it.
1. sendevent and getevent
These two babies catch and replay the low-level input on your device, and here by low-level input we mean taps. Open the terminal on your computer and connect your phone in debug mode. Then use the following command in the terminal.
$ adb shell geteventcodeAnd you will get something like below,
add device 1: /dev/input/event5 name: "msm8974-taiko-mtp-snd-card Headset Jack" add device 2: /dev/input/event4 name: "msm8974-taiko-mtp-snd-card Button Jack" add device 3: /dev/input/event3 name: "hs_detect" add device 4: /dev/input/event1 name: "touch_dev" add device 5: /dev/input/event0 name: "qpnp_pon" add device 6: /dev/input/event2 name: "gpio-keys"These lines tell you the possible input devices on your phone, and here we see touch_dev which corresponds to your touch screen is registered in /dev/input/event1. So we will always keep an eye on event1. And then you tap on your phone, now you’ll probably get something like below
/dev/input/event1: 0003 0039 00000109 /dev/input/event1: 0003 0035 000002e7 /dev/input/event1: 0003 0036 00000530 /dev/input/event1: 0003 003a 0000003a /dev/input/event1: 0000 0000 00000000 /dev/input/event1: 0003 0039 ffffffff /dev/input/event1: 0000 0000 00000000These are the tap coordinates in hex, and some other special code, like finger down(tap start), finger up (tap stop) etc. However we don’t care what the exact meaning is, just keep in mind it is a tap, and that’s enough. Now transfer all the numbers from hex to decimal, you’ll have
/dev/input/event1: 3 57 265 /dev/input/event1: 3 53 743 /dev/input/event1: 3 54 1328 /dev/input/event1: 3 58 58 /dev/input/event1: 0 0 0 /dev/input/event1: 3 57 4294967295 /dev/input/event1: 0 0 00000000Now we just send them back using sendevent and you will have the tap replayed. Input the following commands in your terminal and you are done.
$ adb shell sendevent /dev/input/event1 3 57 265 $ adb shell sendevent /dev/input/event1 3 53 743 $ adb shell sendevent /dev/input/event1 3 54 1328 $ adb shell sendevent /dev/input/event1 3 58 58 $ adb shell sendevent /dev/input/event1 0 0 0 $ adb shell sendevent /dev/input/event1 3 57 4294967295 $ adb shell sendevent /dev/input/event1 0 0 00000000
And that’s just one tap, write a simple loop script and you get as many as you want. Here we do tap 100 times as an example.
#!/bin/bash let i=0; while [ $i -le 100 ]; do adb shell sendevent /dev/input/event1 3 57 265 adb shell sendevent /dev/input/event1 3 53 743 adb shell sendevent /dev/input/event1 3 54 1328 adb shell sendevent /dev/input/event1 3 58 58 adb shell sendevent /dev/input/event1 0 0 0 adb shell sendevent /dev/input/event1 3 57 4294967295 adb shell sendevent /dev/input/event1 0 0 00000000 let i=$i+1; done
This method is slow because for each sendevent, it needs to initialize the communication and open/write/close the file. The next method will be way faster.
We can use the dd command to store a bunch of taps and replay them at once. To record, type in your terminal
$ adb shell dd if=/dev/input/event1 of=/sdcard/tapsThen tap on your phone for a bunch of times. These taps will be stored in a file named “taps” on your sdcard. Then we can replay all these taps instantaneously by
$ adb shell dd if=/dev/input/event1 of=/sdcard/tapsAnd of course we will repeat for many times,
#!/bin/bash let i=0; while [ $i -le 100 ]; do adb shell dd if=/sdcard/taps of=/dev/input/event1 let i=$i+1; done
This method is much faster compared to the sendevent/getevent one. However the following date exploit will be even more efficient.
The date exploit
After you stop playing the game, it still counts the time and generate vitality for you, and when you come back, the generated vitality at your absence is rewarded to you. However, the game has a bug that it only checks local date and time. So if you change your date/time to a point in the future, the game will directly give you the reward of the corresponding period. The longest period the game will rewards you seems to be only one day though, but it is still much more vitality than you can get by tapping.
The following script will do this job. First you need to disable the “Automatic date & time” option in your system settings. After you start the script, it will switch to the clock app to simulate the user’s absence, change the time, switch back and claim the reward, change the time back, then repeat. This script needs your phone to be rooted.
#!/bin/bash adb root while :; do adb shell am start com.google.android.deskclock/com.android.deskclock.DeskClock adb shell date 102910002016.00 sleep 1 adb shell am start com.idleif.abyssrium/com.unity3d.player.UnityPlayerNativeActivity sleep 1 adb shell dd if=/sdcard/Download/record1 of=/dev/input/event1 adb shell date 092810002016.00 done
29 Sep 2016