Skip to content

A small utility to patch and sign the Clash Royale APK

Notifications You must be signed in to change notification settings

royale-proxy/cr-patcher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Warning: In April 2016, Supercell has started banning accounts for the use of third party software. We are unsure what, if any, checks are in place that might reveal the use of this tool, so continue at your own risk. See here for more info.

cr-patcher

This tool patches the Clash Royale APK. Once applied, your game will connect with the official servers through cr-proxy instead of directly. This allows you to see every message that is sent to and from the server, decrypted and decoded.

Running

Read the installation section before

First, you need an .apk of the game. You can download an official one for example here. Put it to this folder (the one where patcher.py is). The name should match the following format:

<package>-<version>.apk

If you use the official APK, the package is com.supercell.clashroyale, with a file name of com.supercell.clashroyale-1.8.1.apk

Run the script with:

python3.5 patcher.py [--json] version-number

For example:

python3.5 patcher.py 1.8.1

By default, cr-patcher will retrieve the keys, MD5s, and key/URL offsets from the cr-proxy wiki. To provide these values for a new or unknown APK version, enter them in config.json and use the --json flag.

If you need to, enter them with this layout (click to expand)

"versions": {
  "8.212.9": {
    "key": "469b704e7f6009ba8fc72e9b5c864c8e9285a755c5190f03f5c74852f6d9f419",
    "arm": {
      "md5": "769e2e9e1258b75d15cb7e04b2e49de3",
      "key-offset": "4280344",
      "url-offset": "3534513"
    },
    "x86": {
      "md5": "29ca23e48a5e419e83f2a7988c842d3e",
      "key-offset": "6189080",
      "url-offset": "4768816"
    }
  }
}

Config explained

  • debug (true/false) - when set to true, you can use external tools to debug the app while it's running. If you only want to run the proxy, you probably won't need this, but most likely you also won't have any reason to disable this.
  • package - if you somehow changed the package in game files before, change it here also (remember to change the name of .apk). The main reason for changing it is to make it possible to install both the original Clash Royale and your modified version at the same time. This tool doesn't change the package automatically.
  • key - you shouldn't have any reason to change this. The default key guarantees that after patching the game will be able to connect to cr-proxy. If for some reasons you change the key, make sure the proxy is also setup with the same key.
  • url - the address of server which the game will connect to. The default one, game.clashroyaleapp.com, is 23 characters long. Yours also needs to be 23 characters. If you have a domain, you can add a subdomain and redirect it to the proxy. The official server of Clash Royale is running on port 9339, so is the proxy. The game will always look for a server at this port, that's why there is no port field in this config. Also, don't try to add the port like the.ip.here:1337.
  • keystore - if the key used to sign the app changes, you won't be able to update it without uninstalling the previous version before. You can learn more about signing Android apps for example here. Also note, the keypass and dname fields are only required to create a new keystore. See here for how to fill out the dname fields (if you really want to, but that isn't important).
  • paths - paths of executables of different dependencies.
  • versions - if you need to change something here - experiment, ask around, or wait for someone else to do it for you, when a new version is out

Installation

  1. Download the dependencies and install if needed.
  2. Copy the config.json.example file to config.json (so you can do it again when you break something) and fill it in. The changes that you have to make are:
  • in paths, set apktool to the path of your Apktool wrapper script. If you followed the instructions on their website, the path is C:\\Windows\\apktool.bat on Windows and /usr/local/bin/apktool on Linux and Mac.
  • in paths, set zipalign to the path of that program (look at dependencies) Note: On Windows, use either / to separate folders in path, or use double \ -> \\, because of how json works.
  1. You may want to change a few more things in the config
  2. Read the running section

Dependencies

  • Python 3.5 to run this script

  • Apktool - home page - download & install instructions

  • keytool and jarsigner from the Java JDK, on Windows most likely can be found in C:\Program Files\Java\<version>\bin\

  • zipalign from the Android SDK

    If you haven't already, install Android Studio. Open it and download SDK for any version of Android (the one that will be chosen by default, lastest stable, should be fine). Then, you can find zipalign in <sdk-folder>/build-tools/<version>/zipalign(.exe on Windows).

    For example, on Linux, I found it in ~/Android/Sdk/build-tools/25.0.2/zipalign, and on Windows in C:\Program Files (x86)\Android\android-sdk\build-tools\22.0.1\zipalign.exe (remember to double the \ or use / instead)

    If you don't want to download the entire Android Studio, you can scroll the download page down to Get just the command line tools. Download the version for your OS, unzip it, run sdkmanager(.exe) (this program has a gui), download one version of SDK, just like you would do in Android Studio. Rest works like above ^

  • dd - is built in Linux/MAC. For Windows, you can download it here

  • requests and requests-cache

    Note: requests and requests-cache can be installed with:

      python3.5 -m pip install requests requests-cache
    

    To install it this way, you need pip. Check if you have it with pip --version, if you don't, on Ubuntu you can get it with

      apt-get -y install python-pip
    

About

A small utility to patch and sign the Clash Royale APK

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages