Python Lire swf dofus retro [Resolue]

Inscrit
24 Novembre 2019
Messages
7
Reactions
1
#1
Bonjour tout le monde je suis entrain de faire un bot mitm j'ai réussi la connecter mais la je suis bloquer pour le décryptage des map et je voudrais savoir quel bibliothèque vous me conseiller pour lire les swf car la j'utilise yaswfp mais il a du mal avez vous autre chose a me conseiller merci pour vos reponce
 
Inscrit
24 Novembre 2019
Messages
7
Reactions
1
#4
j'ai regarde mais ton idée est pas trop mal mais pour faire un serveur moi c'est pour en faire un bot
 
Inscrit
7 Octobre 2019
Messages
18
Reactions
5
#5
Hello, moi j'utilise yaswfp, et j'ai pas de soucis avec.
tu veux dire quoi quand tu dis "il a du mal ?"
 
Inscrit
24 Novembre 2019
Messages
7
Reactions
1
#6
quand il ouvre le fichier swf les ligne :

id = 6;
width = 15;
height = 17;

au lieu de recupere le 15 ,17 et 6 il recupere comme info id , width et height du coup les valeur ne sont pas bonne
 
Inscrit
7 Octobre 2019
Messages
18
Reactions
5
#7
tu peux peut être nous partager ton code ?
ça sera peut être plus simple
 
Inscrit
24 Novembre 2019
Messages
7
Reactions
1
#8
voila le code :


from map.contants import *
import yaswfp.swfparser as swfparser
from map.cell import Cell
from urllib.parse import unquote


class Map():


def __init__(self, interface):
self.interface = interface
self.binairemap = []
self.carreau = []
self.mapswidth = 0
self.sun = []
self.entity = []
self.resource = []
self.resource = []

def data(self, mapID, map_date, decryption_key):
self.mapID = mapID
self.map_date =map_date
self.decryption_key = decryption_key
#self.entityself.entity = None
MAP_DIR = (PATH+"/data/maps")
self.path = '{}/{}_{}{}.swf'.format(MAP_DIR, mapID, map_date, 'X' if decryption_key else '')
# Ajoutez l'instruction print ici
print("Ouverture du fichier SWF :", self.path)
pos = MAPID_TO_POS[mapID]
self.x = pos[0]
self.y = pos[1]
swf = swfparser.parsefile(self.path)
raw_map_data = swf.tags[1].Actions[0].ConstantPool[10]
self.width = int(swf.tags[1].Actions[3].Integer)
self.height = (int(swf.tags[1].Actions[4].Integer) - 1) * 2
data = self.decrypt_mapdata(raw_map_data, decryption_key)
raw_cells = [data[i:i+10] for i in range(0, len(data), 10)]
self.cells = [Cell(raw_cells,i) for i in range(len(raw_cells))]


def decrypt_mapdata(self, raw_data, raw_key):
key = unquote(''.join([chr(int(raw_key[i:i+2], 16)) for i in range(0, len(raw_key), 2)]))
checksum = int(HEX_CHARS[sum(map(lambda x: ord(x) & 0xf, key)) & 0xf], 16) * 2
key_length = len(key)
data = ''
for i in range(0, len(raw_data), 2):
data += chr(int(raw_data[i:i+2], 16) ^ ord(key[(int(i / 2) + checksum) % key_length]))
return data


je sais quele probleme vien de la ligne :
self.width = int(swf.tags[1].Actions[3].Integer)
self.height = (int(swf.tags[1].Actions[4].Integer) - 1) * 2


je pense que c'est le Actions qui doit pas etre bon mais j'arrive pas a trouver :/
 
Dernière édition:
Inscrit
24 Novembre 2019
Messages
7
Reactions
1
#9
c'est good j'ai reussi a exporter les info il falait que j'utilise l'action ActionConstantPool
 
Haut Bas