Inject DLL

0

Witam chcę napisać pewien program który ma za zadanie w pewien sposób automatyzować pracę.

Mianowicie poczytałem trochę i doszedłem do tego co zawarte jest w temacie, otóż udało mi się do danego programu wstrzyknąć ten dll a następnie kod zawarty w nim wywołał MessageBox(); i na tym koniec :).

I teraz moje pytanie brzmi następująco czy mogę jakoś za symulować kliknięcie dany w przycisk(button) w programie, sprawdzać czy odpowiednie okno się otworzyło, wpisywać wartości do odpowiednich pól?

Przykład co ma program robić:
user image
http://img10.imageshack.us/img10/8352/przykadr.jpg

I chodzi mi głównie o to aby to się działo w tle abym nie musiał skupiać na danym textboxie

Ja wpadłem na taki pomysł: jest program i i wiadome pętla komunikatów i teraz tak jakby nasłuchiwać te komunikaty i w tym momencie kliknąć w jakiś przycisk np. i wtedy ten komunikat znamy to możemy sobie go zapisać i potem wywoływać np. PostMessage();

Tylko jak ty wykonać :) ?

0

Zgaduje ze exe nie jest w zaden sposob szyfrowany, wiec mozesz sobie w czasie rzeczywistym wyciagnac nazwy okienke. Potem mozesz sobie obslugiwac wlasna petle, czyli jesli zostanie zwrocony uchwyt do danego okna(istnieje ono) to powiedzmy wywolujesz FindWindowEx dla niego i bierzesz sobie uchwyt do konkretnego pola. Nazwy mozna wyciagnac przez debugger. Po wstrzyknieciu sie w proces mozesz robic praktycznie wszystko co chcesz, kwestia jest zebranie danych.

0

Do tego doszedłem, ale jak mniej więcej gdy już mam uchwyt buttona i jak wywołać jego kliknięcie oczywiście w tle, kolejna rzecz to gdy mam kilka pól (textboxów) które mają taką samą klasę i są puste to jak zlokalizować tego co chce .. ? a jak już mi się to uda to jak wpisać tekst również w tle (SetWindowText() :) ?)

PS. gdy natrafiłem na ten FindWindowEx to pomyślałem czy to musi być za pomocą dll inject ? głównie mi chodzi o to że w trakcie pracy tego programu można sobie spokojnie np. przeglądać internet czyli żeby to działało w tle.

1

FindWindowEx nie wymaga dll injectingu. Mozna napisac osobny modul exe opierajacy sie na tym. Na dobra sprawe dll injecting wymagany jest jesli proces jest jakos chroniony, np. w grach. W wypadku takich prostych aplikacji wystarcza funkcje api.

0

Okej, jak zrobić aby to wszystko działo się w tle ?, klikanie w btn, wpisywanie tekstu, wybieranie opcji z listy itp

0

MSDN + winapi.

SetWindowText, PostMessage, SendMessage etc.

0

Aha rozumiem, a jak jest taka sytuacja, mam 10 komponentów o tej samej klasie i bez nazwy i jak zlokalizować ten właściwy ?

0

Bo to co znalazles to nie byl base pointer jak widac. W segmencie danych masz zapisane pod konkretnym adresem zmienne. Jesli znajdziesz dobre to nie zmienia sie na pewno. Tak jak np. ja mam tutaj:

http://snag.gy/bDUsP.jpg
Edit. Jako ze sie rev czepia to podmienilem, zeby tak w oczy go nie razilo...

Potem jedyne co robie to dane z pod tego adresu wczytuje sobie do zmiennej.

memcpy(&maxHP,(WORD*)maxHPptr,sizeof(WORD));
0

Czyli jak bym uzyskał zmienną w której jest przechowywany uchwyt danego komponentu to za pomocą tej komendy czytam jej wartość i wpisuje do maxHPptr, u siebie tak ?

I domyślam się że tu już w grę wchodzi dll inject ?

Czy trudne będzie znalezienie tego ?, mam IDA u siebie ale n sprawa podobna do ollydbg czyli kiepsko z posługiwaniem się tym narzędziem więc czy nie mogę np. wpisze coś w okienko później zmienię i debbuger ollydbg pokaże mi gdzie się zmieniło ?

PS. rozumiem że IDA to disassambler a ollydbg to debugger ale czym to się różni w obu mamy program w assablerze zapisany, ale w IDA chyba mogę zapisywać ten kod źródłowy.

0

Bez znajomości reversingu, skorzystaj po prostu z cech kontrolek, co z tego, że mają taką samą klasę, ale już np. ich pozycje są inne względem głównego okna:

  1. FindWindowEx - szukasz glownego okna po tytule lub nazwie klasy
  2. EnumChildWindows - filtrujesz sobie te kontrolki, ktore cie interesuja, po np. pozycjach X i Y i klasach okna
  3. PostMessage etc. do kontrolek

Ze znajomością reversingu:

  1. Ściągasz IDA Personal, uczysz się assemblera, mija 5 lat i temat jest nieaktualny :D
  2. Szukasz gdzie są tworzone kontrolki / klasy kontrolek i gdzie są zapisywane uchwyty
  3. Podpinasz swojego DLL-a, w którym tworzysz wskaźniki do tych kontrolek korzystając z wcześniej uzyskanych adresów w pamięci
  4. PostMessage etc. do kontrolek
0

To zabieram się do zabawy ale jak to sie uda to w kolejce czeka kolejny dosyć problematyczny problem :D
Mianowicie:
user image
Takich list w programie jest kilka więc obsługiwanie ich jest po prostu niezbędne.

Pytanie brzmi, jak czytać np. Pesel lub nazwisko w linijce 2,3 czy 158 ? i czy to możliwe.
Kolejną rzeczą potrzebną będzie zaznaczanie odpowiednich linijek czy to 16 czy 32.

wiem tyle że to jest klasa TwwDBGrid i nie ma jak operować na tym zbytnio.

W pierwszym poście rozpoczynającym temat również dałem obrazek z komponentów listy rozwijanej i istotne jest to jak wybierać wartości w tych listach rozwijanych zdalnie ?

Jeżeli to wszystko się opanuje no to jestem na dobrej drodze :)

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