Modyfikacja stosu aplikacji

toyman

Użytkownik
Dołączył
Lipiec 1, 2009
Posty
5
Temat nie dotyczy stricte Delphi, ale aplikacja, którą chcę zmodyfikować jest napisana w Delphi i ja też (szumnie brzmiąco) mogę się nazywać programistą Delphi. Okej - to tytułem wstępu.

Sytuacja wygląda tak:

Jest aplikacja, która łączy się z serwerem PostgreSQL 9.0. Aplikacja i serwer bazy danych to jedna paczka - to znaczy biblioteka libpq.dll jest zmodyfikowana przez producenta aplikacji, podobnie jak dostępne metody uwierzytelniania (nie ma metody trust) oraz zmodyfikowany jest mechanizm zapisu nagłówka strony. Stąd większość ścieżek dostępu do serwera bazy danych jest zamknięta.

Owszem istnieje pewien sposób, żeby się tam dostać, ale prawdopodobnie i on niedługo zostanie uszczelniony.

Niestety - życie jest życiem i swoje trzeba robić (serwisować aplikację). Dlatego szukam już teraz alternatywnej ścieżki nadawania sobie uprawnień do bazy danych - tak, żeby dało się do niej zapiąć np. pgAdminem lub innym podobnym narzędziem i móc zrobić cokolwiek (w układzie jak teraz baza danych klienta musi trafić do producenta, a ten realizuje zgłoszenia serwisowe wg kolejności napływania. Czas oczekiwania na serwis to nierzadko ponad dwa tygodnie - w tym czasie moi klienci wydrapią mi oczy).

Pytanie brzmi:

Czy da się jakoś zatrzymać aplikację w ściśle ustalonym momencie (np. kliknięcia konkretnego przycisku i wywołania procedury zdarzeniowej, zmodyfikować stos (dokładniej stringa z SQLem zbudowanego przez aplikację) i puścić dalej, żeby wykonał nasze zapytanie SQL w zamian za to co miał wykonac pierwotnie.

Na pierwszą część wiem, że jest odpowiedź twierdząca: zatrzymać aplikację potrafi zrobić np. Cheat Engine. Potrafi też zmodyfikować zawartość pamięci - więc jest dość blisko, ale: zatrzymanie aplikacji następuje ręcznie - ja muszę nadisić guziora "Pause" i bankowo nie zrobię tego w odpowiednim momencie. Poza tym w momencie kiedy wyszukuję w pamięci określonych ciągów po zatrzymaniu aplikacji - najczęścieściej trafiam w śmieci - pozostałości po zwolnionych i nie wyczyszczonych obszarach (np. zarezerwowano dla zmiennej string obszar pamięci o długości odpowiadającej 20 znakom, po czym w ten sam obszar pamięci wpisano stronga 5 znakowego. 6 znak jest pusty a potem śmieci, akurat takie, które pasują do mojej frazy).

Chciałbym zrobić coś na zasadzie debuggera - ustawiam breakpointa w odpowiednim miejscu, podglądam stos, widzę zmienne i co się z nimi dzieje, po czym step-by-step dochodze do momentu, gdzie pojawia się kompletne zapytanie - tuż przed wykonaniem. Modyfikuję i puszczam aplikację dalej.

Da się tak ?
 
Ostatnio edytowane przez moderatora:

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
Tak jak w Delphi da się ale ty masz za małą wiedzę na ten temat ;] w sumie ja też chyba...
nie wiem jak by się do tego zabrać jeżeli o kod programu chodzi (zaczął bym od debuggera z d7 jak działa itp)
 

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
mogę się nazywać programistą Delphi.

Cheat Engine. Potrafi też zmodyfikować zawartość pamięci - więc jest dość blisko, ale: zatrzymanie aplikacji następuje ręcznie - ja muszę nadisić guziora "Pause" i bankowo nie zrobię tego w odpowiednim momencie. Poza tym w momencie kiedy wyszukuję w pamięci określonych ciągów po zatrzymaniu aplikacji

skoro możesz nazwać się programistą,
http://proqixproj.comze.com/downloads/Cheat_Engine_SC.rar
kod źródłowy Cheat Engine możesz sobie D odpalić i zmodyfikować kod tak by działał pod ciebie
ALE
1. nie chce ci się/nie umiesz poszukać w google... że ci się chciało pisać tyle podziwiam
2. trudne kliknij tu http://lmgtfy.com/?q=okienkowy debugger programów windows

Olly to jeden z najlepszych debuggerów, jednak jeżeli chodzi o źródło to jest w C
 

VR8

Moderator
Członek Załogi
Dołączył
Wrzesień 24, 2011
Posty
325
//cut
//dodoxx6
ProQix napisał Ci co zrobić, a poza tym Google Twoim przyjacielem :)
Dostałeś source Cheat Engine, czekasz na rozwiązanie krok po kroku z obrazkami?
 
Ostatnio edytowane przez moderatora:

toyman

Użytkownik
Dołączył
Lipiec 1, 2009
Posty
5
Ehhh. Przede wszystkim nie chodziło o kod źródłowy Cheata. NIE potrzebuję pisma obrazkowego. Napisałem dokłądnie do jakiego punktu dotarłem, czego nie potrzebuję i czego potrzebuję.

Oczywiście obaj panowie nie przeczytali ze zrozumieniem w czym jest problem. Dowiedziałem się za to, że
nie wiem jak by się do tego zabrać jeżeli o kod programu chodzi
Za to dowiedziałem się, że jestem półinteligentem, bo nie umiem korzystać z Google.

oczywiście chłopcy, którzy "nie bardzo wiedzą jak się do tego zabrać" chcą innych sprowadzić do swojego poziomu, żeby samemu poczuć się lepiej. Co więcej - link wyszukujący nie wnosi nic do rzeczy.

Ludzie ogarnijcie się. Mniej hipokryzji - więcej konkretów. Radziłbym przeczytać z jakim problemem do Was przychodzę. Tym razem ze zrozumieniem i o ile potraficie dołożyć coś więcej do tego co napisał D.F. - wnieść coś do sprawy. Jeżeli nie potraficie się powstrzymać od małostkowych przytyków - nie próbujcie pomagać. Szkoda waszych palców.

Aha. I Google przekopałem. Mogę kopać jeszcze kilka dni. Czasem lepiej zapytać kogoś, kto może mieć w pewnym obszarze ciut więcej doświadczenia. Dobrze. Mogę sobie tutaj pisać jeszcze niewiadomoco. Panowie i tak będą wiedzieli lepiej kim jestem i co soba prezentuję. Trudno.

Prosiłbym, żebyście nie wniosili swojego wkładu w pomoc w tym temacie jeżeli nie macie nic konkretnego do zaoferowania. Dziękuję za uwagę.
 
Ostatnia edycja:

dodoxx6

Były Moderator
Dołączył
Luty 15, 2011
Posty
252
Nie obrażamy siebie nawzajem, szczególnie na forum!
Temat zostaje bez off-topowego kawałku, ale jeśli zamiast rozwiązywać problemy będziecie się atakować zostanie zamknięty.
Miłej dyskusji.

dodoxx6
 

toyman

Użytkownik
Dołączył
Lipiec 1, 2009
Posty
5
D.F. na razie dał mi spory materiał do przetrawienia. Muszę znaleźć chwilę czasu, żeby zdekompilować za pomocą DeDe (albo EMS Source Rescuera) aktualną kopię aplikacji.

Pytanie do mądrzejszych, którzy wykonywali taką operację:

DeDe / EMS Source Rescuer i PE Explorer po dekompilacji podają adresy metod (Source Rescuer robi to najfajniej, bo odbudowuje kod zbliżony do Delphiowego) - pytanie jak mają się te adresy, do adresów w pamięci kiedy aplikacja jest uruchomiona ? Pytam pod kątem ustawienia breakpointa.
 

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
adresy są statyczne (chyba że jak otworzysz ponownie to masz coś innego)
tzn jak uruchomisz program to pod tym adresem zawsze jest ta metoda
 
Do góry Bottom