Jak utworzyć plik exe. przez skrypt .cmd

0

Witam

Czy jest możliwość utworzenia pliku .exe poprzez skrypt .cmd?

Proste pliki mogę utworzyć poprzez
ECHO > SCIEZKA/NAZWAPLIKU.VBS
i wypełnić pożądaną wartością np.:
ECHO cls >SCIEZKA/NAZWAPLIKU.VBS
ECHO pause >SCIEZKA/NAZWAPLIKU.VBS
itd..

Czy jest to wykonalne dla plików .exe?

2

Zasadniczo - tworzenie plików EXE jest trochę skomplikowanym procesem. Potrzebne są do tego narzędzia - takie, jak kompilator czy linker.
Takie wygenerowanie sobie exeka "z powietrza" jest praktycznie nierealne (napisałem "praktycznie" - bo da się to zrobić, ale to już naprawdę trzeba posiadać konkretną wiedzę).

Jedyne rozwiązanie, które (być może) by Tobie pasowało, to napisanie sobie jakiegoś programu w jakimś języku programowania, a potem przekazanie w skrypcie tego kodu źródłowego do kompilacji, w efekcie czego powstanie plik wykonywalny. Ale nie wiem, czy o takie coś Ci chodziło. Jeśli nie, to napisz jaśniej, czego Ci do szczęścia potrzeba ;)

0

Rozjaśniam obraz sytuacji:
Mam skrypt który do działania(jednej z funkcji skryptu) potrzebuje zewnętrznego pliku PROGRAM.EXE
Do innych funkcji używam plików.VBS (które tworzę po prostu poleceniami ECHO >> nazwapliku.VBS) i wywołuję go w skrypcie.
Dotychczas używałem po prostu hostingu z którego ściągałem plik (PROGRAM.EXE) i go uruchamiałem z odpowiednimi w przełącznikami wiersza poleceń.

Chciałbym mieć wszystko w jednym, pliku - skrypcie.

1

No to kolejne pytanie - czy wiesz, co ten plik EXE dokładnie robi? Bo może da się go zastąpić jakimś skryptem. Natomiast, jeśli plik EXE musi być, to raczej kiepsko to widzę. Samego pliku nie wygenerujesz, więc musisz go skądś pobrać i wstawić w dane miejsce.

1

Skoro skrypt odpala exec'a to jak chcesz to zrobić aby to było w jednym pliku? i co to ma wspólnego z dopisywaniem linii do pliku tekstowego za pomocą cmd?

0
cerrato napisał(a):

No to kolejne pytanie - czy wiesz, co ten plik EXE dokładnie robi? Bo może da się go zastąpić jakimś skryptem. Natomiast, jeśli plik EXE musi być, to raczej kiepsko to widzę. Samego pliku nie wygenerujesz, więc musisz go skądś pobrać i wstawić w dane miejsce.

Niestety nie da siego zastąpić skryptem....

Panczo napisał(a):

Skoro skrypt odpala exec'a to jak chcesz to zrobić aby to było w jednym pliku? i co to ma wspólnego z dopisywaniem linii do pliku tekstowego za pomocą cmd?

Plik tworzy exeka a potem go uruchamia.
dopisywanie... - tak tworzę na początku skryptu pliki .VBS które potem ten sam skrypt wykonuje.

1

Plik tworzy exeka a potem go uruchamia. dopisywanie... - tak tworzę na początku skryptu pliki .VBS które potem ten sam skrypt wykonuje.

Czekaj bo ja tego nie rozumiem do końca, masz bat-a który tworzy skrypt vbs, ten skrypt używa zewnętrznego pliku exe który jest odpalany.
chcesz aby bat był "niezależny i stworzył tego exec-a? aby nie było potrzeby pobierania z netu czy dodawania jako osobny plik?

0

Aby nie było potrzeby pobierania z netu.

Plik VBS podałem jako przykład tworzenia pliku wykorzystywanego przez skrypt - myślałem o podobnej zasadzie stworzenia pliku .exe

1

Są programy typu "BAT to EXE Converter", więc byłoby coś takiego możliwe!

3

To tak nie zadziała, bo nie da się stworzyć pliku zapisując jego dane do pliku tekstowego, musisz działać binarnie.

Powiedzmy, że masz plike "c:\folder\plik.exe" to najprościeć zapisać go w base 64 do pliku textowego:

Const TypeBinary = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 8
plik="c:\folder\plik.exe"
    Dim bytes
    Dim B64String
    With CreateObject("ADODB.Stream")
    .Open
    .Type = 1 'otwórz binarnie
    .LoadFromFile plik
    bytes = .Read
    .Close
    End With
    B64String = EncodeBase64(bytes)        
    Set objFileToWrite = CreateObject("Scripting.FileSystemObject").CreateTextFile(plik & ".txt",true)
objFileToWrite.WriteLine(B64String )
objFileToWrite.Close
Set objFileToWrite = Nothing



Private Function EncodeBase64(bytes) 

    Set objXML = createobject("MSXML2.DOMDocument.6.0")
    Set objNode = objXML.createElement("b64")

    objNode.DataType = "bin.base64"
    objNode.nodeTypedValue = bytes
    EncodeBase64 = objNode.Text

    Set objNode = Nothing
    Set objXML = Nothing
End Function

co spowoduje, ze powstanie plik: c:\folder\plik.exe.txt
i to jego zawartośc budujesz w pliku bat

a w samym bacie tworzysz skrypt który tą zawartość zapisze jako exe:

plikb64 = "c:\folder\plik.exe.txt"
plikexe = "c:\folder\plik_test.exe"


Set fso= CreateObject("Scripting.Filesystemobject")
Set input = fso.OpenTextFile(plikb64)
contents = input.ReadAll()
input.Close

Set oXML = CreateObject("Msxml2.DOMDocument")
Set oNode = oXML.CreateElement("base64")
oNode.dataType = "bin.base64"
oNode.text = contents

Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = 1 'adTypeBinary
BinaryStream.Open
BinaryStream.Write oNode.nodeTypedValue
BinaryStream.SaveToFile plikexe

0

Wow! Jaka kopalnia informacji!
Czyli rozumiem że raz zapiszę mojego .EXE do pliku TXT to potem mogę użyć całości do odtworzenia jako EXE?

Jaki jest limit znaków w .cmd do polecenia ECHO >> ?
Czytałem że 8191, reasumując musiałbym stworzyć .TXT z bat etapami po 8191 znaków.
Dobrze kombinuję?

Dziękuje za odpowiedź.

3

Jakiś straszny XY problem.
O co NAPRAWDĘ chodzi, czym się zajmuje skrypt, i o jakie czynności podejrzany jest EXE?

1

Ten limit dotyczy długości linii, wygenerowany plik ma 72 znaki w lini więc spokojnie się zmieścisz

3

Można tak

@echo off
echo Compiling
gcc main.c
start a.exe
echo Done

A tak na poważnie to powiedz, co chcesz osiągnąć.

0

To żadna tajemnica co do skryptu: link -> https://winclub.pl/topic/2449-windows-vista78110-skrypt-removespy_aio-hosts-szpiedzy-i-telemetria-won-optymalizacja-windows/

Skrypt do optymalizacji Windowsa/ów, tak jak pisałem wcześniej do działania(usunięcia komponentów z systemu) potrzebuje zewnętrznego programu - wcześniej był automatycznie ściągany przez skrypt a teraz będzie zaszyty w skrypcie , ot tyle :)

0

To zamiast kombinować nie lepiej takoe coś klepnąć w autoicie ? Ino to jest chwila bo to prosty, a jednocześnie potężny język i sie kompiluje od razu do exe.

Nie mam uprawnień do przegladniecia linku, więc nie wiem co tam chcesz czarowac, ale w najgorszym wypadku mozna oprogramowac cmd

0

Odpowiadam, ma być full open code - każdy ma zobaczyć ze tam nic nie ma ukrytego, sam sobie może pozmieniać.

1
Soul_hunter_16 napisał(a):

To zamiast kombinować nie lepiej takoe coś klepnąć w autoicie ? Ino to jest chwila bo to prosty, a jednocześnie potężny język i sie kompiluje od razu do exe.

W czym AutoIt jest lepszy w tym zastosowaniu od dowolnego języka programowania jak Haskell, Rust, Racket czy C ?

0
Kamil Żabiński napisał(a):
Soul_hunter_16 napisał(a):

To zamiast kombinować nie lepiej takoe coś klepnąć w autoicie ? Ino to jest chwila bo to prosty, a jednocześnie potężny język i sie kompiluje od razu do exe.

W czym AutoIt jest lepszy w tym zastosowaniu od dowolnego języka programowania jak Haskell, Rust, Racket czy C ?

Mniejszy próg wejścia, prosta składnia. Kilka linijek lub jedna funkcja ppm i kompilacja do exe. Nie wiem jak w innych, czy przy takich zadaniach są jakieś potrzeby zarządzania pamięcią i inne(tu oczywiscie nie ma) i instaluje sie go juz skonfigurowanego w 5 min, ale oczywiście da się to zrobić w każdym. Tutaj mi to brzmi jak dobre rozwiązanie bo w sumie do takich właśnie zadań powstał.

0

Dziękuje bardzo za pomoc, wszystko się udało: zakodować plik do .txt i odkodować plik z .txt na .exe
Pzdr!

0

Najlepsza opcja to generowanie kodu w JScript, C# lub MSIL a potem kompilowac kod do exe za pomoca .NET (csc,jsc,ilasm) Systemowy makecab ma tez funkcje robienia SFX z autorun ale rozwiazanie z makecabem jest dosc skomplikowane. http://www.ss64.com/nt/makecab.htm

0

A czy plik .vbs też da się tak zakodować ?

0

Narzędzie makecab i nakładka graficzna iexpress pozwala zamienić w EXE każdy otwieralny plik, lecz może to być problematyczne. Poza tym są programy Bat To Exe Converter i Vbs To Exe Converter, które działają także z konsoli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1