' =================================================================
' =================================================================
' => Autor: Pink
' => Base64_E_D
' => Fecha : 04|10|2013
' => Uso: cadena=Base64_E_D("Hola Mundo")
' => True For Encode, False For Decode: Default True
' => All Credits Shellcode's owners (I Do not know them)
' =================================================================
' =================================================================
Option Explicit
Private Declare Function CallWindowProcW Lib "USER32" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Function Base64_E_D(cadena As String, Optional E_D As Boolean = True) As String
Dim datos() As Byte
Dim datosalida() As Byte
Dim B_B64() As Byte
Dim Str_OP As String
Dim i As Long
Dim LineBreak As Long
Dim SalidaSize As Long
If E_D = True Then
LineBreak = 76
LineBreak = Int(LineBreak / 4) * 4
SalidaSize = Int(Len(cadena) * 4 / 3)
SalidaSize = SalidaSize + Int(SalidaSize / LineBreak) * 2 + 4
Debug.Print SalidaSize
datos() = StrConv(cadena, vbFromUnicode)
ReDim datosalida(SalidaSize - 1)
Str_OP = "5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A06"
Str_OP = Str_OP & "88470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000"
Else
Str_OP = "C81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D7"
Str_OP = Str_OP & "5014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"
ReDim datosalida(Len(cadena) - 1)
datos() = StrConv(cadena, vbFromUnicode)
End If
ReDim B_B64((Len(Str_OP) / 2) - 1)
For i = 1 To Len(Str_OP) - 1 Step 2
B_B64(Int(i / 2)) = CByte("&h" & Mid(Str_OP, i, 2))
Next
If E_D = True Then
CallWindowProcW VarPtr(B_B64(0)), VarPtr(datos(0)), Len(cadena), VarPtr(datosalida(0)), LineBreak
Else
CallWindowProcW VarPtr(B_B64(0)), VarPtr(datos(0)), VarPtr(datosalida(0)), 0, 0
End If
Base64_E_D = StrConv(datosalida(), vbUnicode)
End Function
saludos