Aucune session selectionnee
hook intercepte $.post / fetch / XHR et tous les messages NUI.
cartographier liste champs et boutons du DOM courant.
Le reste passe par eval en portee globale.
—
Envoie POST https://<ressource>/<callback> depuis la NUI
compromise. La requête atteint le Lua client de la victime
(RegisterNUICallback), pas le serveur : c'est le handler client qui
décide de relayer ou non. Un callback ne peut donc rien demander que le client
n'ait déjà le droit de demander — c'est la porte que le §7 demande d'auditer.
Ces entrées sont des sondes, pas des effets. Quatre issues possibles, et
seule la première est garantie :
(a) effet client seul — closeBank, zoomCamera,
handsUp, RemoveNuiFocus : l'écran ou l'input de la
victime change, sans serveur. (b) le client demande, le serveur tranche —
si le Lua relaie sans revalider, ça passe ; sinon rien. (c) effet différé —
le callback pose un état, un événement ultérieur le lit. (d) rien — handler
qui ignore le payload, ou callback inexistant (404).
(b), (c) et (d) sont indiscernables depuis le dump : les modules Lua sont chiffrés
escrow. D'où les notes formulées comme des questions, pas comme des conséquences.
Affichage plein écran — NUI de la victime
La superposition est posée dans le document NUI de la victime, pas dans le jeu : le joueur continue de bouger, mais tout son écran est couvert et rien dans l'interface ne peut la fermer. Stop la retire sans recharger la page. Sans session sélectionnée et sans la case cochée, rien ne part.
Ce que le CEF accepte. image, gif et
video chargent depuis n'importe quel hôte : la NUI n'a pas de CSP
qui les bloque. youtube passe par une iframe
youtube.com/embed/ et exige un identifiant de 11 caractères — une URL
de playlist ou de chaîne n'en contient pas. html est une iframe
sandbox sans allow-same-origin : elle s'affiche mais ne
peut pas lire la NUI qui la contient.
Cibles
Préférer getScript. Il pose un <script> classique : ni CORS
ni type MIME vérifiés, donc il marche même derrière un tunnel qui réécrit les en-têtes.
import() charge un module ES et ne pardonne rien — un MIME ou un CORS qui
ne colle pas donne un rejet de promesse invisible, sans aucune erreur console.
Le prendre seulement si le champ est réellement borné à 50.
Longueurs
Mesuré en jeu : un champ de nom qui accepte 59 caractères accepte le vecteur
img en entier. Les 50 par défaut étaient une hypothèse trop
conservatrice — ajuste ici selon ce que ta base accepte vraiment.
Sortie
Trigger Lua — paramètres
Les modules Lua du core sont chiffrés escrow : le nom réel de l'évènement
n'est pas lisible dans le dump. x:card:show est une hypothèse —
ajuste-la, ou passe par la saisie manuelle qui n'en dépend pas.