Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как выполнить Shellcode функциями API Добавлено: 14.06.03 15:57  

Автор вопроса:  Сергей Юдин
Имеется exe файл размещенный в памяти как String или массив.
Как его запустить на выполнение.
Запись файла на диск и запуск с помощью Shell или ShellExecute
не возможны по условиям безопасности.
Нечто подобное делает Asprotect после дешифровки файла.

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 15.06.03 15:22

Для этого, насколько мне известно, надо заставить свою программу исполнять функции ОС:

- чтение и дешифровка заголовка EXE-файла

- создание новой нити и объявление процесса

- занесение в стек всех параметров

- размещение в памяти секций данных, ресурсов и кода

- передать управление запущенному процессу, как своей нити (иначе могут возникнуть проблемы с ОС)

Другими словами, надо не наживать геморрой, а придумать что-то другое

ASProtect, насколько мне известно, пишет на диск...

Хотя можно еще попытаться попросить ОС запустить прогу с диска, перехватить ее обращение к нему и подставить взамен сектор памяти, где находится твой string (и при этом не забыть, что VB хранит строки в UNICODE...)

Ответить

Номер ответа: 2
Автор ответа:
 Сергей Юдин



Вопросов: 8
Ответов: 81
 Профиль | | #2 Добавлено: 15.06.03 19:43

Да, к сожалению это очень сложно.

Я пробовал через поток запустить, но никак не получается даже файл с простеньким примером,
который для простоты целиком считывается с диска.
Хотя сам поток запускается, даже в программе откомпилированной в нативе коде, а не только
P-коде, как рекомендуют.
Если кому интересно ложу свой пример, где поток запускает программу размещенную в модуле.
Поток можно запустить(кнопка1), приостановить (3), продолжить (4). Кнопка 2-выход.
На форме должно быть два текстбокса.

Option Explicit
Dim file$, lFileLength As Long, BinaryData() As Byte
Dim dwFlags As Long, ThreadID As Long, thread1 As Long, Adres As Long
Private Sub Command1_Click()
file$ = App.Path + "\Primer.exe"
lFileLength = FileLen(file$)
ReDim BinaryData(lFileLength - 1)
    Open file$ For Binary Access Read As #1
    Get 1, , BinaryData()
    Close #1
Adres = VarPtr(BinaryData(0))
Text2.Text = Adres
dwFlags = CREATE_SUSPENDED
'thread1 = CreateThread(ByVal 0&, ByVal 0&, Adres, ByVal 0&, dwFlags, ThreadID)
thread1 = CreateThread(ByVal 0&, ByVal 0&, AddressOf ThreadProc, ByVal 0&, dwFlags, ThreadID)
If thread1 = 0 Then End
Command4_Click
End Sub
Private Sub Command3_Click()
SuspendThread thread1
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Command4_Click()
ResumeThread thread1
End Sub

А это код модуля.

Public Const CREATE_SUSPENDED = &H4
Public Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
Public Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes _
    As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, _
    lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

Public Sub ThreadProc()
Dim x&
For x = 1 To 1000
Form1.Text1.Text = x
Next x
End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам