AndrewNohawk
General

Disney Galaxys Edge

TL;DR — Disney star wars games involve a bunch of scanning Aztec codes for items and challenges, I couldn’t figure out how to generate my own correctly so I took apart the APK and generated each one I found with its description and put all the barcodes on my GitHub page for this.

Recently, my girlfriend and I had the opportunity to go on a holiday to the Star Wars Disney Hotel.It was definitely an unforgettable experience. We had a ton of fun solving the challenges and unlocking rewards within the app as well as interacting with the crew to go down the various paths and storylines you picked (Jedi, New order, Rebels, etc). The entire thing is super immersive, from the rooms that have windows that show the galaxy to even when you are transported not being able to see the “real world”. We highly recommend checking it out if you’re a Star Wars fan!

One of the many challenges that we came across during our stay involved scanning barcodes that were placed in specific locations or had to be gotten from various people — we initially thought these were QR codes. However, after trying to scan them with a QR code reader, we realized that they were actually Aztec codes. Thanks to Jacob Soo and Tom Hegel for quickly pointing it out to me. An example of these aztec images we found:

As we scanned the codes, we noticed that a lot of them were in the format of XX_XX (the one above being JK_RS), where X represents a letter or a number. This piqued our curiosity and we started trying to generate our own codes in this format to see if we could unlock any special features or rewards within the Disney app. However, we quickly found out that a lot of the codes we generated were invalid.

To generate the codes I just used this simple python script which displayed them in the terminal and used a short delay so I could point the camera in the Disney Play app at them and have the rotate until one worked!

from aztec_code_generator import AztecCode
from itertools import product
import string
import time
import sys
# Generate all two letter combinations of the alphabet
# and store them in a list
alphabet = list(product(string.ascii_uppercase, repeat=2))
prefix = ""
if(len(sys.argv) > 1):
    prefix = sys.argv[1]
else:
    alphabet = list(product(string.ascii_uppercase, repeat=4))
    
numLoops = 0
for i in alphabet:
    # Generate Aztec Code
    if(len(i) == 2):
        code = prefix + "_"+ '' .join(i)
    else:
        # Join the first two characters of the alphabet with a dash and then the second two characters
        code = i[0] + i[1] + "_" + i[2] + i[3]
    print(code)
    aztec_code = AztecCode(code)
    aztec_code.print_fancy()
    if(numLoops % 10 == 0):
        time.sleep(0.2)
    numLoops += 1

We spent some time trying to figure out if there was any pattern or correlation between the codes that were accepted and those that were not. We tried analyzing the distribution of the first two and last two characters, but the results were random and didn’t yield any useful insights. Additionally while exploring the outpost at Disney we found barcodes that didnt match this format!

Frustrated, we decided to take a different approach. We used a tool called APKtool to decompile the Disney app and look at the underlying code. After some digging, we discovered a file called “starWarsGalaxysEdgeGame_92_installation-data.json” within the “assets/firestore-db” directory. This file contained a number of assets, including “barcodeData” which turned out to be the Aztec codes that we were trying to scan.

For example, here is an excerpt from the file:

"5mtTtAz9p9hec1QbAHzu": {
    "showInCastUI": false,
    "name": "KL_LM",
    "descriptionKey": "72057602627880074-installation-description-key",
    "isBeaconLocked": false,
    "dlr_detailViewKeyAltText": "",
    "dlr_thumbnailPath": "assets/articy/Partition(ee8e78bc-8c3c-40de-ad4b-300fbfa1e03d)/crate-label-poi(0FC4).jpg",
    "isSwgsScan": true,
    "premiumRewards": [],
    "wdw_detailViewKeyAltText": "",
    "firstTimeRewards": [
        {
            "itemId": "72057886095755057",
            "quantity": 1,
            "type": "Item"
        }
    ],
    "doesShowOnDisambig": false,
    "canUseWaypointOnly": false,
    "triggerableMission": "72057886095758455",
    "id": "72057602627880074",
    "doesAutoStartSwgsChat": true,
    "nameKey": "72057602627880074-installation-name-key",
    "images": [],
    "isEncrypted": false,
    "wdw_thumbnailAltText": "",
    "triggerableShows": [],
    "type": "ScanInstallation",
    "doesShowOnMap": false,
    "subsequentRewards": [],
    "dlr_thumbnailAltText": "",
    "nameKeyAlt": "",
    "barcodeData": "KL_LM"
},

These codes would unlock various items within the app. We also found that some codes were specifically designed for other unlocks, such as the Halcyon trip. Here is an example of one of those codes:

"yMlSLIs0pRTiMRusvnTG": {
    "descriptionKey": "72057602627880046-installation-description-key",
    "nameKey": "72057602627880046-installation-name-key",
    "canUseWaypointOnly": false,
    "premiumRewards": [],
    "name": "JK_RS",
    "nameKeyAlt": "",
    "dlr_detailViewKeyAltText": "",
    "images": [],
    "isSwgsScan": true,
    "showInCastUI": false,
    "type": "ScanInstallation",
    "doesShowOnDisambig": false,
    "dlr_thumbnailPath": "assets/articy/Partition(ee8e78bc-8c3c-40de-ad4b-300fbfa1e03d)/crate-label-poi(0FC4).jpg",
    "dlr_thumbnailAltText": "",
    "id": "72057602627880046",
    "doesAutoStartSwgsChat": false,
    "triggerableShows": [],
    "isEncrypted": false,
    "wdw_detailViewKeyAltText": "",
    "firstTimeRewards": [],
    "wdw_thumbnailAltText": "",
    "barcodeData": "JK_RS",
    "triggerableMission": "72057886095758455",
    "showMission": "Mission_Land_SmugglersRun_HalcyonTrip",
    "wdw_thumbnailPath": "",
    "isBeaconLocked": false,
    "doesShowOnMap": false
},

You can see that BarCode data is found a few times within the APK:

The final step was to parse all of these values out, lookup the description for it to get a complete list of all the scannable items:

0: CAST09 - Training Remote [Halcyon Cargo]
1: BC_ST - Ewok Disguise [Outfit]
2: AB_PQ - No immediate reward. -- likely part of challenge
3: AB_ST - No immediate reward. -- likely part of challenge
4: BC_TU - Batuu Sun Outfit [Outfit]
5: FAL13 - Stormtrooper Armor [Outfit]
6: JK_ST - No immediate reward. -- likely part of challenge
7: FG_RS - Gungan Personal Energy Shield [Weapon]
8: AB_OP - 7-PrG Proton Grenade [Weapon]
9: FG_QR - Condiments [Cargo]
10: FAL16 - DUM-series Pit droid, Class 2 Heads [Parts & Scraps]
11: FAL09 - Osteo Fragmenter [Parts & Scraps]
12: FAL12 - Droid Holoprojector [Parts & Scraps]
13: GI_QR - Plush Toys [Cargo]
14: FG_ST - Data Chip [Parts & Scraps]
15: CD_ST - Embo-style Outfit [Outfit]
16: GI_NO - Loth-cat Chow [Cargo]
17: GI_LM - A99 Aquata Breather [Cargo]
18: FAL15 - Imperial E-11 Blaster Rifle [Weapon]
19: FAL14 - Computer Probe Arm (R-unit) [Parts & Scraps]
20: CAST07 - Jedi Testing Viewscreen [Halcyon Cargo]
21: FAL10 - Kyber Crystals - Green [Parts & Scraps]
22: EF_TU - DL-44 Heavy Blaster Pistol [Weapon]
23: CD_LM - First Order Outfit [Outfit]
24: AB_LM - Imperial E-11 Blaster Rifle [Weapon]
25: AB_QR - Concussion Disc [Weapon]
26: BC_PQ - Mon Calamari Outfit [Outfit]
27: FG_TU - Gaming Kit [Cargo]
28: JK_QR - No immediate reward. -- likely part of challenge
29: KL_QR - Porg Toys [Halcyon Cargo]
30: DE_TU - DUM-series Pit droid, Class 2 Heads [Parts & Scraps]
31: DE_UV - Magnetic Field Condenser [Parts & Scraps]
32: FAL11 - Diatium Power Core [Parts & Scraps]
33: KL_OP - No immediate reward. -- likely part of challenge
34: CAST19 - Ship Shutdown Data [Program]
35: CAST02 - Coaxium Coordinates [Program]
36: EF_LM - Droid Holoprojector [Parts & Scraps]
37: IJ_RS - 7-PrG Proton Grenade [Weapon]
38: JK_MN - Food Ration Packs [Cargo]
39: CAST20 - Hyperspace Tracking Schematic [Program]
40: CD_TU - Ohnaka Transport Solutions Uniform [Outfit]
41: FAL01 - Imperial E-11 Blaster Rifle [Weapon]
42: FG_LM - MSE-6 Series "Mouse Droid" Casing [Parts & Scraps]
43: FAL30 - Loth-cat Chow [Cargo]
44: AB_UV - No immediate reward. -- likely part of challenge
45: KL_PQ - No immediate reward. -- likely part of challenge
46: AB_NO - Bowcaster [Weapon]
47: FAL07 - 7-PrG Proton Grenade [Weapon]
48: FAL18 - Data Chip [Parts & Scraps]
49: CAST14 - Cargo Anomalies [Program]
50: DE_QR - Kyber Crystals - Green [Parts & Scraps]
51: CAST15 - First Order Transmitter [Halcyon Cargo]
52: FAL20 - Magnetic Field Condenser [Parts & Scraps]
53: CAST11 - Halcyon [Vehicle]
54: JK_OP - No immediate reward. -- likely part of challenge
55: KL_NO - No immediate reward. -- likely part of challenge
56: FAL02 - NN-14 Blaster Pistol [Weapon]
57: CAST08 - Lost Holocron [Halcyon Cargo]
58: CAST06 - Autopilot Override Program [Program]
59: AB_TU - NN-14 Blaster Pistol [Weapon]
60: FAL17 - Security Enhanced Comlink [Parts & Scraps]
61: IJ_MN - Tracer Beacon [Parts & Scraps]
62: FAL21 - Bowcaster [Weapon]
63: FG_OP - Salvage Cleaning Kit [Cargo]
64: BC_LM - Resistance Flight Uniform [Outfit]
65: EF_QR - Diatium Power Core [Parts & Scraps]
66: AB_RS - T-47 Airspeeder Harpoon Gun [Weapon]
67: GI_MN - Spice [Cargo]
68: FAL23 - Neuro-Saav TE4.4 Field Quadnoculars [Cargo]
69: FAL06 - Z-6 Jetpack [Weapon]
70: FG_NO - Food Ration Packs [Cargo]
71: IJ_ST - No immediate reward. -- likely part of challenge
72: FAL03 - Kyber Crystals - Blue [Parts & Scraps]
73: BC_MN - Resistance Ground Forces Outfit [Outfit]
74: IJ_UV - Coded Communicator [Cargo]
75: KL_ST - No immediate reward. -- likely part of challenge
76: BC_OP - Death Star Gunner Uniform [Outfit]
77: KL_LM - Jedi Crusader Necklace [Halcyon Cargo]
78: JK_TU - Hayananeya Data [Program]
79: CAST18 - Ports of Call Anomalies [Ports Of Call]
80: CAST17 - All-Kit [Halcyon Cargo]
81: JK_LM - Medical Equipment Bags [Cargo]
82: KL_TU - No immediate reward. -- likely part of challenge
83: EF_PQ - Osteo Fragmenter [Parts & Scraps]
84: CD_QR - Marauder Armor [Outfit]
85: JK_NO - Tank Containing Bacta Fluid [Cargo]
86: EF_MN - Tracer Beacon [Parts & Scraps]
87: GI_OP - Medical Equipment Bags [Cargo]
88: BC_RS - Batuu Rain Outfit [Outfit]
89: JK_UV - Tool Demagnetizer [Halcyon Cargo]
90: DE_MN - Vaporator Blades [Parts & Scraps]
91: EF_ST - Security Enhanced Comlink [Parts & Scraps]
92: FAL24 - Spice [Cargo]
93: JK_RS - No immediate reward. -- likely part of challenge
94: EF_UV - F-11D Blaster Rifle [Weapon]
95: IJ_NO - No immediate reward. -- likely part of challenge
96: FAL05 - Resistance Flight Uniform [Outfit]
97: EF_RS - Hang Glider [Parts & Scraps]
98: FAL25 - RA-7 Personal Servant Droid Arm [Parts & Scraps]
99: CAST03 - Droid Unbolting Program [Program]
100: FAL19 - Tracer Beacon [Parts & Scraps]
101: IJ_PQ - Glie-44 Blaster Pistol [Weapon]
102: CAST10 - First Order Credentials [Program]
103: FAL22 - A99 Aquata Breather [Cargo]
104: KL_RS - All-Kit [Halcyon Cargo]
105: GI_PQ - Star Destroyer Capacitor Bearing [Parts & Scraps]
106: CAST12 - Decoy Stone [Halcyon Cargo]
107: DE_PQ - Kyber Crystals - Blue [Parts & Scraps]
108: FAL04 - Carbon Chisel [Parts & Scraps]
109: FAL29 - Medical Equipment Bags [Cargo]
110: KL_UV - No immediate reward. -- likely part of challenge
111: IJ_TU - Neuro-Saav TE4.4 Field Quadnoculars [Cargo]
112: EF_OP - Carbon Chisel [Parts & Scraps]
113: DE_NO - AT-AT Targeting Computer [Parts & Scraps]
114: CAST05 - Datatapes [Halcyon Cargo]
115: CAST01 - Coaxium [Halcyon Cargo]
116: FAL28 - Jawa Outfit [Outfit]
117: CAST16 - Personnel Anomalies [Program]
118: DE_LM - RA-7 Personal Servant Droid Arm [Parts & Scraps]
119: FG_PQ - Sewing Thread [Cargo]
120: CD_RS - Leather Armor [Outfit]
121: JK_PQ - Engineering Tools [Halcyon Cargo]
122: DE_ST - Kyber Crystals - Purple [Parts & Scraps]
123: EF_NO - Computer Probe Arm (R-unit) [Parts & Scraps]
124: BC_NO - Stormtrooper Armor [Outfit]
125: IJ_QR - Pyro Denton Explosive [Weapon]
126: FG_MN - First Order Binders [Parts & Scraps]
127: FAL26 - Plush Toys [Cargo]
128: FG_UV - Neuro-Saav TE4.4 Field Quadnoculars [Cargo]
129: DE_OP - Jawa Outfit [Outfit]
130: DE_RS - Kyber Crystals - Red [Parts & Scraps]
131: IJ_LM - Concussion Disc [Weapon]
132: CAST13 - Hayananeya Schematic [Program]
133: FAL08 - Concussion Disc [Weapon]
134: FAL27 - AT-AT Targeting Computer [Parts & Scraps]
135: AB_MN - Z-6 Jetpack [Weapon]
136: IJ_OP - Batuu Sun Outfit [Outfit]
137: CAST04 - Resistance Coordinates [Program]

Lastly I used the script on my GitHub to generate a single image of all the barcodes with their description from the output of the above:

Comments

  1. […] we realized that they were actually Aztec codes.You can see the results in the blog post here. Items are in the GitHub here.Stop breadboarding and soldering – start making immediately! […]

Leave a Reply to Reverse engineering the codes at Disney Galaxy’s Edge #Disney #ReverseEngineering @AndrewMohawk « Adafruit Industries – Makers, hackers, artists, designers and engineers! Cancel reply

Your email address will not be published. Required fields are marked *