diff --git a/404.html b/404.html index e60987d..473e274 100755 --- a/404.html +++ b/404.html @@ -273,6 +273,26 @@ + + + + + + +
  • + + + + + Custom Charts & Packs + + + + +
  • + + + diff --git a/custom-charts-packs.html b/custom-charts-packs.html new file mode 100755 index 0000000..67165aa --- /dev/null +++ b/custom-charts-packs.html @@ -0,0 +1,402 @@ + + + + + + + + + + + + + + + + + + + + + Custom Charts & Packs - Arcaea Modding Wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + Skip to content + + +
    +
    + +
    + + + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + +

    Adding custom charts/packs

    +

    !!! "Work in progress" + This page is still being worked on, please come back later!

    + + + + + + + + + + + + + +
    +
    + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index ab66b69..7a0a459 100755 --- a/index.html +++ b/index.html @@ -290,6 +290,26 @@ + + + + + + +
  • + + + + + Custom Charts & Packs + + + + +
  • + + + @@ -331,7 +351,7 @@

    Welcome to Arcaea Modding Wiki!

    Looking for contributors!

    -

    Arcaea Modding Wiki is looking for contributors! The wiki still needs many adjustments and improvements such as better reference images and such. If you want to contribute, visit the GitHub repository for instructions!

    +

    Arcaea Modding Wiki is looking for contributors! The wiki still needs polishing and improving such as better reference images and such. If you want to contribute, visit the GitHub repository!

    diff --git a/offline-mod.html b/offline-mod.html index 67c7a45..4876766 100755 --- a/offline-mod.html +++ b/offline-mod.html @@ -12,6 +12,8 @@ + + @@ -276,17 +278,6 @@ - - @@ -297,61 +288,26 @@ - - - - +
  • + + + + + Custom Charts & Packs + + + +
  • @@ -376,50 +332,6 @@ - - - @@ -436,75 +348,8 @@

    Reverse Engineering Arcaea

    Danger

    -

    This page is still in the process of being finished. There may be unfinished or incorrect information.

    -
    -
    -

    Before starting

    -

    Make sure to have a copy of Arcaea APK/IPA file ready. For IPA file, make sure its decrypted as otherwise you will run into issues. Additionally, you will need a disassembler with support for ELF/Mach-O arm64 executable as well as pseudo-code decompilation for such architectures. IDA Pro is used here. The version used here is iOS 5.6.1.

    -
    -
    -

    Tip

    -

    To modify instructions, you will need to overwrite it hex address. Use armconverter to convert ARM instructions to hex address and vice-versa.

    -

    The hex address for NOP instruction is 1F 20 03 D5.

    -
    -

    Removing lock icon

    -
    -

    Info

    -

    This will remove the lock icon on locked packs. This, however, will not make the packs themselves playable.

    -
    -

    Press SHIFT + F12, wait for the string list to be generated, then search for lock_icon. xref (cross-reference) it, then press F5, TAB or View > Open subviews > Generate pseudocode to decompile it. It should look like this:

    -

    image

    -

    Focus on this part, highlight v82, then xref it.

    -

    image

    -

    Make sure you xref the first entry.

    -

    image

    -

    Highlight this function call, and double click onto it.

    -

    image

    -

    Modify the highlighted parts, change it to 1.

    -

    image

    -

    image

    -

    Removing beyond lock

    -
    -

    Info

    -

    This will remove limits for Beyond (BYD) difficulty.

    -
    -

    Make sure you are in the IDA View sub-window. Press ALT + T or Search > Text, search for dl_, tick Find all occurrences then search. Wait for it to complete. It will look like this:

    -

    image

    -

    Click onto the first entry on the list, you will see this sturcture. Scroll down a little bit and edit the CMP instruction. Change #3 to #0x2F.

    -

    image

    -

    Press SHIFT + F12, then ALT + T or Search > Search, search for world_unlock. Make sure it is world_unlock, not world_unlocks. Xref it and pick the one with the highest address (in this case its the final one.)

    -

    image

    -

    Continue scrolling down a little bit, then repeat the same step to this CMP instruction.

    -

    image

    -

    Return to the Strings sub-window and search for You no longer have enough Fragments

    -

    image

    -

    Xref it, scroll up a little bit until you see this and repeat the same steps as before.

    -

    image

    -

    Return to the Strings sub-window and search for layouts/songselect/start.png, then xref it. Repeat the same step as before.

    -

    image

    -

    Patching scenecontrol (6 lanes/filters/etc.)

    -
    -

    Info

    -

    Make special effects in charts like those in Final Verdict to work properly.

    -
    -

    Make sure you are in the IDA View sub-window. Press ALT + I or Search > Immediate value, enter 264, tick Find all occurrences then search. Wait for it to complete. It will look like this, click on Insturction:

    -

    image

    -

    Scroll up/down to find LDRB entries:

    -

    image

    -

    Look into every single entries until you see any that has a CBZ instruction following or behind. The CBZ instruction should be NOP'ed. Do this to all entries. While doing so, press TAB, F5 or View > Open subviews > Generate pseudo-code until you find one with this sturcture (there is only one entry like this so once you have managed to find it you do not need to do this anymore.)

    -

    image

    -

    In this part change 2 to 4 (image already modified this part).

    -

    image

    -

    Patching world mode songs

    -
    -

    Info

    -

    Allow playing world mode songs.

    +

    This guide is in the process of being rewritten. No precise ETAs will be given on the completion date. Please do not try to follow the old guide as it will NOT work.

    -

    Press SHIFT + F12, search for This song is available by progressing through World Mode.. Xref the second one. Then press F5, TAB or View > Open sub-views > Generate pseudo-code. You will see something like this:

    -

    image

    -

    Double click onto this function:

    -

    image

    -

    After that, modify all return statement to return 1LL.

    diff --git a/private-server.html b/private-server.html index 2bdbc56..3710d30 100755 --- a/private-server.html +++ b/private-server.html @@ -424,6 +424,26 @@ + + + + + + +
  • + + + + + Custom Charts & Packs + + + + +
  • + + + diff --git a/search/search_index.js b/search/search_index.js index 4d494f5..c76c2f0 100755 --- a/search/search_index.js +++ b/search/search_index.js @@ -1 +1 @@ -var __index = {"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Welcome to Arcaea Modding Wiki!","text":"

    This is a (work-in-progress) centralized wiki for everything Arcaea modding related!

    Disclaimer

    Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.

    Looking for contributors!

    Arcaea Modding Wiki is looking for contributors! The wiki still needs many adjustments and improvements such as better reference images and such. If you want to contribute, visit the GitHub repository for instructions!

    "},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"

    Danger

    This page is still in the process of being finished. There may be unfinished or incorrect information.

    Before starting

    Make sure to have a copy of Arcaea APK/IPA file ready. For IPA file, make sure its decrypted as otherwise you will run into issues. Additionally, you will need a disassembler with support for ELF/Mach-O arm64 executable as well as pseudo-code decompilation for such architectures. IDA Pro is used here. The version used here is iOS 5.6.1.

    Tip

    To modify instructions, you will need to overwrite it hex address. Use armconverter to convert ARM instructions to hex address and vice-versa.

    The hex address for NOP instruction is 1F 20 03 D5.

    "},{"location":"offline-mod.html#removing-lock-icon","title":"Removing lock icon","text":"

    Info

    This will remove the lock icon on locked packs. This, however, will not make the packs themselves playable.

    Press SHIFT + F12, wait for the string list to be generated, then search for lock_icon. xref (cross-reference) it, then press F5, TAB or View > Open subviews > Generate pseudocode to decompile it. It should look like this:

    Focus on this part, highlight v82, then xref it.

    Make sure you xref the first entry.

    Highlight this function call, and double click onto it.

    Modify the highlighted parts, change it to 1.

    "},{"location":"offline-mod.html#removing-beyond-lock","title":"Removing beyond lock","text":"

    Info

    This will remove limits for Beyond (BYD) difficulty.

    Make sure you are in the IDA View sub-window. Press ALT + T or Search > Text, search for dl_, tick Find all occurrences then search. Wait for it to complete. It will look like this:

    Click onto the first entry on the list, you will see this sturcture. Scroll down a little bit and edit the CMP instruction. Change #3 to #0x2F.

    Press SHIFT + F12, then ALT + T or Search > Search, search for world_unlock. Make sure it is world_unlock, not world_unlocks. Xref it and pick the one with the highest address (in this case its the final one.)

    Continue scrolling down a little bit, then repeat the same step to this CMP instruction.

    Return to the Strings sub-window and search for You no longer have enough Fragments

    Xref it, scroll up a little bit until you see this and repeat the same steps as before.

    Return to the Strings sub-window and search for layouts/songselect/start.png, then xref it. Repeat the same step as before.

    "},{"location":"offline-mod.html#patching-scenecontrol-6-lanesfiltersetc","title":"Patching scenecontrol (6 lanes/filters/etc.)","text":"

    Info

    Make special effects in charts like those in Final Verdict to work properly.

    Make sure you are in the IDA View sub-window. Press ALT + I or Search > Immediate value, enter 264, tick Find all occurrences then search. Wait for it to complete. It will look like this, click on Insturction:

    Scroll up/down to find LDRB entries:

    Look into every single entries until you see any that has a CBZ instruction following or behind. The CBZ instruction should be NOP'ed. Do this to all entries. While doing so, press TAB, F5 or View > Open subviews > Generate pseudo-code until you find one with this sturcture (there is only one entry like this so once you have managed to find it you do not need to do this anymore.)

    In this part change 2 to 4 (image already modified this part).

    "},{"location":"offline-mod.html#patching-world-mode-songs","title":"Patching world mode songs","text":"

    Info

    Allow playing world mode songs.

    Press SHIFT + F12, search for This song is available by progressing through World Mode.. Xref the second one. Then press F5, TAB or View > Open sub-views > Generate pseudo-code. You will see something like this:

    Double click onto this function:

    After that, modify all return statement to return 1LL.

    "},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"

    Before starting

    Make sure you have a copy of Arcaea APK/IPA file ready.

    "},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"

    Note

    Only for Arcaea 5.4.0+ and non-Chinese versions.

    Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs.

    Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).

    Tip

    Force quit the game AFTER the content bundle is downloaded (before file verification).

    After downloading it, steps to get the files will be different depending on your operating system

    Copy the dltemp folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.

    "},{"location":"private-server.html#patching-arcaea","title":"Patching Arcaea","text":"

    Note

    If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.

    "},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"

    Before starting

    You will need a software that allows applying .xdelta binary patches. DeltaPatcher is used in this guide.

    Warning

    Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.

    Download the appropriate patch for your version:

    iOS 5.6.1 (latest as of 5/7/2024)

    Download

    iOS 5.6.0

    Download

    Android 5.6.0

    Download

    Android 5.6.0c

    Download

    Now open DeltaPatcher, you will be presented with an interface like this:

    Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.

    After that, you are done!

    "},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"

    Before starting

    This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.

    About NOP

    1F 20 03 D5 is the hex equivalent of ARM64 nop instruction. Overwrite a hex address with it when you want to remove a specific instruction call.

    Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.

    After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)

    In the Strings sub-window, press ALT + T and search for cookieFiIe.txt until you found exactly this.

    Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)

    Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.

    Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):

    Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)

    Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.

    After that, make sure the entire code line is absent when re-decompiled.

    Now return to the Strings sub-window, and this time search for vtvtvt.

    xref it, and choose the first xref entry for iOS, or the one with @PAGE for Android.

    Android iOS

    Decompile it again, and scroll down a little bit until you see this part:

    Highlight this part, and NOP it like above:

    After that, apply the patches and you are done!

    After patching the executable, save the file and recompress the APK/IPA file. For Android, you must resign the APK file before installing it onto your device. You may now sideload it onto your device using ADB, AppSync Unified (not recommended due to potential crashes and issues.), AltStore (& friends) or TrollStore (recommended for supported devices.)

    "},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"

    For this section, you will need:

    Warning

    Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.

    First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev or by downloading the ZIP file of the dev branch.

    After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version), and with Python 3.6 or newer installed, run pip install -m requirements.txt.

    From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.

    "},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"

    Open Charles and you will be presented with an interface like this:

    Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill * for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:

    Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:

    Navigate to the Windows tab and tick all checkboxes:

    Close that window, and go to Help > Local IP Addresses. It will look something like this:

    Your local IP address will most likely be the first item in the list (in this case, since I am using Ethernet connection, it will be the first one.) Copy that IP address or memorize it.

    About local IP addresses

    This is your local IP address, meaning it can only be accessed by devices that are connected to the same network.

    You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:

    In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for ports like 8888 or 8889 and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:

    You may now close that window. At this point, the proxy is now ready.

    "},{"location":"private-server.html#server-software","title":"Server software","text":"

    The server software directory will look like this:

    Copy the config.example.py file into a file named config.py and open it with your favorite text editor.

    Most of the config properties should already be self-explanatory. Below is guide for a few important parts.

    Remember that local IP address and port that you memorized not long ago? Well enter it here:

    HOST is your local IP address and PORT is the port you have choosen earlier.

    For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.

    Version Prefix 5.5.6 -> 5.6.1 /hanami/29

    For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. `5.6.1) if you want to restrict the server to (a) specific server.

    For this part:

    If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.

    If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.

    For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).

    Warning

    Running the server under HTTPS may cause issues with downloading packs/songs.

    Adjust the rest of the config file to your own likings. Save the file after finished.

    Now go to the database folder and it will look like this:

    Run the database_initialize.py file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db will be created if successful. After that, do all of these:

    At this point, the server software is now ready.

    "},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"

    Note

    Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work.

    iOS

    Open the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.

    Now on your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:

    Follow the steps listed in it to install the Charles certificate onto your device.

    Android

    Warning

    Android is finicky when it comes to proxy servers. Things may not work correctly or even at all.

    First and foremost, go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to both categories.

    On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root). You need to connect through the SOCKS5 proxy server.

    After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.

    Now your device is ready to connect to the private server!

    Note

    Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.

    "},{"location":"private-server.html#playing","title":"Playing","text":"

    Return to the root directory of your server and run the run.bat file. It may take a while to start depending on the amount of songs you added. If the server console shows this:

    Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!

    If you see something like this, it means the server is working as intended.

    At this point, you are basically done! Enjoy your new server!

    "},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"

    The game kept prompting to update a pack despite having already downloaded it.

    -> Check the songs folder to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.

    Cannot download any songs.

    -> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads property to true.

    Nothing works, even logging in.

    -> Check if the GAME_API_PREFIX variable in the config.py file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)

    "}]} \ No newline at end of file +var __index = {"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Welcome to Arcaea Modding Wiki!","text":"

    This is a (work-in-progress) centralized wiki for everything Arcaea modding related!

    Disclaimer

    Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.

    Looking for contributors!

    Arcaea Modding Wiki is looking for contributors! The wiki still needs polishing and improving such as better reference images and such. If you want to contribute, visit the GitHub repository!

    "},{"location":"custom-charts-packs.html","title":"Adding custom charts/packs","text":"

    !!! \"Work in progress\" This page is still being worked on, please come back later!

    "},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"

    Danger

    This guide is in the process of being rewritten. No precise ETAs will be given on the completion date. Please do not try to follow the old guide as it will NOT work.

    "},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"

    Before starting

    Make sure you have a copy of Arcaea APK/IPA file ready.

    "},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"

    Note

    Only for Arcaea 5.4.0+ and non-Chinese versions.

    Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs.

    Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).

    Tip

    Force quit the game AFTER the content bundle is downloaded (before file verification).

    After downloading it, steps to get the files will be different depending on your operating system

    Copy the dltemp folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.

    "},{"location":"private-server.html#patching-arcaea","title":"Patching Arcaea","text":"

    Note

    If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.

    "},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"

    Before starting

    You will need a software that allows applying .xdelta binary patches. DeltaPatcher is used in this guide.

    Warning

    Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.

    Download the appropriate patch for your version:

    iOS 5.6.1 (latest as of 5/7/2024)

    Download

    iOS 5.6.0

    Download

    Android 5.6.0

    Download

    Android 5.6.0c

    Download

    Now open DeltaPatcher, you will be presented with an interface like this:

    Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.

    After that, you are done!

    "},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"

    Before starting

    This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.

    About NOP

    1F 20 03 D5 is the hex equivalent of ARM64 nop instruction. Overwrite a hex address with it when you want to remove a specific instruction call.

    Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.

    After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)

    In the Strings sub-window, press ALT + T and search for cookieFiIe.txt until you found exactly this.

    Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)

    Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.

    Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):

    Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)

    Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.

    After that, make sure the entire code line is absent when re-decompiled.

    Now return to the Strings sub-window, and this time search for vtvtvt.

    xref it, and choose the first xref entry for iOS, or the one with @PAGE for Android.

    Android iOS

    Decompile it again, and scroll down a little bit until you see this part:

    Highlight this part, and NOP it like above:

    After that, apply the patches and you are done!

    After patching the executable, save the file and recompress the APK/IPA file. For Android, you must resign the APK file before installing it onto your device. You may now sideload it onto your device using ADB, AppSync Unified (not recommended due to potential crashes and issues.), AltStore (& friends) or TrollStore (recommended for supported devices.)

    "},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"

    For this section, you will need:

    Warning

    Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.

    First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev or by downloading the ZIP file of the dev branch.

    After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version), and with Python 3.6 or newer installed, run pip install -m requirements.txt.

    From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.

    "},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"

    Open Charles and you will be presented with an interface like this:

    Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill * for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:

    Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:

    Navigate to the Windows tab and tick all checkboxes:

    Close that window, and go to Help > Local IP Addresses. It will look something like this:

    Your local IP address will most likely be the first item in the list (in this case, since I am using Ethernet connection, it will be the first one.) Copy that IP address or memorize it.

    About local IP addresses

    This is your local IP address, meaning it can only be accessed by devices that are connected to the same network.

    You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:

    In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for ports like 8888 or 8889 and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:

    You may now close that window. At this point, the proxy is now ready.

    "},{"location":"private-server.html#server-software","title":"Server software","text":"

    The server software directory will look like this:

    Copy the config.example.py file into a file named config.py and open it with your favorite text editor.

    Most of the config properties should already be self-explanatory. Below is guide for a few important parts.

    Remember that local IP address and port that you memorized not long ago? Well enter it here:

    HOST is your local IP address and PORT is the port you have choosen earlier.

    For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.

    Version Prefix 5.5.6 -> 5.6.1 /hanami/29

    For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. `5.6.1) if you want to restrict the server to (a) specific server.

    For this part:

    If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.

    If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.

    For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).

    Warning

    Running the server under HTTPS may cause issues with downloading packs/songs.

    Adjust the rest of the config file to your own likings. Save the file after finished.

    Now go to the database folder and it will look like this:

    Run the database_initialize.py file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db will be created if successful. After that, do all of these:

    At this point, the server software is now ready.

    "},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"

    Note

    Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work.

    iOS

    Open the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.

    Now on your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:

    Follow the steps listed in it to install the Charles certificate onto your device.

    Android

    Warning

    Android is finicky when it comes to proxy servers. Things may not work correctly or even at all.

    First and foremost, go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to both categories.

    On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root). You need to connect through the SOCKS5 proxy server.

    After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.

    Now your device is ready to connect to the private server!

    Note

    Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.

    "},{"location":"private-server.html#playing","title":"Playing","text":"

    Return to the root directory of your server and run the run.bat file. It may take a while to start depending on the amount of songs you added. If the server console shows this:

    Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!

    If you see something like this, it means the server is working as intended.

    At this point, you are basically done! Enjoy your new server!

    "},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"

    The game kept prompting to update a pack despite having already downloaded it.

    -> Check the songs folder to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.

    Cannot download any songs.

    -> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads property to true.

    Nothing works, even logging in.

    -> Check if the GAME_API_PREFIX variable in the config.py file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)

    "}]} \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json index c42613b..a2a5aae 100755 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Welcome to Arcaea Modding Wiki!","text":"

    This is a (work-in-progress) centralized wiki for everything Arcaea modding related!

    Disclaimer

    Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.

    Looking for contributors!

    Arcaea Modding Wiki is looking for contributors! The wiki still needs many adjustments and improvements such as better reference images and such. If you want to contribute, visit the GitHub repository for instructions!

    "},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"

    Danger

    This page is still in the process of being finished. There may be unfinished or incorrect information.

    Before starting

    Make sure to have a copy of Arcaea APK/IPA file ready. For IPA file, make sure its decrypted as otherwise you will run into issues. Additionally, you will need a disassembler with support for ELF/Mach-O arm64 executable as well as pseudo-code decompilation for such architectures. IDA Pro is used here. The version used here is iOS 5.6.1.

    Tip

    To modify instructions, you will need to overwrite it hex address. Use armconverter to convert ARM instructions to hex address and vice-versa.

    The hex address for NOP instruction is 1F 20 03 D5.

    "},{"location":"offline-mod.html#removing-lock-icon","title":"Removing lock icon","text":"

    Info

    This will remove the lock icon on locked packs. This, however, will not make the packs themselves playable.

    Press SHIFT + F12, wait for the string list to be generated, then search for lock_icon. xref (cross-reference) it, then press F5, TAB or View > Open subviews > Generate pseudocode to decompile it. It should look like this:

    Focus on this part, highlight v82, then xref it.

    Make sure you xref the first entry.

    Highlight this function call, and double click onto it.

    Modify the highlighted parts, change it to 1.

    "},{"location":"offline-mod.html#removing-beyond-lock","title":"Removing beyond lock","text":"

    Info

    This will remove limits for Beyond (BYD) difficulty.

    Make sure you are in the IDA View sub-window. Press ALT + T or Search > Text, search for dl_, tick Find all occurrences then search. Wait for it to complete. It will look like this:

    Click onto the first entry on the list, you will see this sturcture. Scroll down a little bit and edit the CMP instruction. Change #3 to #0x2F.

    Press SHIFT + F12, then ALT + T or Search > Search, search for world_unlock. Make sure it is world_unlock, not world_unlocks. Xref it and pick the one with the highest address (in this case its the final one.)

    Continue scrolling down a little bit, then repeat the same step to this CMP instruction.

    Return to the Strings sub-window and search for You no longer have enough Fragments

    Xref it, scroll up a little bit until you see this and repeat the same steps as before.

    Return to the Strings sub-window and search for layouts/songselect/start.png, then xref it. Repeat the same step as before.

    "},{"location":"offline-mod.html#patching-scenecontrol-6-lanesfiltersetc","title":"Patching scenecontrol (6 lanes/filters/etc.)","text":"

    Info

    Make special effects in charts like those in Final Verdict to work properly.

    Make sure you are in the IDA View sub-window. Press ALT + I or Search > Immediate value, enter 264, tick Find all occurrences then search. Wait for it to complete. It will look like this, click on Insturction:

    Scroll up/down to find LDRB entries:

    Look into every single entries until you see any that has a CBZ instruction following or behind. The CBZ instruction should be NOP'ed. Do this to all entries. While doing so, press TAB, F5 or View > Open subviews > Generate pseudo-code until you find one with this sturcture (there is only one entry like this so once you have managed to find it you do not need to do this anymore.)

    In this part change 2 to 4 (image already modified this part).

    "},{"location":"offline-mod.html#patching-world-mode-songs","title":"Patching world mode songs","text":"

    Info

    Allow playing world mode songs.

    Press SHIFT + F12, search for This song is available by progressing through World Mode.. Xref the second one. Then press F5, TAB or View > Open sub-views > Generate pseudo-code. You will see something like this:

    Double click onto this function:

    After that, modify all return statement to return 1LL.

    "},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"

    Before starting

    Make sure you have a copy of Arcaea APK/IPA file ready.

    "},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"

    Note

    Only for Arcaea 5.4.0+ and non-Chinese versions.

    Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs.

    Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).

    Tip

    Force quit the game AFTER the content bundle is downloaded (before file verification).

    After downloading it, steps to get the files will be different depending on your operating system

    Copy the dltemp folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.

    "},{"location":"private-server.html#patching-arcaea","title":"Patching Arcaea","text":"

    Note

    If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.

    "},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"

    Before starting

    You will need a software that allows applying .xdelta binary patches. DeltaPatcher is used in this guide.

    Warning

    Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.

    Download the appropriate patch for your version:

    iOS 5.6.1 (latest as of 5/7/2024)

    Download

    iOS 5.6.0

    Download

    Android 5.6.0

    Download

    Android 5.6.0c

    Download

    Now open DeltaPatcher, you will be presented with an interface like this:

    Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.

    After that, you are done!

    "},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"

    Before starting

    This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.

    About NOP

    1F 20 03 D5 is the hex equivalent of ARM64 nop instruction. Overwrite a hex address with it when you want to remove a specific instruction call.

    Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.

    After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)

    In the Strings sub-window, press ALT + T and search for cookieFiIe.txt until you found exactly this.

    Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)

    Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.

    Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):

    Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)

    Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.

    After that, make sure the entire code line is absent when re-decompiled.

    Now return to the Strings sub-window, and this time search for vtvtvt.

    xref it, and choose the first xref entry for iOS, or the one with @PAGE for Android.

    Android iOS

    Decompile it again, and scroll down a little bit until you see this part:

    Highlight this part, and NOP it like above:

    After that, apply the patches and you are done!

    After patching the executable, save the file and recompress the APK/IPA file. For Android, you must resign the APK file before installing it onto your device. You may now sideload it onto your device using ADB, AppSync Unified (not recommended due to potential crashes and issues.), AltStore (& friends) or TrollStore (recommended for supported devices.)

    "},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"

    For this section, you will need:

    Warning

    Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.

    First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev or by downloading the ZIP file of the dev branch.

    After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version), and with Python 3.6 or newer installed, run pip install -m requirements.txt.

    From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.

    "},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"

    Open Charles and you will be presented with an interface like this:

    Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill * for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:

    Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:

    Navigate to the Windows tab and tick all checkboxes:

    Close that window, and go to Help > Local IP Addresses. It will look something like this:

    Your local IP address will most likely be the first item in the list (in this case, since I am using Ethernet connection, it will be the first one.) Copy that IP address or memorize it.

    About local IP addresses

    This is your local IP address, meaning it can only be accessed by devices that are connected to the same network.

    You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:

    In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for ports like 8888 or 8889 and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:

    You may now close that window. At this point, the proxy is now ready.

    "},{"location":"private-server.html#server-software","title":"Server software","text":"

    The server software directory will look like this:

    Copy the config.example.py file into a file named config.py and open it with your favorite text editor.

    Most of the config properties should already be self-explanatory. Below is guide for a few important parts.

    Remember that local IP address and port that you memorized not long ago? Well enter it here:

    HOST is your local IP address and PORT is the port you have choosen earlier.

    For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.

    Version Prefix 5.5.6 -> 5.6.1 /hanami/29

    For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. `5.6.1) if you want to restrict the server to (a) specific server.

    For this part:

    If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.

    If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.

    For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).

    Warning

    Running the server under HTTPS may cause issues with downloading packs/songs.

    Adjust the rest of the config file to your own likings. Save the file after finished.

    Now go to the database folder and it will look like this:

    Run the database_initialize.py file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db will be created if successful. After that, do all of these:

    At this point, the server software is now ready.

    "},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"

    Note

    Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work.

    iOS

    Open the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.

    Now on your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:

    Follow the steps listed in it to install the Charles certificate onto your device.

    Android

    Warning

    Android is finicky when it comes to proxy servers. Things may not work correctly or even at all.

    First and foremost, go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to both categories.

    On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root). You need to connect through the SOCKS5 proxy server.

    After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.

    Now your device is ready to connect to the private server!

    Note

    Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.

    "},{"location":"private-server.html#playing","title":"Playing","text":"

    Return to the root directory of your server and run the run.bat file. It may take a while to start depending on the amount of songs you added. If the server console shows this:

    Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!

    If you see something like this, it means the server is working as intended.

    At this point, you are basically done! Enjoy your new server!

    "},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"

    The game kept prompting to update a pack despite having already downloaded it.

    -> Check the songs folder to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.

    Cannot download any songs.

    -> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads property to true.

    Nothing works, even logging in.

    -> Check if the GAME_API_PREFIX variable in the config.py file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)

    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Welcome to Arcaea Modding Wiki!","text":"

    This is a (work-in-progress) centralized wiki for everything Arcaea modding related!

    Disclaimer

    Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.

    Looking for contributors!

    Arcaea Modding Wiki is looking for contributors! The wiki still needs polishing and improving such as better reference images and such. If you want to contribute, visit the GitHub repository!

    "},{"location":"custom-charts-packs.html","title":"Adding custom charts/packs","text":"

    !!! \"Work in progress\" This page is still being worked on, please come back later!

    "},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"

    Danger

    This guide is in the process of being rewritten. No precise ETAs will be given on the completion date. Please do not try to follow the old guide as it will NOT work.

    "},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"

    Before starting

    Make sure you have a copy of Arcaea APK/IPA file ready.

    "},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"

    Note

    Only for Arcaea 5.4.0+ and non-Chinese versions.

    Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs.

    Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).

    Tip

    Force quit the game AFTER the content bundle is downloaded (before file verification).

    After downloading it, steps to get the files will be different depending on your operating system

    Copy the dltemp folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.

    "},{"location":"private-server.html#patching-arcaea","title":"Patching Arcaea","text":"

    Note

    If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.

    "},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"

    Before starting

    You will need a software that allows applying .xdelta binary patches. DeltaPatcher is used in this guide.

    Warning

    Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.

    Download the appropriate patch for your version:

    iOS 5.6.1 (latest as of 5/7/2024)

    Download

    iOS 5.6.0

    Download

    Android 5.6.0

    Download

    Android 5.6.0c

    Download

    Now open DeltaPatcher, you will be presented with an interface like this:

    Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.

    After that, you are done!

    "},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"

    Before starting

    This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.

    About NOP

    1F 20 03 D5 is the hex equivalent of ARM64 nop instruction. Overwrite a hex address with it when you want to remove a specific instruction call.

    Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.

    After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)

    In the Strings sub-window, press ALT + T and search for cookieFiIe.txt until you found exactly this.

    Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)

    Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.

    Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):

    Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)

    Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.

    After that, make sure the entire code line is absent when re-decompiled.

    Now return to the Strings sub-window, and this time search for vtvtvt.

    xref it, and choose the first xref entry for iOS, or the one with @PAGE for Android.

    Android iOS

    Decompile it again, and scroll down a little bit until you see this part:

    Highlight this part, and NOP it like above:

    After that, apply the patches and you are done!

    After patching the executable, save the file and recompress the APK/IPA file. For Android, you must resign the APK file before installing it onto your device. You may now sideload it onto your device using ADB, AppSync Unified (not recommended due to potential crashes and issues.), AltStore (& friends) or TrollStore (recommended for supported devices.)

    "},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"

    For this section, you will need:

    Warning

    Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.

    First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev or by downloading the ZIP file of the dev branch.

    After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version), and with Python 3.6 or newer installed, run pip install -m requirements.txt.

    From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.

    "},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"

    Open Charles and you will be presented with an interface like this:

    Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill * for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:

    Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:

    Navigate to the Windows tab and tick all checkboxes:

    Close that window, and go to Help > Local IP Addresses. It will look something like this:

    Your local IP address will most likely be the first item in the list (in this case, since I am using Ethernet connection, it will be the first one.) Copy that IP address or memorize it.

    About local IP addresses

    This is your local IP address, meaning it can only be accessed by devices that are connected to the same network.

    You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:

    In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for ports like 8888 or 8889 and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:

    You may now close that window. At this point, the proxy is now ready.

    "},{"location":"private-server.html#server-software","title":"Server software","text":"

    The server software directory will look like this:

    Copy the config.example.py file into a file named config.py and open it with your favorite text editor.

    Most of the config properties should already be self-explanatory. Below is guide for a few important parts.

    Remember that local IP address and port that you memorized not long ago? Well enter it here:

    HOST is your local IP address and PORT is the port you have choosen earlier.

    For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.

    Version Prefix 5.5.6 -> 5.6.1 /hanami/29

    For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. `5.6.1) if you want to restrict the server to (a) specific server.

    For this part:

    If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.

    If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.

    For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).

    Warning

    Running the server under HTTPS may cause issues with downloading packs/songs.

    Adjust the rest of the config file to your own likings. Save the file after finished.

    Now go to the database folder and it will look like this:

    Run the database_initialize.py file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db will be created if successful. After that, do all of these:

    At this point, the server software is now ready.

    "},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"

    Note

    Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work.

    iOS

    Open the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.

    Now on your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:

    Follow the steps listed in it to install the Charles certificate onto your device.

    Android

    Warning

    Android is finicky when it comes to proxy servers. Things may not work correctly or even at all.

    First and foremost, go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to both categories.

    On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root). You need to connect through the SOCKS5 proxy server.

    After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.

    Now your device is ready to connect to the private server!

    Note

    Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.

    "},{"location":"private-server.html#playing","title":"Playing","text":"

    Return to the root directory of your server and run the run.bat file. It may take a while to start depending on the amount of songs you added. If the server console shows this:

    Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!

    If you see something like this, it means the server is working as intended.

    At this point, you are basically done! Enjoy your new server!

    "},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"

    The game kept prompting to update a pack despite having already downloaded it.

    -> Check the songs folder to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.

    Cannot download any songs.

    -> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads property to true.

    Nothing works, even logging in.

    -> Check if the GAME_API_PREFIX variable in the config.py file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)

    "}]} \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index b384c90..0464991 100755 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ