Что нового

Расположить исполняемый файл внутри скрипта

The_Immortal

Новичок
Сообщения
84
Репутация
4
Всех приветствую!

Задача сложная (если вообще возможная) и странная (определенно). Имеется готовый exe, исходников которого нет. Его надо каким-то образом расположить внутри скрипта, т.е. встроить в скрипт. Также запускаться он должен внутри скрипта, без копирования куда-либо.

Возможно ли это как реализовать?

Намекните, пожалуйста.


Спасибо!
 
A

Alofa

Гость
Придется вам все-таки пользовать
Код:
FileInstall
иначе никак. Правда второе ваше условие, при этом, не будет соблюдено. Но что вам мешает спрятать этот exe от глаз подальше.
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
Alofa, у меня нет задачи спрятать его от глаз, у меня есть задача сделать единый файл и расположить зашитый в него exe сразу в памяти.

Я пока гуглил, наткнулся на форум по Делфи, там был такой вопрос-ответ:
Встроить exe в exe легко, но можно ли запустить встроеный exe"шник так, чтобы не создавать для него файла на диске? Например выгрузить его в память и запустить.
вообщето можно.... см описание PE-файлов и вызовы VirtualAlloc...
Но на этом всё обсуждение закончилось :( Ответа я, к сожалению, не понял...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
используешь это - http://autoit-script.ru/index.php?topic=1985.0
потом это
Run Binary
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
joiner, большущее Вам спасибо за наводку! Но почему-то пока не срабатывает...

Конвертация exe в бинарный вид от уважаемого AZJIO прошла успешно - проверил.

Теперь пробую функцию Run Binary:
Код:
$sData  = '0x'
$sData  &= '4D5A50000200000004000F00FFFF0000B80000000000000040001A00000...'

$sData=Binary($sData)
Global $bBinary = FileRead($sData)
Global $iNewPID

; Try 10 times in case of failures
For $i = 1 To 10
	ConsoleWrite("Try No" & $i & @CRLF)
	$iNewPID = _RunBinary($bBinary);, "", @SystemDir & "\calc.exe") ; if it fails on for example XP, try another 'victim'.
	If Not @error Then ExitLoop
Next
; Let's see if there were any errors
Switch @error
	Case 0
		ConsoleWrite("New process sucessfully created. PID is: " & $iNewPID & @CRLF)
	Case 1
		MsgBox(48, "Error", "New process couldn't be created!" & @CRLF & "Check if the path is correct.")
	Case 2
		MsgBox(48, "Error", "Wrong AutoIt!" & @CRLF & "Should be x64 for x64 and x86 for x86.")
	Case 3
		MsgBox(48, "Error", "GetThreadContext function failed!" & @CRLF & "Something is wrong.")
	Case 4
		MsgBox(48, "Error", "Binary data seems to be corrupted!" & @CRLF & "MS-DOS header is wrong or missing.")
	Case 5
		MsgBox(48, "Error", "Binary data seems to be corrupted!" & @CRLF & "PE signature is wrong.")
	Case 6
		MsgBox(48, "Error", "Wrong AutoIt!" & @CRLF & "Should be x64 for x64 and x86 for x86.")
	Case 7
		MsgBox(48, "Error", "Internal error!" & @CRLF & "Failure while writting new module binary.")
	Case 8
		MsgBox(48, "Error", "Internal error!" & @CRLF & "Failure while filling PEB structure.")
	Case 9
		MsgBox(48, "Error", "Internal error!" & @CRLF & "Failure while changing base address.")
	Case 10
		MsgBox(48, "Error", "Internal error!" & @CRLF & "Failure with SetThreadContext function.")
	Case 11
		MsgBox(48, "Error", "Internal error!" & @CRLF & "Failure with ResumeThread function.")
	Case 101
		If @extended Then
			MsgBox(48, "Error", "Error!" & @CRLF & "Not enough space available at desired address. Try again maybe, or change the 'victim'.")
		Else
			MsgBox(48, "Error", "Error!" & @CRLF & "Executable you try to run is not relocatable. This lowers the possibility of running it in this fassion." & @CRLF & "Try again or find another 'victim', maybe you'll get lucky.")
		EndIf
	Case 102
		MsgBox(48, "Error", "Itanium architecture!" & @CRLF & "No solution. Sorry." & @CRLF & "How did you manage to end up here is beyond my comprehension.")
EndSwitch

; FUNCTION

Func _RunBinary($bBinaryImage, $sCommandLine = "", $sExeModule = @AutoItExe)
;...
EndFunc


Получаю ошибку:
Код:
MsgBox(48, "Error", "Binary data seems to be corrupted!" & @CRLF & "MS-DOS header is wrong or missing.")


Есть подозрение, что делаю что-то не так тут:
Код:
$sData=Binary($sData)
Global $bBinary = FileRead($sData)
- FileRead может принимать данные в бинарном представлении?

Я, правда, подсовывал ему и без конвертации в бинарный вид:
Код:
Global $bBinary = FileRead($sData)
- всё равно та же ошибка :(

Может заголовок должен быть для этой функции другой?
Код:
$sData  = '0x'
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
The_Immortal
Для чего эти извращения?

Касательно кода:
К чему FileRead? Просто передайте ваш $sData в _RunBinary.

Код:
Global $sData  = '0x'
$sData  &= '4D5A50000200000004000F00FFFF0000B80000000000000040001A00000...'

Global $iNewPID = _RunBinary($sData)

; ...


P.S. Рано вам еще зловредить.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
The_Immortal [?]
- FileRead может принимать данные в бинарном представлении?
Нет, она только принимает имя файла, например example.txt или путь к файлу, например C:\dir\fld2\file.txt...
 
Верх