dodanie wlasnej biblioteki? (DLL)

0

Witam serdecznie! Pare dobrych lat temu, na zlecenie zostal napisany program w C++. Po tych paru latach okazalo sie iz trzeba do niego wprowadzic pare udogodnien, problem polega jednak na tym ze kod zrodlowy programu przepadl/zapodzial sie. Programowi przydaloby sie kilka drobiazgow "automatyzujacych" jego dzialanie.

Nie mam zielonego pojecia o RE i Asemblerze, dawniej programowalem w C++ i wydaje mi sie ze istnieje mozliwosc podpiecia do niego wlasnej biblioteki DLL (albo mi sie to uroilo)... Z zewnatrz program posiada dwie biblioteki DLL oraz plik wykonywalny EXE + mniej istotne elementy takie jak konfiguracja i dane na ktorych operuje.

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.

Jesli tak to poprosze o odnosniki rozjasniajace umysl Wink

Dziekuje i pozdrawiam!

0
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ł :>

0

nobody wielkie dzieki za zainteresowanie i odpowiedz. Prawde mowiac, nigdy nie przyszlo mi pisac DLLek. Faktycznie, kwestia "poruszania sie" po samym programie moze byc bariera nie do przeskoczenia. Zastanawiam sie wiec, czy napisanie programu na nowo nie byloby prostszym rozwiazaniem, jeszcze troszke posiedze nad tym problemem...

Jeszcze raz dziekuje za zainteresowanie.

0

Jeżeli program przychodzi z DLL'kami które NIE są runtime'm ani jakimś zlib'em i maja jakies sensowne nazwy sugerujące że robią coś pożytecznego, to sprawdz - może cała logika programu siedzi w nich, a sam .exe to tylko GUI które pobiera/prezentuje wyniki. Wtedy napisanie automatu jest banalne, acz tez sprowadza sie do napisania nowego exe, tylko ze pracy jest >100x mniej.

A samo rozszerzanie gotowych aplikacji o nowe rzeczy, BEZ dostepu do ich źródeł jest mozliwe, ale cieżkie, ale wciąż możliwe. Niestety, jakkolwiek na to patrzeć, większość czasu spędziłbyś na dowiadywaniu sie co jak dziala, jak zostalo napisane i poukladane logicznie/chronologicznie/przestrzennie, defacto, po porstu na odtwarzaniu źródeł danego fragmentu programu. Stad, pytanie, czy RE'owanie tego fragmnetu zajmie mniej, czy wiecej niz pisanie od nowa.. jesli wybrales opcje RE, to sie pochwal jak CI idzie:)

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