Witam.
Czego powinienem się pouczyć by napisać aplikację która będzie ingerowała w pracę innej aplikacji? (język VB.NET)
M. in - wpisywać tekst, klikać na buttony itp. itd.
trzeba by uruchomic tą aplikację w "izolowanym" środowisku albo użyć selenium
co masz na mysli pisząc w "izolowanym" środowisku?
Zmienić język na C++ i wtedy korzystać np. z WriteProcessMemory ReadProcessMemory ;)
Bartosz Wójcik napisał(a):
Zmienić język na C++ i wtedy korzystać np. z WriteProcessMemory ReadProcessMemory ;)
Eeee ja w C# to robiłem to i vb .net się da wystarczy zaimportować potrzebne funkcje ;)
Próbowałem użyć WriteProcessMemory , ale niestety nie mogę odczytać adresów textboxów/buttonów aplikacji ;(
Bartosz Wójcik napisał(a):
Zmienić język na C++ i wtedy korzystać np. z WriteProcessMemory ReadProcessMemory ;)
A że niby w VB.net nie można? Przecież to funkcje WinApi i można je normalnie zaimportować choć do tego o czym pisze autor wątku chyba bardziej były by potrzebne wysyłanie komunikatów czyli SendMessage
i odpowiedni komunikat. Oczywiście wcześniej musisz znaleźć uchwyty buttonów i pola tekstowego i tu przyda się FindWindow
i FindWindowEx
.
Biały Szczur napisał(a):
Próbowałem użyć WriteProcessMemory , ale niestety nie mogę odczytać adresów textboxów/buttonów aplikacji ;(
To zależy z jaką aplikacją masz do czynienia. Aplikacje natywne, korzystające z natywnych kontrolek Windows możesz odszukać korzystając z funkcji WinAPI FindWindow(Ex) i później komunikować się z nimi przez komunikaty SendMessage, jeśli aplikacja nie korzysta z natywnych kontrolek Windowsa w 1 kolejności należałoby się zorientować Z CZEGO W OGÓLE korzysta i wtedy poszukać pod to rozwiązania.
Dla natywnych kontrolek możesz np. znaleźć główne okno aplikacji przez FindWindow(Ex), a później przez EnumChildWindows przeszukać wszystkie jego elementy w poszukiwaniu swojej kontrolki (zwracając uwagę na charakterystykę kontrolki, np. rozmiar, klasę okna).
Jeśli masz zamiar ingerować w pamięć procesu, możesz znaleźć okno przez FindWindow(Ex), później korzystając z uchwytu okna znaleźć jego proces przez GetWindowThreadProcessId(), potem otworzyć proces przez OpenProcess() no i w końcu zczytać dane przez ReadProcessMemory() lub zmodyfikować przez WriteProcessMemory() pamiętając, że adresy podajemy jako wartość VA, czyli wirtualny adres (a nie RAW adres w pliku) w przestrzeni adresowej procesu np. 0x401020 (RVA + ImageBase [hModule] procesu).