Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program wprowadzajądzy komende w inny program. C++

Ostatnio zmodyfikowano 2014-01-04 16:08
Autor Wiadomość
CodeFun
Temat założony przez niniejszego użytkownika
Program wprowadzajądzy komende w inny program. C++
» 2014-01-03 14:02:24
Witam

W celu edukacji postanowiłem zrobić dwa programy konsolowe w C++. Jeden program po uruchomieniu prosi o podanie imienia po czym wypisuje na ekranie podane imię (wow)

C/C++
#include <iostream>

main()
{
    string imie;
   
    cout << "Podaj Imie:" << endl;
    cin >> imie;
    cout << "Podane Imie to " << imie << endl;
}

Jak widać nie jest to poziom fizyki kwantowej.Problem jest w drugim programie, który uruchomi ten banalny po wyżej  i wpisze mu żądane imię, po czym "kilknie" eneter.
Do uruchomienia programu potrzebna jest komenda
WinExec( "c://imie.exe", SW_NORMAL );

Tyle wiem :E
Teraz  potrzebowałbym czegoś w rodzaju wskaźnika, referencji do adresu programu, albo procesu? Aby móc na nim działać, czyli uchwyt. Jak ten uchwyt zdobyć ? Jak poruszać się bo "obcym" programie z poziomu innego programu ?
P-101022
pekfos
» 2014-01-03 15:32:59
CreateProcess()

Jak poruszać się bo "obcym" programie z poziomu innego programu ?
Na takie pytania nie odpowiadamy.
P-101039
leon_w
» 2014-01-04 11:52:31
Myślę, że tutaj coś znajdziesz http://msdn.microsoft.com​/en-us/library/windows/desktop​/ms682073(v=vs.85).aspx
GetStdHandle() - tym utworzysz uchwyt do okna konsoli.
P-101091
CodeFun
Temat założony przez niniejszego użytkownika
» 2014-01-04 15:50:18
Dziękuję za wskazówki. Rozumiem tajemniczość tematyki :) Jednak wierzcie mi, jestem już za stary na to, żeby się zmieniać w internetowego chochlika, chcę tylko wiedzieć jak to wygląda ogólnie, a gdy zajdzie potrzeba wykorzystać coś pozytywnie.  Nie można z kucharza  od razu robić potencjalnego morderce bo ma nóż.  Czy moglibyście mi jednak powiedzieć jak działa sam mechanizm takiej kontroli? ,a dalej będę sam grzebał. Ja rozumiem to tak:

Na przykładzie powyższego banalnego programu

1.Uruchamiamy mój program
2.Pozyskujemy uchwyt (adres pod którym został uruchomiony program)
3.Pozyskujemy adres/wskaźnik zmiennej "imie". Rozumiem, że to będzie coś na zasadzie offsetu od początkowego adresu programu. Zatem trzeba by zdeassemblować mój program i zobaczyć pod jakim adresem "siedzi" zmienna imie ? Załóżmy, że jest to 50 bajtów od adresu 0x00, zatem zawsze będzie to x+50. Mi potrzebne jest to x.
4.Wpisujemy do adresu x+50 "imie" co chcemy dzięki pewnym funkcją, tym samym ingerując programem poprzez program.

Streszczając wszystko rozbija się o adresowanie. Równie dobrze wystarczy TYLKO(?) dowiedzieć się pod jakim adresem jest w danej chwili zmienna "imię" i wpisać tam coś z poziomu innego programu i nastąpi nieautoryzowana zmiana he?
P-101112
pekfos
» 2014-01-04 16:08:24
Nie odpowiadamy na takie pytania.
» Porady dla użytkowników cpp0x.plZakładanie tematów na forum zalecenie

Na przykładzie tego banalnego programu, powinieneś wysłać dane na jego standardowe wejście. CreateProcess() i przykład na MSDN. Tematy z takimi pytaniami, jak te z Twoje ostatniego postu, będą usuwane.
P-101114
« 1 »
  Strona 1 z 1