Skip to content

Latest commit

 

History

History
268 lines (208 loc) · 8.71 KB

File metadata and controls

268 lines (208 loc) · 8.71 KB

Gacha World 1.3.6 - Analisi Completa

Architettura

  • APK Adobe AIR / Flash, tutta la logica e' in GachaWorld.swf (ActionScript 3)
  • Il DEX contiene solo runtime AIR, Google Play Services, AdMob

Salvataggio Locale

Meccanismo: Flash SharedObject chiamato saveslot1

Percorso file sul dispositivo (richiede root):

/data/data/air.com.lunime.gachaworld/app_#air.com.lunime.gachaworld/Local Store/#SharedObjects/saveslot1.sol

Sistema di Trasferimento

NON e' un link. E' un sistema username + password via server PHP di Lunime.

Flusso

  1. Dispositivo A: registra account (nome + password) -> dati caricati sul server
  2. Dispositivo B: inserisci stessi nome + password -> dati scaricati dal server
  3. Limite: 20 trasferimenti massimi

Endpoint Server

URL Funzione
https://lunime.com/worldgachadata/loginworldx.php Download save (login)
https://lunime.com/worldgachadata/registerworldreplacex.php Upload save (register)
https://lunime.com/worldgachadata/getfaction1.php Dati fazione
https://lunime.com/worldgachadata/registerfaction.php Registra fazione
https://lunime.com/worldgachadata/redeem.php Riscatta codici promo
https://gachabaka.com/data/worldgetchat.php Chat
https://gachabaka.com/data/worldsubmitchat.php Invia chat
https://gachabaka.com/data/worldgetleaderboard.php Classifica
https://gachabaka.com/data/worldsubmitleaderboard.php Invia punteggio

Stato Server (testato Febbraio 2026)

  • loginworldx.php: ONLINE, risponde correttamente
  • registerworldreplacex.php: ONLINE, accetta richieste (200 OK)
  • redeem.php: ERRORE 500
  • getfaction1.php: ERRORE 500

Protocollo HTTP

  • Metodo: POST
  • Content-Type: application/x-www-form-urlencoded
  • Formato risposta: URLEncoded (chiave=valore&chiave2=valore2)
  • IMPORTANTE: usare HTTPS (HTTP fa redirect 301 e perde il body POST)
  • IMPORTANTE: register e login devono avvenire sulla stessa connessione TCP (keep-alive)

Codici systemResult (risposta login)

Codice Significato
1 Successo (dati trovati e password corretta)
2 Account non trovato / dati vuoti
3 Parametri mancanti / errore connessione

Comportamento Osservato

Quando si fa register e poi login sulla stessa connessione HTTPS:

  • Register ritorna body vuoto (200 OK)
  • Login ritorna systemResult=2 con tutti i campi (ma valori a 0)

Quando si fa login su una nuova connessione:

  • Login ritorna systemResult=3 (parametri mancanti)

Questo suggerisce che il database potrebbe essere vuoto/resettato, ma il codice PHP funziona ancora.

Campi Trasferiti (x-prefixed)

Questi sono i campi POST inviati al register e ricevuti dal login:

Account

  • xaccountx - username
  • xpassx - password
  • xnamex - nome visualizzato

Aspetto Personaggio

  • xgender, xskincolor, xhair, xeyes, xmouth
  • xhaircolor, xeyescolor
  • xweapon, xarmor, xcape, xhat, xshades, xwallpaper

Progressi

  • xlevelnum - livello
  • xxp - esperienza
  • xgold - oro/monete
  • xtutorial - tutorial completato
  • xworldmap - mappa mondo

Gacha

  • xtotalpulls3 a xtotalpulls6 - pull totali per rarita'

Statistiche

  • xwavescleared, xtotalxpobtained, xtotalgemsobtained
  • xtotalgoldobtained, xtotaltickets, xquestscompleted

Arena

  • xarenaxp, xarenawins, xarenaloses
  • xarena1 a xarena10

Stats Vecchie

  • xoldstats, xoldvitx, xoldstrx, xoldcritx, xoldsumx, xolddodgex

Stato Gioco

  • xgamemap, xspawnpos, xfirsttime
  • xmutemusic, xmutesfx, xclosenews, xsquad, xraritypage

Elementi

  • xelehp1 a xelehp6 - HP elementali
  • xeleatk1 a xeleatk6 - ATK elementali

Highscores

  • xhighscore1 a xhighscore10

Achievement

  • xachievement1 a xachievement20

Torre

  • xtower1 a xtower10

Eventi

  • xevent1 a xevent30

Boss

  • xboss1 a xboss20
  • xbosshp1 a xbosshp20

Unita'

  • xunit1 a xunit30 - slot unita'
  • xc1 a xc90 - personaggi posseduti
  • xo1 a xo90 - flags personaggi
  • xlv1 a xlv90 - livelli personaggi
  • xxp1 a xxp90 - XP personaggi

Equipaggiamento

  • xhat1 a xhat90 - cappelli
  • xshades1 a xshades90 - occhiali
  • xarmor1 a xarmor50 - armature
  • xweapon1 a xweapon50 - armi
  • xcape1 a xcape50 - mantelli

Campi Salvataggio Locale (SharedObject saveslot1)

Stessi campi ma SENZA il prefisso x: accountx, passx, namex, gender, skincolor, hair, eyes, mouth, haircolor, eyescolor, weapon, armor, cape, hat, shades, wallpaper, levelnum, gold, tutorial, worldmap, story, totalpulls3-totalpulls6, wavescleared, totalxpobtained, totalgemsobtained, totalgoldobtained, totaltickets, questscompleted, arenaxp, arenawins, arenaloses, arena1-arena10, oldstats, oldvitx, oldstrx, oldcritx, oldsumx, olddodgex, gamemap, spawnpos, firsttime, mutemusic, mutesfx, closenews, squad, raritypage, elehp1-elehp6, eleatk1-eleatk6, highscore1-highscore10, achievement1-achievement20, tower1-tower10, event1-event30, boss1-boss30, bosshp1-bosshp30, unit1-unit30, c1-c100, o1-o100, lv10-lv100, xp10-xp100, hat1-hat93, weapon1-weapon50, cape1-cape50, critchance, critchance1-critchance6, defaultparty, critical, summonpower, dodgerate, bonusx, transferonce, cheaterx, bossgems, bossgems1-bossgems30, droprate1-droprate6, towerlvl, towerbattle, towerscreen, towerfloor

Campi Extra (solo locale, non trasferiti)

  • story - progresso storia
  • cheaterx - flag anti-cheat
  • transferonce - contatore trasferimenti usati
  • bosspick - boss selezionato
  • critchance, critical, summonpower, dodgerate - stats battaglia
  • defaultparty - party di default
  • bonusx - bonus
  • droprate1-droprate6 - drop rate elementali
  • towerlvl, towerbattle, towerscreen, towerfloor - stato torre

Come Funziona il Codice ActionScript

// Registrazione (upload)
phpVars = new URLVariables()
phpFileRequest = new URLRequest("https://lunime.com/worldgachadata/registerworldreplacex.php")
phpLoader = new URLLoader()

phpVars.xaccountx = saveslot1.data.accountx
phpVars.xpassx = saveslot1.data.passx
phpVars.xnamex = saveslot1.data.namex
// ... tutti i campi ...
phpFileRequest.method = URLRequestMethod.POST
phpFileRequest.data = phpVars
phpLoader.load(phpFileRequest)

// Login (download)
// Stessa struttura ma con URL loginworldx.php
// La risposta viene parsata e i valori scritti nel SharedObject locale

Esempio Richiesta Python

import http.client, ssl, urllib.parse

ctx = ssl.create_default_context()
conn = http.client.HTTPSConnection('lunime.com', timeout=30, context=ctx)

# REGISTER (upload)
fields = {
    'xaccountx': 'mio_account',
    'xpassx': 'mia_password',
    'xnamex': 'MioNome',
    'xlevelnum': '100',
    'xgold': '999999',
    # ... tutti gli altri campi ...
}
body = urllib.parse.urlencode(fields)
conn.request('POST', '/worldgachadata/registerworldreplacex.php',
             body=body,
             headers={'Content-Type': 'application/x-www-form-urlencoded',
                      'Content-Length': str(len(body))})
resp = conn.getresponse()
resp.read()

# LOGIN (download) - stessa connessione!
login_body = urllib.parse.urlencode({
    'xaccountx': 'mio_account',
    'xpassx': 'mia_password'
})
conn.request('POST', '/worldgachadata/loginworldx.php',
             body=login_body,
             headers={'Content-Type': 'application/x-www-form-urlencoded',
                      'Content-Length': str(len(login_body))})
resp2 = conn.getresponse()
data = resp2.read().decode()

# Parsare la risposta
params = urllib.parse.parse_qs(data, keep_blank_values=True)
print(params['systemResult'])  # ['1'] = successo
print(params['xgold'])         # ['999999']
conn.close()

Trasferimento Manuale (senza server, richiede root)

# Da dispositivo A
adb shell su -c "cat '/data/data/air.com.lunime.gachaworld/app_#air.com.lunime.gachaworld/Local Store/#SharedObjects/saveslot1.sol'" > saveslot1.sol

# Su dispositivo B
adb push saveslot1.sol /sdcard/
adb shell su -c "cp /sdcard/saveslot1.sol '/data/data/air.com.lunime.gachaworld/app_#air.com.lunime.gachaworld/Local Store/#SharedObjects/'"
adb shell su -c "chmod 666 '/data/data/air.com.lunime.gachaworld/app_#air.com.lunime.gachaworld/Local Store/#SharedObjects/saveslot1.sol'"

Easter Egg

Codice promozionale trovato nel gioco: 147,693,112 (gemme e monete)

Note Tecniche

  • Google Play Games App ID: 936144228846
  • CloudFront CDN: dh8vjmvwgc27o.cloudfront.net
  • Fazioni: Team Duck, Team Salt, Team Whale
  • SWF versione 42, compresso con zlib, ~93MB decompresso