Programowe sterowanie postaciami w grze

0

Witam,
Nie znam się na tym więc wybaczcie za głupie pytanie :)
Jeżeli do aplikacji *.exe nie ma żadnego API a chciałbym móc w jakiś sposób ingerować w tą aplikację - to da się jakoś "nasłuchać" czy jak kolwiek wyciągnąć jakieś API do tej aplikacji, pomimo że takiego nie ma ?

1

A co robi to exe? Czesem tskie aplikacje udostępniają api przez dll

1

Tak udostępniają symbole.

Widziałem, że ten temat trochę odnosi się do poprzedniego z autoclickerem, mogłeś przeczytać o tym event driven w aplikacjach, bo śledząc eventy możesz dojść do funkcji, które one odpalają.

Tak możesz znaleźć co jest za funkcja wywoływana jak klikasz myszką na button, ale jak się nie czyta swoich tematów...

Inna sprawa możesz mieć wewnątrz innej aplikacji swój wątek i tam manipulować nią, ale trochę podstaw assemblera by się przydało.

0
S4t napisał(a):

A co robi to exe? Czesem tskie aplikacje udostępniają api przez dll

Nie chodzi mi nawet o konkretnie jakie *.exe - bo to tylko dla przykładu. Ale w tym przypadku zapytałem o *.exe bo chce nauczyć się na czymś....na początku na jakiejś grze online, włączanej z pliku *.exe:) Więc na pytanie co robi plik *.exe - chodzimy postacią w grze.. gramy :)

CloudPro napisał(a):

Widziałem, że ten temat trochę odnosi się do poprzedniego z autoclickerem

I tak i nie, tamten projekt udało mi się skończyć.... Ale teraz jestem ciekaw "jak to można zrobić inaczej" - chcę po prostu podedukować się z tego zakresu :) Ale chciałbym by mnie naprowadzono na właściwy trop - bo jestem samoukiem, bez szkoły programowania - stąd potrzebuje wskazówek a dalej już będę kombinować :D

CloudPro napisał(a): ale trochę podstaw assemblera by się przydało.

Znam podstawy VB.NET - czy ten język nada się do czegoś czy koniecznie trzeba nauczyć się assemlera ? :D

1

Znam "trochę podstaw assemblera" a wręcz kilku assemblerów, plus maszyn wirtualnych, drobne "kilka" lat skilu.
Ale byłby to dla mnie trudny temat.

3

Zainstaluj sobie Cheat Engine, w tym masz debugger, disassembler, memory scanner, można skryptować w assemblerze lub lua, potem możesz przepisać do innego języku.
Najpierw musisz poznać program jak działa, za nim cokolwiek będziesz pisał.

0

@CloudPro:

nic nie wiemy o docelowym targecie, czy jest natywny, a może w dotnecie albo w dżejwiem

@Jacek Milewski:

gratuluję konspiracji, czuję się jakbym kapitana Klossa oglądał.

Jacek Milewski napisał(a):

Znam podstawy VB.NET - czy ten język nada się do czegoś czy koniecznie trzeba nauczyć się assemlera ? :D

Z deko mało :(
Ktoś tu napisał: dopiero poznając DOBRZE trzeci język, naprawdę głęboko rozumiesz pierwszy. 100% prawdy.

Zwłaszcza że start masz od języka mocno niszowego, wykastrowanego, poranionego w niesamowitym stopniu

0
ZrobieDobrze napisał(a):

nic nie wiemy o docelowym targecie, czy jest natywny, a może w dotnecie albo w dżejwiem

co masz na myśli? (proszę prościej jakoś, nie jestem z wykształcenia programistą i nie rozumiem :D)

CloudPro napisał(a):

Zainstaluj sobie Cheat Engine, w tym masz debugger, disassembler, memory scanner, można skryptować w assemblerze lub lua, potem możesz przepisać do innego języku.
Najpierw musisz poznać program jak działa, za nim cokolwiek będziesz pisał.

Dobrze, zainstaluje ten program - z tego co pamiętam to on właśnie wyciągał częściowo "kod" z aplikacji (nie zawsze z pozytywnym skutkiem).
W jaki sposób później można zdekompilowany tym programem kod użyć już bezpośrednio w aplikacji - by wywołać w tej aplikacji jakieś działanie?

0

Prawdopodobnie nie wyciągniesz, no chyba że funkcja nie wywołuje innych funkcji, wtedy wyciągniesz, a tak nie ma sensu, bo ona będzie skakać w inne miejsca w kodzie, musisz albo całą aplikację sobie do pamięci zassać i rozwiązać symbole, albo w tej aplikacji zrobić sobie thread i korzystać z pamięci jak u siebie.

Tam masz disassembler i możesz podejrzeć kod assemblera funkcji.

Z visual basic prawodpodobnie będziesz mógł sobie otworzyć proces aplikacji i korzystać z ReadProcessMemory, WriteProcessMemory, ale musisz wiedzieć co gdzie i jak, czyli znaleźć adresy.
Jak strony pamięci tylko do wykonania i odczytu zmienisz na do zapisu to możesz nawet patchować grę do dowolnego zachowania.

0
Jacek Milewski napisał(a):
ZrobieDobrze napisał(a):

nic nie wiemy o docelowym targecie, czy jest natywny, a może w dotnecie albo w dżejwiem

co masz na myśli? (proszę prościej jakoś, nie jestem z wykształcenia programistą i nie rozumiem :D)

No właśnie ... google .net i JVM
Nawet jak uzyskasz podpowiedzi zawodowów, nic ci nie dadzą.

Nie zagrasz 9 Symfonii, jak dopiero pojedyncze nutki ćwiczysz na flecie (i czasem sie zagra fałszywie - akurat słyszę takie ćwiczenia, oj, nie będzie w te święta zagranej kolędy, nawet najprostszej, chociaż ktoś BARDZO CHCE)

Sugerowałbym, zająć się ogólnym prawdziwym programowaniem, podręczniki, prawdziwe własne programy od mniejszych do coraz większych, budować struktury danych, projektować klasy/inny podział kodu, debugować błędy
Do disasemblowania obcego kodu braknie ci przemyśleń, idei, odniesień w neoronach

1

Tak jak mówił @ZrobieDobrze przydaje się umieć programować i znać struktury danych, bo jak będziesz czegoś szukał musisz mieć w głowie, że to zwykły software.

Tam będzie jakiś vector<Enemy>/list<Enemy> w tej strukturze będą jakieś potworki Enemy, a te to będą jakimiś obiektami, które będą miały np. zmienne hp, name itp.
Teraz mając w głowie jak to może być zbudowane, możesz od znalezienie hp na ekranie iść w górze i znaleźć adres do struktury i sobie w pętli iterować po wszystkich potworach w grze.

Tak jak event loop, który jest zwykle częścią architektury takich programów gui i gier.
Tam zwykle będą różne zdarzenia obsługiwane i nie wiedząc, jak takie coś działa na prostych przykładach można się pogubić w czystym assemblerze.

1

Czyli chcesz napisać program który automatycznie steruję jakąś postacią w grze, lub gra za Ciebie? Mogłeś to od razu powiedzieć zamiast zaczynać temat od "api skompilowanej aplikacji". Klasyczny x/y.

0
Riddle napisał(a):

Czyli chcesz napisać program który automatycznie steruję jakąś postacią w grze, lub gra za Ciebie? Mogłeś to od razu powiedzieć zamiast zaczynać temat od "api skompilowanej aplikacji". Klasyczny x/y.

Ja taki program napisałem już. Ale teraz ciekaw jestem jak to można było zrobić "lepiej", używając tzw. "API" a nie sterowanie hotkeyami ;p
Bo obecnie wyciągam "grafikę" - obrabiam obraz w poszukiwaniu potworków - jeśli taki jest to pobieram współrzędne obrazka potworka i wywołuje kliknięcie myszką na tych kordynatach. Troszkę mocno obciąża to komputer, no i sam program napisany "dookoła". Uważam że można to było zrobić prościej i po prostu chciałbym się nauczyć jak coś takiego wykonać :)
Dziękuję wszystkim na naprowadzenie na temat, teraz wiem przynajmniej jakiej wiedzy potrzebuje :)

1
Jacek Milewski napisał(a):
Riddle napisał(a):

Czyli chcesz napisać program który automatycznie steruję jakąś postacią w grze, lub gra za Ciebie? Mogłeś to od razu powiedzieć zamiast zaczynać temat od "api skompilowanej aplikacji". Klasyczny x/y.

Ja taki program napisałem już. Ale teraz ciekaw jestem jak to można było zrobić "lepiej", używając tzw. "API" a nie sterowanie hotkeyami ;p
Bo obecnie wyciągam "grafikę" - obrabiam obraz w poszukiwaniu potworków - jeśli taki jest to pobieram współrzędne obrazka potworka i wywołuje kliknięcie myszką na tych kordynatach. Troszkę mocno obciąża to komputer, no i sam program napisany "dookoła". Uważam że można to było zrobić prościej i po prostu chciałbym się nauczyć jak coś takiego wykonać :)
Dziękuję wszystkim na naprowadzenie na temat, teraz wiem przynajmniej jakiej wiedzy potrzebuje :)

A czym się u Ciebie różni tzw. "API" od API? API to po prostu interfejs programistyczny, i mało która gra (może nawet żadna) takie wystawia.

1

zagadnienie się nazywa: reverse engineering

0

chyba CheatEngine nie jest w stanie wyciągnąć tych adresów, ofsetów, pointerów..
Gra na której testuje ma zabezpieczenia przed botami , może stąd Cheat Engine nic nie jest w stanie zdziałać

0

może poćwicz najpierw na grze która nie ma takich zabezpieczeń, najlepiej nawet napisanej przez samego siebie żeby wiedzieć dokładnie co się dzieje i gdzie czego szukać

0

A może ktoś wie jak ominąć zabezpieczenie do gier o nazwie "BattleEye" ? jak to działa i czego mam dokładnie użyć / pouczyć się

0

Poszukaj na necie pod hasłami bot/cheat jest sporo poradników jak podejść do inżynierii wstecznej, wyciągać adresy, robić zrzuty procesu, analizować asm i podpinać się pod grę (oczywiście zakładam, że gra to nie saper i nie pozwoli Ci po prostu złapać handlera do niej).
Jak już zrozumiesz te zagadnienia na grze, która nie jest zabezpieczona, możesz się wziąć za gry z prostymi zabezpieczeniami. I tak stopniowo, aż dojdziesz do punktu gdzie będziesz mógł próbować te zabezpieczane znanymi antycheatami. Ogólnie sporo zabawy i ciekawej nauki jak ktoś chce iść w tym kierunku.

Ah i przestrzegam, że używanie copypast z neta, które mają 'obejść' zabezpieczenia może zakończyć się blokadą konta szybciej niż się tego spodziewasz :)

0

ten cały BattleEye blokuje robienie zrzutów ekranu - podczas robienie zrzutu ekranu jest czarny ekran gry - chciałbym wiedzieć jak to ominąć, jak oni zablokowali to robienie zrzutu ekranu ? może ktoś wie?

2

@Jacek Milewski: nawet nie napisałeś w jaki sposób robisz ten screenshot.

No tak antycheat blokuje, musisz trochę pokombinować:

  • Print screen windowsowy działa? jeśli tak to obraz będziesz mógł pobrać ze schowka getClipBoardData.
  • Możesz nagrać swój monitor zewnętrzną kamerką na usb.
  • Programy typu OBS mają swoje hooki, które są whitelist certificated i antycheaty zezwalają im na dostęp do modyfikacji, a te tam pobierają obraz przy pomocy opengl/directx glreadpixels/getfrontbufferdata.
  • Można hook na tego obs zrobić, który ma zezwolenie i korzystać z tych funkcji w swoim programie.
  • W grze można zrobić screenshot i on się pojawia w jakimś katalogu, mógłbyś trigerować skrótem klawiszowym screenshot in game i odczytać go z katalogu.
  • Obraz wychodzi po HDMI, można jakiś HDMI splitter dać, jeden do monitora, drugi do adaptera hdmi -> usb.

Później już kernel zostaje, możesz poszukać sobie jakichś antycheat bypassów lub samemu napisać.
Np. kernel driver udostępnia jakieś funkcjonalności, potem wstrzykujesz dll do twojego programu, tam hookujesz aktualne syscalle, które są blokowane na te twoje ze sterownika.

Na githubie jest pełno projektów i tutoriali do antycheatów obejścia.

Pewnie jeszcze jakieś ciekawe sposoby obejścia się znajdą, ale mi się już trochę pokończyły, w kernelu pewnie nieograniczone są możliwości, ale trudniejsze do wykonania.

0

@GodOfCode.:
Print screen windowsowy nie działa.
Po zrobieniu Print Screena i wklejeniu do Paina jest czarny obraz zamiast obrazu gry.

Jak to najlepiej obejść bez wszelkich dodatkowych "kamerek pod usb" o których wyżej wspomniałeś

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