Spuštění externího EXE z Assembleru – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spuštění externího EXE z Assembleru – Assembler – Fórum – Programujte.comSpuštění externího EXE z Assembleru – Assembler – Fórum – Programujte.com

 

radek
~ Anonymní uživatel
133 příspěvků
22. 6. 2009   #1
-
0
-

Dobrý den,
jsem absolutní začátecník. Potřebuji kus kódu v Assembleru, který mi spustí externí EXE (winNT/2000/Xp binárka), pokud možno co nejjednodušším způsobem a kód by měl být co nejmenší (myslím v řádkách čitelného kódu).
Děkuji

Nahlásit jako SPAM
IP: 193.179.2.–
o-lox0
Super člen
22. 6. 2009   #2
-
0
-

Bude to chtít trochu té snahy, abys to vytesal do zprovoznitelné podoby. (nebo si zaplatit)
Samo se ti to nenapíše.
Použij API ShellExecute a pomocí série Push předej parametry.
Je otázka kam to píšeš, jestli přímo do .C souboru (pod příkaz __asm) nebo
souboru .asm a použiješ to jako Objektový soubor, nebo to chceš taky jako Exe
z překladače asm jako je Masm32,..

WINAPI je:
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename string
LPTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
PUSH se provádí (u stdcall) odzadu, je potřeba např. nezapomenout Includovat .inc
Umět instrukci MOV a CALL. Pak další (příjem parametrů ze Stacku-zásobníku) podle toho zda hodláš spouštět stále ten samý
program nebo program proměnný.
Nějaké příklady programů .asm v balíku s překladači ať už masm,tasm,nasm, ti pomůžou.

Nahlásit jako SPAM
IP: 85.71.152.–
radek
~ Anonymní uživatel
133 příspěvků
23. 6. 2009   #3
-
0
-

To o-lox :
Díky moc že jsi mě navedl správně, protože jsem doteď experimentoval s API CreateProcess a nějak mi to pořád nefungovalo. Používám MASM, potom chci kód injectovat do EXE pomocí OllyDebug...

Nahlásit jako SPAM
IP: 193.179.2.–
radek
~ Anonymní uživatel
133 příspěvků
23. 6. 2009   #4
-
0
-

To o-lox :
Mohlo by fungovat toto? Zjednodušeně napsáno:

FILENAME DB "cmd.exe",0
PUSH 0 ;hwnd
PUSH 0 ;lpOperation (???)
PUSH OFFSET FILENAME ;cmd.exe
PUSH 0 ;lpParameters
PUSH 0 ;Měl by vzít defaultdir z proměnné %windir% ?
PUSH 0 ;nShowCmd (???)
CALL ShellExecute

Nahlásit jako SPAM
IP: 193.179.2.–
radek
~ Anonymní uživatel
133 příspěvků
23. 6. 2009   #5
-
0
-

To radek :
Tak jsem to napsal v masm32:

.386
.model flat, stdcall
option casemap :none ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.code
FILENAME DB "cmd.exe",0
start:
.data
PUSH 0 ;hwnd
PUSH 0 ;lpOperation (???)
PUSH OFFSET FILENAME ;cmd.exe
PUSH 0 ;lpParameters
PUSH 0 ;Měl by vzít defaultdir z proměnné %windir% ?
PUSH 0 ;nShowCmd (???)
CALL ShellExecute
CALL ExitProcess
end start

Ale assembler mi při buildu hlásí:
Assembling: C:\masm32\examples\exampl01\minimum\minimum.asm
C:\masm32\examples\exampl01\minimum\minimum.asm(30) : error A2006: undefined symbol : ShellExecute
C:\masm32\examples\exampl01\minimum\minimum.asm(31) : error A2107: cannot have implicit far jump or call to near label
_
Assembly Error

Až tak jednoduchý to zřejmě nebude...

Nahlásit jako SPAM
IP: 193.179.2.–
radek
~ Anonymní uživatel
133 příspěvků
23. 6. 2009   #6
-
0
-

To radek :
Heh v ollydbg jsem otevřel jeden program a ten obsahuje tento disassemblovaný kód:

0053187C /. 55 PUSH EBP
0053187D |. 8BEC MOV EBP,ESP
0053187F |. 6A 05 PUSH 5 ; /IsShown = 5
00531881 |. 68 A0185300 PUSH SystemEx.005318A0 ; |DefDir = ""
00531886 |. 68 A0185300 PUSH SystemEx.005318A0 ; |Parameters = ""
0053188B |. 68 A4185300 PUSH SystemEx.005318A4 ; |FileName = "abcdefg.exe"
00531890 |. 68 B0185300 PUSH SystemEx.005318B0 ; |Operation = "open"
00531895 |. 6A 00 PUSH 0 ; |hWnd = NULL
00531897 |. E8 D87CF0FF CALL <JMP.&shell32.ShellExecuteA> ; \ShellExecuteA
0053189C |. 5D POP EBP
0053189D \. C3 RETN

to by mohl být klíč :-)

Nahlásit jako SPAM
IP: 193.179.2.–
radek
~ Anonymní uživatel
133 příspěvků
23. 6. 2009   #7
-
0
-

To radek :
Tak jsem si hrál s injectem do putty (do 00 00 00 00...) a funguje to:

.
.
.
0044F4D1 00 DB 00
0044F4D2 00 DB 00
0044F4D3 . 63 6D 64 2E 65>ASCII "cmd.exe",0
0044F4DB . 6F 70 65 6E 00>ASCII "open",0
0044F4E3 . 6A 05 PUSH 5 ; /IsShown = 5
0044F4E5 . 68 D1F44400 PUSH puttyexe.0044F4D1 ; |DefDir = ""
0044F4EA . 68 D2F44400 PUSH puttyexe.0044F4D2 ; |Parameters = ""
0044F4EF . 68 D3F44400 PUSH puttyexe.0044F4D3 ; |FileName = "cmd.exe"
0044F4F4 . 68 DBF44400 PUSH puttyexe.0044F4DB ; |Operation = "open"
0044F4F9 . 6A 00 PUSH 0 ; |hWnd = NULL
0044F4FB . E8 401A5F7C CALL SHELL32.ShellExecuteA ; \ShellExecuteA
.
.
.

Teďka to jen přepíšu do MASM32 a vlastně to bude vyřešeno...

Nahlásit jako SPAM
IP: 193.179.2.–
o-lox0
Super člen
23. 6. 2009   #8
-
0
-

Dám si šlofíka, až ti poběží Softice a budeš crackovat něco velkýho, mě ale rozhodně vzbuď..
Jak jsem psal zapomněl jsi na include shell32.inc, shell32.lib.

Masm používá pro volání APIn invoke příkaz
použij invoke ExitProcess, 0 ; tj. exitcode
invoke ShellExecute, 1.parametr, 2.parametr, zde ve správném pořadí.

dál bych tě vyvedl z případného omylu, že se ti povede jen tak injektovat
kód volání ShellExecute do jakéhokoliv programu si zamaneš.
Používají se odskoky na adresy knihoven DLL, SHELL32.DLL, to je ten
převod Call něco na Call adresa, takže když nebude mít program linkovanou
tuto knihovnu dll,
skončíš runtime pádem. A když bude mít linkovanou, skončíš
runtime errorem na jakémkoliv odlišném systému Windows, kde
se adresy APIn s časem bohužel mění.

Řešením je lokalizace import table v PE hlavičce, vytažení Base Kernelu,
který je používán vesměs vždy a použití LoadLibrary,GetProcAddress. Nebo testovat všechny známé Base kernelu, nevim jak je to nejlíp s verzema Visty nebo teda Win7 a jejich prolomenym relokačnim enginem pro umisťování na random místa svých dll.

Nahlásit jako SPAM
IP: 85.71.152.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 125 hostů

Podobná vlákna

Spusteni .exe — založil belze

C# spuštění programu *.EXE — založil ospaly.stanislav

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý