zawszeostatni napisał(a)
[...] wydaje mi sie ze istnieje mozliwosc podpiecia do niego wlasnej biblioteki DLL[...]
istnieje
zawszeostatni napisał(a)
Moje pytanie: Czy istnieje mozliwosc podpiecia wlasnej DLLki do programu? Funkcjonalnosc na zasadzie, sprawdzenia wartosci w pliku zewnetrznym, pobranie wartosci z pola tekstowego programu, zmiana zakladki programu i wprowadzenie zmiennej do kolejnego pola ip itd, nic powaznie ingerujacego w program.
Dwie rzeczy:
#1 kwestia podłączenia DLLki do twojego programu
#2 kwestia podłączenia się do obiektów w twoim programie
W kwestii #1 sposobów jest mnogo, aczkolwiek nie ma tak, że jedna linijką to osiągniesz (trzeba w najoptymistyczniejszym wypadku z kilkanaście :>), bo wtedy dorzucenie swojego kodu do obcego programu/procesu (no czyli już zachaczamy o hacking) byłoby zbyt proste i każdy początkujący noob by to potrafił, więc świństwa byłoby tyle, że antywirus by ci się zamulił :>
aczkolwiek nie jest to też w żadnym wypadku trudne, powiedziałbym, że skomplikowanie tego problemu jest przeciętne :>
W każdym razie zakładając że nie modyfikujesz kodu exe'ca, nie obejdzie się bez DLLki jak zauważyłeś (bo twój kod musi tam jakoś trafić a DLLka jest najprostszym rozwiązaniem :>
Najpierw przeczytaj to:
http://vexillium.org/?sec-dllsp
Tak chyba jest zastosowana podmiana DLLki, czyli twoja DLLka będzie musiała się podszyć pod tą która już jest, wtedy program sam sobie już załaduje twoją DLLkę
W innym wypadku będziesz musiał stworzyć jeszcze program, który zajmie się podłączeniem twojej DLLki do już działającego programu/procesu. Podstawowe funkcje do tego potrzebne to: OpenProcess (EnumProcesses z psapi.h, jeśli chcesz szukać po nazwie) + LoadLibrary + VirtualAllocEx + CreateRemoteThread
Można też zrobić to zakładając globalnego HOOKa (to taki wbudowany w system mechanizm do hakowania procesów :>, czyli żeby załadować swoją DLLkę wszędzie gdzie się da :>) - to byłoby najprostsze i nie byłoby problemów z synchronizacją w przypadku tworzenia własnego wątku w atakowanym procesie.
Mówiło się też o tym, że jest w rejestrze jakiś klucz, w którym jest info jakie system DLLki ma ładować do każdego procesu, aczkolwiek nie wiem jak to wygląda w dzisiejszych windowsach, takie plotki przekazywane "z forum do forum" lubią być często już nieaktualne :D, ale jeśli to prawda to możesz też chwycić tego :>
o ile w kwestii #1 jest mnogo sposobów, to może być problem z #2, bo załóżmy że załadujesz swoją DLLkę do obcego procesu i przekażesz do kod tam zawarego sterowanie, czyli mamy coś ala:
void wykonaj_w_obcym_procesie()
{
//no i co k** dalej?
}
No właśnie co tutaj napiszesz? heh? Jeśli chcesz odwołać się do jakiejś kontrolki musisz mieć jej pointer do jej obiekt/uchwytu, musisz go jakoś pobrać. W zależności od tego w czym to jest zrobione (jakiś borland lub inne ustrojstwo) może będziesz miał tyle farta, że udostępnia to jakiś sposób aby pobrać obiekt po nazwie: TObject* QueryObject("NazwaKontrolki");
Jak nie to jest problem, bo bez RE się nie objedzie, jeśli nie ma wysokopoziomowej możliwości pobrania obiektu, tym bardziej adresu leżakowania zmiennej w wirtualnej przestrzeni.
Jakbyś to miał w WinAPi to by w ogóle nie było problemu, wtedy mógłbyś tym sterować(w większości wypadków) nawet z własnego osobnego procesu, ale po wypowiedzi widzę, że do winapi daleko :> zresztą jakbyś znał api tego systemu to wątek by nie powstał :>