Witam,
jest to pytanie czysto teoretyczne i ciągle się zastanawiam jak coś takiego zrobić. Pisałem w Delphi, mogę pisać też w C++. Patrzę na różne boty do gier internetowych online i widać, że wykorzystywane są tam metody typu przechwycenie połączenia i wysyłanie pakietów (co udało mi się zrobić), skanowanie pamięci (co w sumie jest podstawą i jest śmiesznie proste) oraz modyfikacja programu "w locie", aby zmienić jego sposób działania (a więc podmiana instrukcji ASM).
Zastanawiam się jednak, że jest to droga bardzo na około. Tak więc w jaki sposób mogę korzystać z funkcji w tej aplikacji znając jej adres? Zamiast przechwytywać połączenie i wysyłać pakiety np. przejścia do danej pozycji można po prostu wywołać funkcję już tam wbudowaną. Tak samo zamiast przechwytywać połączenie, zmodyfikować callbacka tak, aby wskazywał na naszą funkcję która później by zwracała sterowanie do programu.
Aby korzystać z przestrzeni pamięci tego programu wydaje mi się, że należy użyć DLL Injection. Wtedy w locie mogę zmienić tok działania i zmusić aplikację do skoku pod adres funkcji z "wciśniętego" DLLa.
Problemem dla mnie jednak jest wywołanie już istniejącej funkcji i za bardzo nie wiem jak miałbym to zrobić. Czy oznacza to konieczność stosowania assemblera do wywołania? Tj. wrzucenie parametrów funkcji na stos, wpisanie adresu powrotnego do EIP oraz skok pod adres funkcji? Byłbym wdzięczny za linki do jakichś artykułów, które to obrazują bo samemu nie byłem w stanie takich znaleźć.
Druga rzecz, to obsługa OllyDbg... Pewnie prosta sprawa, ale nie doszukałem się żadnego szczegółowego manuala. Włączam z poziomu debuggera aplikację, która już leci własnym życiem... W jaki sposób mam sprawdzić pod jaki adres dokonywany jest skok gdy naciskam jakiś przycisk w aplikacji?
Z góry dzięki za pomoc.