Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.IO
- Imports System.Text
- Module Main
- Private Const AppVer As String = "0.5b"
- Private ReadOnly OPS() As String = {
- "NOP", _
- "ASSIGN", _
- "ADD", _
- "SUB", _
- "MUL", _
- "DIV", _
- "MOD", _
- "TO_NUMBER", _
- "CSIGN", _
- "NOT", _
- "INC", _
- "DEC", _
- "POST_INC", _
- "POST_DEC", _
- "CMPEQ", _
- "CMPNEQ", _
- "CMPSEQ", _
- "CMPSNEQ", _
- "CMPLT", _
- "CMPLE", _
- "CMPGE", _
- "CMPGT", _
- "INSTANCEOF", _
- "IN", _
- "TYPEOF", _
- "BIT_AND", _
- "BIT_XOR", _
- "BIT_OR", _
- "BIT_NOT", _
- "LSHIFT", _
- "S_RSHIFT", _
- "U_RSHIFT", _
- "COPY", _
- "SWAP", _
- "REMOVE", _
- "PUSH_UNDEFINED", _
- "PUSH_NULL", _
- "PUSH_BOOL", _
- "PUSH_INT", _
- "PUSH_FLOAT", _
- "PUSH_STRING", _
- "PUSH_OBJECT", _
- "PUSH_FUNC", _
- "PUSH_ARRAY", _
- "PUSH_THIS", _
- "PUSH_LOCAL", _
- "PUSH_GLOBAL", _
- "GETATTR", _
- "GETATTR_KEEPOBJ", _
- "SETATTR", _
- "DELATTR", _
- "APPEND_ATTR", _
- "GETITEM", _
- "GETITEM_KEEPOBJ", _
- "SETITEM", _
- "DELITEM", _
- "APPEND_ITEM", _
- "JUMP", _
- "JUMPT", _
- "JUMPF", _
- "CALL_FUNC", _
- "CALL_METHOD", _
- "CALL_CONSTRUCTOR", _
- "RET", _
- "Throw", _
- "TRYBLK_IN", _
- "TRYBLK_OUT", _
- "CATCH_FINALLYBLK_IN", _
- "CATCH_FINALLYBLK_OUT", _
- "HALT", _
- "DEBUG_FILE", _
- "DEBUG_LINE", _
- "GETITEM_KEEPOBJNAME", _
- "PUSH_VECTOR", _
- "GET_VECTOR_ELEMENT", _
- "GET_VECTOR_ELEMENT_KEEPVECTOR", _
- "ASSGN_VECTOR_ELEMENT", _
- "SETATTR_VECTOR_ELEMENT", _
- "SETITEM_VECTOR_ELEMENT"}
- Private ReadOnly _MAGIC() As Byte = New Byte() {86, 83, 77, 88}
- Private VarLevel As Integer = 0
- Private Variables As New List(Of Var)
- Private CrntFileStream As FileStream
- Private TYPE As String
- Private VERSION As String
- Private HEADER As String
- Private Decomped As Boolean
- Private ARG_SCRPJS As Boolean
- Private ARG_HDRTXT As Boolean
- Private ARG_OPSTXT As Boolean
- Private ARG_STRTXT As Boolean
- Private ARG_ATTTXT As Boolean
- Private ARG_GLBTXT As Boolean
- Private ARG_HDRBIN As Boolean
- Private ARG_OPSBIN As Boolean
- Private ARG_STRBIN As Boolean
- Private ARG_ATTBIN As Boolean
- Private ARG_GLBBIN As Boolean
- Private ARG_SOURCE As String
- Private ARG_DESTIN As String
- Private ARG_OUTHDR As Boolean
- Private ARG_HLTOUT As Boolean
- Private OPCODESInfo(1) As Integer
- Private STRINGSInfo(1) As Integer
- Private ATTRIBSInfo(1) As Integer
- Private GLOBALSInfo(1) As Integer
- Private HEADERByte(51) As Byte
- Private OPCODESByte() As Byte
- Private STRINGSByte() As Byte
- Private ATTRIBSByte() As Byte
- Private GLOBALSByte() As Byte
- Private OPCODES() As OPcode
- Private STRINGS() As String
- Private ATTRIBS() As String
- Private GLOBALS() As String
- Private Structure Var
- Dim _Value As String
- Dim _Lvl As Integer
- Public ReadOnly Property Value() As String
- Get
- Return _Value
- End Get
- End Property
- Public ReadOnly Property Level() As String
- Get
- Return _Lvl
- End Get
- End Property
- Public Sub New(ByVal Name As String, ByVal Lvl As Integer)
- _Value = Name
- _Lvl = Lvl
- End Sub
- End Structure
- Private Structure OPcode
- Dim ACTIVE As Boolean
- Dim OPNBR As Integer
- Dim OPNAME As String
- Dim ARG As Byte
- Dim UNK As Byte
- Dim VAR As Byte
- Dim VAL() As Byte
- Dim CODE As String
- Dim PRECODE As String
- Dim PROCODE As String
- Dim DONE As Boolean
- Public Sub New(ByVal Bytes() As Byte)
- ACTIVE = True
- DONE = False
- OPNBR = Bytes2Int({0, 0, 0, Bytes(0)})
- OPNAME = OPS(OPNBR)
- ARG = Bytes(1)
- UNK = Bytes(2)
- VAR = Bytes(3)
- VAL = {Bytes(4), Bytes(5), Bytes(6), Bytes(7)}
- PRECODE = ""
- CODE = ""
- PROCODE = ""
- End Sub
- Public Sub Resolve(ByVal Line As Integer)
- Select Case OPNBR
- Case 0 'NOP
- Case 1 'ASSIGN
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- If AddVariable(text(1)) Then
- CODE = text(1) & " = " & text(0)
- Else
- CODE = "var " & text(1) & " = " & text(0)
- End If
- 'DONE = True
- Case 2 'ADD
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " + " & text(0)
- 'DONE = True
- Case 3 'SUB
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " - " & text(0)
- 'DONE = True
- Case 4 'MUL
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " * " & text(0)
- 'DONE = True
- Case 5 'DIV
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " / " & text(0)
- 'DONE = True
- Case 6 'MOD
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " % " & text(0)
- 'DONE = True
- Case 7 'TO_NUMBER
- Case 8 'CSIGN
- For num7 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num7).ACTIVE Then
- CODE = "-" + OPCODES(num7).CODE
- OPCODES(num7).ACTIVE = False
- Exit For
- End If
- Next
- 'DONE = True
- Case 9 'NOT
- Case 10 'INC
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- OPCODES(i).ACTIVE = False
- CODE = "++" & OPCODES(i).CODE
- Exit For
- End If
- Next
- Case 11 'DEC
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- OPCODES(i).ACTIVE = False
- CODE = "--" & OPCODES(i).CODE
- Exit For
- End If
- Next
- Case 12 'POST_INC
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- OPCODES(i).ACTIVE = False
- CODE = OPCODES(i).CODE & "++"
- Exit For
- End If
- Next
- Case 13 'POST_DEC
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- OPCODES(i).ACTIVE = False
- CODE = OPCODES(i).CODE & "--"
- Exit For
- End If
- Next
- Case 14 'CMPEQ
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " == " & text(0)
- 'DONE = True
- Case 15 'CMPNEQ
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " != " & text(0)
- 'DONE = True
- Case 16 'CMPSEQ
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " === " & text(0)
- 'DONE = True
- Case 17 'CMPSNEQ
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " !== " & text(0)
- 'DONE = True
- Case 18 'CMPLT
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " < " & text(0)
- 'DONE = True
- Case 19 'CMPLE
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " <= " & text(0)
- 'DONE = True
- Case 20 'CMPGE
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " >= " & text(0)
- 'DONE = True
- Case 21 'CMPGT
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & " > " & text(0)
- 'DONE = True
- Case 22 'INSTANCEOF
- Case 23 'IN
- Case 24 'TYPEOF
- Case 25 'BIT_AND
- Case 26 'BIT_XOR
- Case 27 'BIT_OR
- Case 28 'BIT_NOT
- Case 29 'LSHIFT
- Case 30 'S_RSHIFT
- Case 31 'U_RSHIFT
- Case 32 'COPY
- Case 33 'SWAP
- Case 34 'REMOVE
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- OPCODES(i).ACTIVE = False
- CODE = OPCODES(i).CODE & ";"
- Exit For
- End If
- Next
- DONE = True
- ACTIVE = False
- Case 35 'PUSH_UNDEFINED
- Dim num30 As Integer = Line - 1
- While num30 >= 0 AndAlso OPCODES(num30).OPNBR <> 42
- If OPCODES(num30).OPNBR = 34 Then
- 'OPCODES(num30).ACTIVE = False
- CODE = OPCODES(num30).CODE + vbCrLf + CODE
- End If
- num30 -= 1
- End While
- CODE = CODE.Trim
- 'DONE = True
- Case 36 'PUSH_NULL
- CODE = "null"
- 'DONE = True
- Case 37 'PUSH_BOOL
- If VAL(3) = 0 Then CODE = "false" Else CODE = "true"
- 'DONE = True
- Case 38 'PUSH_INT
- CODE = Bytes2Int(VAL)
- 'DONE = True
- Case 39 'PUSH_FLOAT
- CODE = Bytes2Sng(VAL).ToString("0.0###########").Replace(",", ".")
- 'DONE = True
- Case 40 'PUSH_STRING
- CODE = """" & STRINGS(Bytes2Int(VAL)) & """"
- 'DONE = True
- Case 41 'PUSH_OBJECT
- Case 42 'PUSH_FUNC
- CODE = "function(){}"
- ACTIVE = False
- Case 43 'PUSH_ARRAY
- CODE = "[]"
- Case 44 'PUSH_THIS
- Case 45 'PUSH_LOCAL
- CODE = "localVar_" & Bytes2Int(VAL)
- 'DONE = True
- Case 46 'PUSH_GLOBAL
- CODE = GLOBALS(Bytes2Int(VAL))
- 'DONE = True
- Case 47 'GETATTR
- For num32 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num32).ACTIVE Then
- CODE = OPCODES(num32).CODE + "." + ATTRIBS(Bytes2Int(VAL))
- OPCODES(num32).ACTIVE = False
- Exit For
- End If
- Next
- ACTIVE = True
- 'DONE = True
- Case 48 'GETATTR_KEEPOBJ
- For num33 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num33).ACTIVE Then
- CODE = OPCODES(num33).CODE + "." + ATTRIBS(Bytes2Int(VAL))
- Exit For
- End If
- Next
- 'DONE = True
- Case 49 'SETATTR
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) & "." & ATTRIBS(Bytes2Int(VAL)) & " = " & text(0)
- 'DONE = True
- Case 50 'DELATTR
- Case 51 'APPEND_ATTR
- Case 52 'GETITEM
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- OPCODES(i).ACTIVE = False
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) + "[" + text(0) + "]"
- 'DONE = True
- Case 53 'GETITEM_KEEPOBJ
- Dim num As Integer = 0
- Dim text(1) As String
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE Then
- text(num) = OPCODES(i).CODE
- num += 1
- If num = 2 Then Exit For
- End If
- Next
- CODE = text(1) + "[" + text(0) + "]"
- 'DONE = True
- Case 54 'SETITEM 'Cnp
- Dim num38 As Integer = 0
- Dim text31 As String = ""
- Dim text32 As String = ""
- Dim text33 As String = ""
- For num39 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num39).ACTIVE Then
- num38 += 1
- If num38 = 1 Then
- text31 = OPCODES(num39).CODE
- OPCODES(num39).ACTIVE = False
- Else
- If num38 = 2 Then
- text32 = OPCODES(num39).CODE
- OPCODES(num39).ACTIVE = False
- Else
- If num38 = 3 Then
- text33 = OPCODES(num39).CODE
- OPCODES(num39).ACTIVE = False
- Exit For
- End If
- End If
- End If
- End If
- Next
- Me.CODE = text33 & "[" & text32 & "] = " & text31
- 'Me.DONE = True
- Case 55 'DELITEM
- Case 56 'APPEND_ITEM
- Dim elementIndex As Integer = Line - 1
- Dim element As String = OPCODES(elementIndex).CODE
- OPCODES(elementIndex).ACTIVE = False
- For i = Line - 1 To 0 Step -1
- If OPCODES(i).ACTIVE AndAlso OPCODES(i).OPNBR = 43 Then
- Dim openArray As String = OPCODES(i).CODE.Substring(0, OPCODES(i).CODE.Length - 1)
- If openArray.EndsWith("[") Then
- openArray &= element & "]"
- Else
- openArray &= ", " & element & "]"
- End If
- CODE = openArray
- OPCODES(i).CODE = openArray
- Exit For
- End If
- Next
- ACTIVE = False
- Case 57 'JUMP 'Cnp
- Me.CODE = "GoTo 0x" + Bytes2Int(VAL).ToString("X4")
- Me.ACTIVE = False
- Me.DONE = True
- Case 58 'JUMPT 'Cnp
- For num42 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num42).ACTIVE Then
- If OPCODES(num42).CODE.StartsWith("(") _
- AndAlso OPCODES(num42).CODE.EndsWith(")") Then
- Me.CODE = "if (!" + OPCODES(num42).CODE + ")" & vbCrLf & "{"
- Else
- Me.CODE = "if (!(" + OPCODES(num42).CODE + "))" & vbCrLf & "{"
- End If
- OPCODES(num42).ACTIVE = False
- Exit For
- End If
- Next
- Me.DONE = True
- Case 59 'JUMPF 'Cnp
- For num41 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num41).ACTIVE Then
- Dim closing As Integer = Bytes2Int(VAL)
- If OPCODES(num41).CODE.StartsWith("(") AndAlso OPCODES(num41).CODE.EndsWith(")") Then
- CODE = "if " + OPCODES(num41).CODE & vbCrLf & "{"
- OPCODES(num41).ACTIVE = False
- For i = closing To Line Step -1
- If OPCODES(i).ACTIVE AndAlso OPCODES(i).OPNBR = 34 Then
- Dim closing2 As Integer = Bytes2Int(OPCODES(closing - 1).VAL)
- If OPCODES(closing - 1).OPNBR = 57 Then
- OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "} else {"
- For y = closing2 To Line Step -1
- If OPCODES(y).ACTIVE AndAlso OPCODES(y).OPNBR = 34 Then
- OPCODES(y).PROCODE = OPCODES(y).PROCODE & vbCrLf & "}"
- Exit For
- End If
- Next
- Exit For
- Else
- OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "}"
- Exit For
- End If
- End If
- Next
- Exit For
- Else
- CODE = "if (" + OPCODES(num41).CODE + ")" & vbCrLf & "{"
- OPCODES(num41).ACTIVE = False
- For i = closing To Line Step -1
- If OPCODES(i).ACTIVE AndAlso OPCODES(i).OPNBR = 34 Then
- Dim closing2 As Integer = Bytes2Int(OPCODES(closing - 1).VAL)
- If OPCODES(closing - 1).OPNBR = 57 Then
- OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "} else {"
- For y = closing2 To Line Step -1
- If OPCODES(y).ACTIVE AndAlso OPCODES(y).OPNBR = 34 Then
- OPCODES(y).PROCODE = OPCODES(y).PROCODE & vbCrLf & "}"
- Exit For
- End If
- Next
- Exit For
- Else
- OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "}"
- Exit For
- End If
- End If
- Next
- Exit For
- End If
- End If
- Next
- VarLevel += 1
- Me.DONE = True
- Case 60 'CALL_FUNC 'Cnp
- For num43 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num43).ACTIVE Then
- Me.CODE = OPCODES(num43).CODE + "()"
- OPCODES(num43).ACTIVE = False
- Exit For
- End If
- Next
- Me.DONE = True
- Case 61 'CALL_METHOD 'Cnp
- Dim array As String() = New String(Bytes2Int(VAL)) {}
- Dim num44 As Integer = array.Length - 1
- For num45 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num45).ACTIVE Then
- array(num44) = OPCODES(num45).CODE
- OPCODES(num45).ACTIVE = False
- num44 -= 1
- If num44 = -1 Then
- Exit For
- End If
- End If
- Next
- Select Case array.Length
- Case 1
- Me.CODE = array(0) + "()"
- Case 2
- Me.CODE = array(0) + "(" + array(1) + ")"
- Me.DONE = True
- Case Else
- Me.CODE = array(0) + "(" + array(1)
- Dim array2 As String() = array
- Dim arg_19FA_0 As String() = array2
- Dim num46 As Integer = array.Length - 1
- arg_19FA_0(num46) = array2(num46) + ")"
- Dim arg_1A04_0 As Integer = 2
- Dim num47 As Integer = array.Length - 1
- For num48 As Integer = arg_1A04_0 To num47
- Me.CODE = Me.CODE + ", " + array(num48)
- Next
- End Select
- 'DONE = True
- Case 62 'CALL_CONSTRUCTOR 'Cnp
- Dim array3 As String() = New String(Bytes2Int(VAL)) {}
- Dim num49 As Integer = array3.Length - 1
- For num50 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num50).ACTIVE Then
- array3(num49) = OPCODES(num50).CODE
- OPCODES(num50).ACTIVE = False
- num49 -= 1
- If num49 = -1 Then
- Exit For
- End If
- End If
- Next
- Select Case array3.Length
- Case 1
- Me.CODE = "new " + array3(0) + "()"
- Case 2
- Me.CODE = "new " & array3(0) & "(" & array3(1) & ")"
- 'Me.DONE = True
- Case Else
- Me.CODE = "new " + array3(0) + "(" + array3(1)
- Dim array2 As String() = array3
- Dim arg_1B70_0 As String() = array2
- Dim num46 As Integer = array3.Length - 1
- arg_1B70_0(num46) = array2(num46) + ")"
- Dim arg_1B7A_0 As Integer = 2
- Dim num51 As Integer = array3.Length - 1
- For num52 As Integer = arg_1B7A_0 To num51
- Me.CODE = Me.CODE + ", " + array3(num52)
- Next
- End Select
- 'CODE = CODE.Replace(";", ";" & vbCrLf)
- 'Me.DONE = True
- Case 63 'RET
- For num54 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num54).OPNBR = 42 Then
- Exit For
- Else
- OPCODES(num54).ACTIVE = False
- OPCODES(num54).DONE = False
- End If
- Next
- CODE = "function()" & vbCrLf & "{" & vbCrLf & OPCODES(Line - 1).CODE & vbCrLf & "}"
- 'Me.DONE = True
- Case 64 'THROW
- Case 65 'TRYBLK_IN 'Cnp
- Me.CODE = "try {"
- Me.DONE = True
- Case 66 'TRYBLK_OUT 'Cnp
- Me.CODE = "}"
- Me.DONE = True
- Case 67 'CATCH_FINALLYBLK_IN 'Cnp
- Me.CODE = "catch(exception) {"
- Me.DONE = True
- Case 68 'CATCH_FINALLYBLK_OUT 'Cnp
- Me.CODE = "}"
- Me.DONE = True
- Case 69 'HALT
- CODE = "/* Decompiled by JSXviewer " & AppVer & " */"
- DONE = True
- Case 70 'DEBUG_FILE
- Case 71 'DEBUG_LINE
- Case 72 'GETITEM_KEEPOBJNAME
- Case 73 'PUSH_VECTOR 'Cnp
- Dim num55 As Integer = 0
- Dim text34 As String = ""
- Dim Value = Bytes2Int(VAL)
- Me.CODE = "<"
- For num56 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num56).ACTIVE Then
- num55 += 1
- If num55 = 1 Then
- text34 = OPCODES(num56).CODE
- Else
- text34 = OPCODES(num56).CODE + ", " + text34
- End If
- OPCODES(num56).ACTIVE = False
- If CSng(num55) >= Value Then
- Exit For
- End If
- End If
- Next
- Me.CODE = Me.CODE + text34.Trim(",") + ">"
- 'Me.DONE = True
- Case 74 'GET_VECTOR_ELEMENT
- For num57 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num57).ACTIVE Then
- Me.CODE = OPCODES(num57).CODE & "->" & Bytes2Int(VAL).ToString
- OPCODES(num57).ACTIVE = False
- Exit For
- End If
- Next
- 'Me.DONE = True
- Case 75 'GET_VECTOR_ELEMENT_KEEPVECTOR
- For num57 As Integer = Line - 1 To 0 Step -1
- If OPCODES(num57).ACTIVE Then
- Me.CODE = OPCODES(num57).CODE & "->" & Bytes2Int(VAL).ToString
- 'OPCODES(num57).ACTIVE = False
- Exit For
- End If
- Next
- 'Me.DONE = True
- Case 76 'ASSGN_VECTOR_ELEMENT
- Case 77 'SETATTR_VECTOR_ELEMENT
- Dim top As String = OPCODES(Line - 2).CODE
- OPCODES(Line - 2).ACTIVE = False
- Dim bottom As String = OPCODES(Line - 1).CODE
- OPCODES(Line - 1).ACTIVE = False
- Dim index As Integer = Bytes2Int(VAL)
- CODE = top & "." & ATTRIBS(index) & "->" & VAR & " = " & bottom
- Case 78 'SETITEM_VECTOR_ELEMENT 'Cnp
- Dim num58 As Integer = 0
- Dim text35 As String = ""
- Dim text36 As String = ""
- For num59 As Integer = Line - 1 To 0 Step -1
- num58 += 1
- If num58 = 1 Then
- text35 = OPCODES(num59).CODE
- OPCODES(num59).ACTIVE = False
- Else
- If num58 = 2 Then
- text36 = OPCODES(num59).CODE
- OPCODES(num59).ACTIVE = False
- Exit For
- End If
- End If
- Next
- Me.CODE = text36 & "." & ATTRIBS(Bytes2Int(VAL)) & "->" & VAR & " = " & text35
- 'Me.DONE = True
- End Select
- Dim cnt As Integer = 0
- For Each ch As Char In PROCODE
- If ch = "}" Then cnt += 1
- Next
- If cnt > 0 Then
- For i = 1 To cnt
- RemoveLevel()
- Next
- End If
- End Sub
- End Structure
- Public Function AddVariable(ByVal Name) As Boolean
- If Variables.Count > 0 Then
- For i = 0 To Variables.Count - 1
- If Variables(i).Value = Name Then Return True
- Next
- End If
- Variables.Add(New Var(Name, VarLevel))
- Return False
- End Function
- Public Sub RemoveLevel()
- If Variables.Count > 0 Then
- For i = Variables.Count - 1 To 0 Step -1
- If Variables(i).Level = VarLevel Then Variables.RemoveAt(i)
- Next
- End If
- If VarLevel > 0 Then VarLevel -= 1
- End Sub
- Sub Main()
- Console.Clear()
- Console.WriteLine(vbCrLf & " JSXviewer " & AppVer & " by TizzyT with help from Sandungas")
- 'Dim Args() As String = {"2bc", "C:\Users\Thien\Desktop\local_vars\local_vars.jsx"}
- Dim Args() As String = My.Application.CommandLineArgs.ToArray
- If Args.Length > 1 Then
- For Each arg As Char In Args(0)
- Select Case arg.ToString.ToLower
- Case "0" : ARG_SCRPJS = True
- Case "1" : ARG_HDRTXT = True
- Case "2" : ARG_OPSTXT = True
- Case "3" : ARG_STRTXT = True
- Case "4" : ARG_ATTTXT = True
- Case "5" : ARG_GLBTXT = True
- Case "6" : ARG_HDRBIN = True
- Case "7" : ARG_OPSBIN = True
- Case "8" : ARG_STRBIN = True
- Case "9" : ARG_ATTBIN = True
- Case "a" : ARG_GLBBIN = True
- Case "b" : ARG_OUTHDR = True
- Case "c" : ARG_HLTOUT = True
- End Select
- Next
- If Args(1).Contains(":") Then ARG_SOURCE = Args(1) _
- Else ARG_SOURCE = Environment.CurrentDirectory & "\" & Args(1)
- If Args.Length = 3 Then
- If Args(2).Contains(":") Then ARG_DESTIN = Args(2).Trim("\") & "\" _
- Else ARG_DESTIN = Environment.CurrentDirectory & "\" & Args(2).Trim("\") & "\"
- ElseIf Args.Length = 2 Then
- ARG_DESTIN = Path.GetDirectoryName(ARG_SOURCE) & "\"
- End If
- Select Case ProcessJSX(Args(1))
- Case -1 : Console.WriteLine(vbCrLf & " Unknown Error")
- Case 0
- If ARG_OUTHDR OrElse ARG_HDRTXT Then
- HEADER = vbCrLf & " TYPE: " & TYPE & vbCrLf & _
- " VRSN: " & VERSION & vbCrLf & _
- " HEX DEC" & vbCrLf & _
- " OPCODE Offset: " & HexDecOut(OPCODESInfo(0)) & vbCrLf & _
- " Length: " & HexDecOut(OPCODESInfo(1)) & vbCrLf & _
- " Items: " & HexDecOut(OPCODES.Length) & vbCrLf & vbCrLf & _
- " STRING Offset: " & HexDecOut(STRINGSInfo(0)) & vbCrLf & _
- " Length: " & HexDecOut(STRINGSInfo(1)) & vbCrLf & _
- " Items: " & HexDecOut(STRINGS.Length) & vbCrLf & vbCrLf & _
- " ATTRIB Offset: " & HexDecOut(ATTRIBSInfo(0)) & vbCrLf & _
- " Length: " & HexDecOut(ATTRIBSInfo(1)) & vbCrLf & _
- " Items: " & HexDecOut(ATTRIBS.Length) & vbCrLf & vbCrLf & _
- " GLOBAL Offset: " & HexDecOut(GLOBALSInfo(0)) & vbCrLf & _
- " Length: " & HexDecOut(GLOBALSInfo(1)) & vbCrLf & _
- " Items: " & HexDecOut(GLOBALS.Length)
- End If
- If ARG_HDRTXT Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllText(ARG_DESTIN & "Header.txt", HEADER)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_OPSTXT OrElse ARG_SCRPJS Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- For i = 0 To OPCODES.Length - 1
- OPCODES(i).Resolve(i)
- Next
- Decomped = True
- Dim OPStable As New StringBuilder
- OPStable.AppendLine(" Line || OP Name | " & _
- "OP# | ARG | UNK | VAR | VAL | Resolve ")
- OPStable.AppendLine("".PadRight(92, "="))
- For i = 0 To OPCODES.Length - 1
- OPStable.AppendLine(" 0x" & i.ToString("X4") & " || " & _
- OPCODES(i).OPNAME.PadRight(29, " ") & " | 0x" & _
- OPCODES(i).OPNBR.ToString("X2") & " | 0x" & _
- OPCODES(i).ARG.ToString("X2") & " | 0x" & _
- OPCODES(i).UNK.ToString("X2") & " | 0x" & _
- OPCODES(i).VAR.ToString("X2") & " | 0x" & _
- BitConverter.ToString(OPCODES(i).VAL).Replace("-", "") & _
- " | " & ResolveFormater(OPCODES(i).PRECODE & OPCODES(i).CODE & OPCODES(i).PROCODE))
- OPStable.AppendLine("".PadRight(92, "-"))
- Next
- If ARG_OPSTXT Then IO.File.WriteAllText(ARG_DESTIN & "OPcode.txt", OPStable.ToString)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_STRTXT Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllLines(ARG_DESTIN & "String.txt", STRINGS)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_ATTTXT Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllLines(ARG_DESTIN & "Attrib.txt", ATTRIBS)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_GLBTXT Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllLines(ARG_DESTIN & "Global.txt", GLOBALS)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_SCRPJS Then
- If Not Decomped Then
- For i = 0 To OPCODES.Length - 1
- OPCODES(i).Resolve(i)
- Next
- End If
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- Dim CODES As New List(Of String)
- For i = 0 To OPCODES.Length - 1
- If OPCODES(i).DONE Then
- Select Case OPCODES(i).OPNBR
- Case 57 'Omit jump opcode
- Case Else
- Dim parts() As String = _
- (OPCODES(i).PRECODE & OPCODES(i).CODE & OPCODES(i).PROCODE). _
- Split(New String() {vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
- For Each part As String In parts
- CODES.Add(part)
- Next
- End Select
- End If
- Next
- IO.File.WriteAllText(ARG_DESTIN & "Script.js", Indentor(CODES))
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_HDRBIN Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllBytes(ARG_DESTIN & "Header.bin", HEADERByte)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_OPSBIN Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllBytes(ARG_DESTIN & "OPcode.bin", OPCODESByte)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_STRBIN Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllBytes(ARG_DESTIN & "String.bin", STRINGSByte)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_ATTBIN Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllBytes(ARG_DESTIN & "Attrib.bin", ATTRIBSByte)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_GLBBIN Then
- Try
- If Not IO.Directory.Exists(ARG_DESTIN) Then _
- IO.Directory.CreateDirectory(ARG_DESTIN)
- IO.File.WriteAllBytes(ARG_DESTIN & "Global.bin", GLOBALSByte)
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- End Try
- End If
- If ARG_OUTHDR Then
- Console.WriteLine(HEADER.ToString)
- If ARG_HLTOUT Then Console.ReadKey()
- End If
- Case 1 : Console.WriteLine(vbCrLf & " Wrong Extension")
- Case 2 : Console.WriteLine(vbCrLf & " Failed to open file for reading")
- Case 3 : Console.WriteLine(vbCrLf & " File magic mismatch")
- Case 4 : Console.WriteLine(vbCrLf & " File might be currupt")
- End Select
- Else
- Console.WriteLine(vbCrLf & _
- " Usage: JSXviewer.exe [Options] <Input File> <Output Path>" & vbCrLf & _
- vbCrLf & _
- " Options: 0 Saves script.js" & vbCrLf & _
- " 1 Saves Header.txt" & vbCrLf & _
- " 2 Saves OPcode.txt" & vbCrLf & _
- " 3 Saves String.txt" & vbCrLf & _
- " 4 Saves Attrib.txt" & vbCrLf & _
- " 5 Saves Global.txt" & vbCrLf & _
- " 6 Saves Header.bin" & vbCrLf & _
- " 7 Saves OPcode.bin" & vbCrLf & _
- " 8 Saves String.bin" & vbCrLf & _
- " 9 Saves Attrib.bin" & vbCrLf & _
- " a Saves Global.bin" & vbCrLf & _
- " b Show header info" & vbCrLf & _
- " c Wait at complete" & vbCrLf & _
- vbCrLf & _
- " Examples: JSXviewer.exe 02bc C:\example\test.jsx" & vbCrLf & _
- " JSXviewer.exe 02bc C:\example\test.jsx C:\example\")
- Console.ReadKey()
- End If
- End Sub
- Public Function Indentor(ByVal input As List(Of String)) As String
- Dim lvl As Integer = 0
- Dim StrArray(input.Count - 1) As String
- Indentor = ""
- For i = 0 To StrArray.Length - 1
- Dim crntEval As String = input(i).Trim
- If crntEval.StartsWith("}") Then lvl -= 1
- crntEval = "".PadLeft(lvl, vbTab) & crntEval
- If crntEval.EndsWith("{") Then lvl += 1
- Indentor &= crntEval & vbCrLf
- Next
- End Function
- Public Function ResolveFormater(ByVal input As String) As String
- Dim meh As New StringBuilder
- Dim lines() As String = input.Split(vbCrLf)
- meh.AppendLine(vbTab & lines(0))
- If lines.Length > 1 Then
- For i = 1 To lines.Length - 1
- meh.AppendLine(" ||" & _
- " " & _
- "| " & _
- "| " & _
- "| " & _
- "| " & _
- "| " & _
- "| " & lines(i).Trim)
- Next
- End If
- Return meh.ToString.Trim
- End Function
- Public Function ProcessJSX(ByVal InputPath As String) As Integer
- If InputPath.ToLower.EndsWith(".jsx") Then
- Try
- CrntFileStream = New FileStream(InputPath, FileMode.Open, FileAccess.Read, FileShare.Read)
- Catch ex As Exception
- Return 2 'Cannot read
- End Try
- Dim Temp(3) As Byte, offset As Integer, length As Integer
- CrntFileStream.Read(Temp, 0, 4)
- If Temp.SequenceEqual(_MAGIC) Then TYPE = "VSMX" Else Return 3
- CrntFileStream.Read(Temp, 0, 4)
- If Temp.SequenceEqual({0, 0, 1, 0}) Then : VERSION = "PSP (1.0)"
- ElseIf Temp.SequenceEqual({0, 0, 2, 0}) Then : VERSION = "PS3 (2.0)"
- Else : VERSION = "UNKN [" & BitConverter.ToString(Temp).Replace("-", " ") & "]"
- End If
- CrntFileStream.Position = 0
- CrntFileStream.Read(HEADERByte, 0, 52)
- CrntFileStream.Position = 8
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- offset = Bytes2Int(Temp)
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- length = Bytes2Int(Temp)
- OPCODESInfo = {offset, length}
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- offset = Bytes2Int(Temp)
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- length = Bytes2Int(Temp)
- CrntFileStream.Position += 4
- STRINGSInfo = {offset, length}
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- offset = Bytes2Int(Temp)
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- length = Bytes2Int(Temp)
- CrntFileStream.Position += 4
- ATTRIBSInfo = {offset, length}
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- offset = Bytes2Int(Temp)
- CrntFileStream.Read(Temp, 0, Temp.Length)
- Array.Reverse(Temp)
- length = Bytes2Int(Temp)
- CrntFileStream.Position += 4
- GLOBALSInfo = {offset, length}
- CrntFileStream.Position = OPCODESInfo(0)
- OPCODESByte = New Byte(OPCODESInfo(1) - 1) {}
- CrntFileStream.Read(OPCODESByte, 0, OPCODESInfo(1))
- If OPCODESByte.Length Mod 8 > 0 Then Return 4 'Opcodes offset mismatch
- CrntFileStream.Position = STRINGSInfo(0)
- STRINGSByte = New Byte(STRINGSInfo(1) - 1) {}
- CrntFileStream.Read(STRINGSByte, 0, STRINGSInfo(1))
- CrntFileStream.Position = ATTRIBSInfo(0)
- ATTRIBSByte = New Byte(ATTRIBSInfo(1) - 1) {}
- CrntFileStream.Read(ATTRIBSByte, 0, ATTRIBSInfo(1))
- CrntFileStream.Position = GLOBALSInfo(0)
- GLOBALSByte = New Byte(GLOBALSInfo(1) - 1) {}
- CrntFileStream.Read(GLOBALSByte, 0, GLOBALSInfo(1))
- CrntFileStream.Close()
- CrntFileStream.Dispose()
- offset = 0
- OPCODES = New OPcode(OPCODESByte.Length / 8 - 1) {}
- For i = 0 To OPCODESByte.Length - 1 Step 8
- OPCODES(offset) = New OPcode({OPCODESByte(i), _
- OPCODESByte(i + 1), _
- OPCODESByte(i + 2), _
- OPCODESByte(i + 3), _
- OPCODESByte(i + 7), _
- OPCODESByte(i + 6), _
- OPCODESByte(i + 5), _
- OPCODESByte(i + 4)})
- offset += 1
- Next
- InputPath = Text.Encoding.UTF8.GetString(STRINGSByte)
- STRINGS = InputPath.Split(New String() {vbNullChar & vbNullChar & vbNullChar}, _
- StringSplitOptions.RemoveEmptyEntries)
- For i = 0 To STRINGS.Length - 1
- STRINGS(i) = STRINGS(i).Replace(vbNullChar, "")
- Next
- InputPath = Text.Encoding.UTF8.GetString(ATTRIBSByte)
- ATTRIBS = InputPath.Split(New String() {vbNullChar & vbNullChar & vbNullChar}, _
- StringSplitOptions.RemoveEmptyEntries)
- For i = 0 To ATTRIBS.Length - 1
- ATTRIBS(i) = ATTRIBS(i).Replace(vbNullChar, "")
- Next
- InputPath = Text.Encoding.UTF8.GetString(GLOBALSByte)
- GLOBALS = InputPath.Split(New String() {vbNullChar}, _
- StringSplitOptions.RemoveEmptyEntries)
- Return 0 'Success
- Else
- Return 1 'Wrong Extension
- End If
- Return -1 'Unknown Error
- End Function
- Public Function Bytes2Int(bytes As Byte()) As Integer
- Return BitConverter.ToInt32({bytes(3), bytes(2), bytes(1), bytes(0)}, 0)
- End Function
- Public Function Bytes2Sng(bytes As Byte()) As Single
- Return BitConverter.ToSingle({bytes(3), bytes(2), bytes(1), bytes(0)}, 0)
- End Function
- Private Function HexDecOut(ByVal Value As Integer) As String
- Dim bytes() As Byte = BitConverter.GetBytes(Value)
- Array.Reverse(bytes)
- HexDecOut = BitConverter.ToString(bytes).Replace("-", " ") & " "
- HexDecOut &= Value.ToString.PadLeft(10, " ")
- End Function
- End Module
Advertisement
Add Comment
Please, Sign In to add comment