Salut amigos,
Ne trouvant pas de bonne lib python pour décompiler du swf, j'ai fait un petit tool en recyclant le code de swfUnpacker de Maxou pour décompiler les maps et stocker les mapdata dans des fichiers txt que je pourrai exploiter en python.
Du coup j'ai dû me forcer à apprendre le vb.net sur le tas et j'arrive pas à débugger un truc tout con :
![img]()
J'ai vu que la version de la dll log4net dans le dossier est pas la même, 1.2.10 mais impossible de trouver la dll 1.2.11 sur le net et quand j'installe avec NuGet et cherche la dll dans son dossier, il m'indique quand même la version 1.2.10 ce couillon…
Voilà sorry j'ai pas trop l'habitude de manipuler ces dll, je suis sensé faire quoi ? Modifier les sources de SwfDotNet, changer la version référencée et recréer une dll ? Y a pas un truc plus simple à faire ? Merci d'avance si une âme charitable vient m'aider, d'ici là je continue de chercher mais ça me fait perdre un temps de zinzin vu que je peux pas avancer sur mon projet tant que j'ai pas réussi à décompiler ces fichues maps...
Imports SwfDotNet.IO
Imports SwfDotNet.IO.Tags
Imports SwfDotNet.IO.ByteCode
Imports SwfDotNet.IO.ByteCode.Actions
Imports System
Module Program
Sub Main()
Dim file As New IO.StreamReader("C:\Users\geralt\MapData\swf_file_names.txt")
Dim name As String
Do
name = file.ReadLine
If name IsNot Nothing Then
UncompressSwf(name)
End If
Loop Until name Is Nothing
file.Close()
End Sub
Public Function Gettok(ByVal GettokText As String, ByVal GettokStr As String, ByVal GettokNum As Integer) As String
Dim GettokTmp As String() = Nothing
GettokNum = GettokNum - 1
GettokTmp = GettokText.Split(GettokStr)
Gettok = GettokTmp(GettokNum)
End Function
Public Sub UncompressSwf(ByVal file_name As String)
Dim swfReader As New SwfReader("C:\Users\geralt\Desktop\MapData\maps\" & file_name)
Dim swf As Swf = swfReader.ReadSwf()
Dim tagsEnu As IEnumerator = swf.Tags.GetEnumerator()
While tagsEnu.MoveNext()
Dim tag As BaseTag = DirectCast(tagsEnu.Current, BaseTag)
If tag.ActionRecCount <> 0 Then
Dim sb As String = ""
Dim enum2 As IEnumerator = tag.GetEnumerator()
While enum2.MoveNext()
Dim dc As New Decompiler(swf.Version)
Dim actions As ArrayList = dc.Decompile(DirectCast(enum2.Current, Byte()))
For Each obj As BaseAction In actions
sb &= obj.ToString() & vbCrLf
Next
End While
Dim map_data As String = Gettok(sb.ToString, "'", 30)
Dim map_id As String = Gettok(Gettok(sb.ToString, "push", 14), " ", 2)
Dim map_x As String = Gettok(Gettok(sb.ToString, "push", 16), " ", 2)
Dim map_y As String = Gettok(Gettok(sb.ToString, "push", 18), " ", 2)
Dim efileName As String = "maps/" & Gettok(file_name, ".", 1) & ".txt"
Console.WriteLine(efileName)
Dim writer As New IO.StreamWriter(efileName)
writer.Write(map_id & "|" & map_data & "|" & map_x & "|" & map_y)
writer.Close()
End If
End While
End Sub
End Module