akwes |
» 2011-06-23 21:56:45 "Nie, nie można z poziomu aplikacji modyfikować danych należących do systemu bądź do innej aplikacji."
Dlaczego nie można? Właśnie CheatEngine pozwala zamrozić zmienne w pamięci lub je bezczelnie zmienić, tak mam rekord w IceTower na nk.pl
Z odczytem wartości i porównaniem może być problem. Musisz być pewien że dana wartość się nie zmienia.
Bawiąc się gierkami Flash i własnie cheatengine często się odsiewa dużą ilość danych przez samo sprawdzenie czy "wartość w pamięci nie uległa zmianie". Po kilku krokach tej opcji potrafi odpaść kilku set tysięcy wartości potrafi zostać 3-6 tysięcy.
Jeżeli chcesz pewności to ustaw CheatEngine na jakaś wartość, rzuć ją do listy niżej, daj "freze" i zobacz w kodzie...
a zreszta sam to zrobie zaraz :P
Ok, ustawiłem w CE żeby szukało wartości 1byte (zwykle szuka 4byte, a nie chciało mi się sprawdzać sizeof ile ma int itd... ) Wartości pokazało różne, ale po zmianie w programie, CE dostał szału i wszystkie wartości widzane zmienił na "??" |
|
yoogi Temat założony przez niniejszego użytkownika |
» 2011-06-23 23:20:49 Aha, czyli mam rozumieć że z odczytaniem będzie duży problem ? |
|
akwes |
» 2011-06-23 23:32:40 Tzn. Odczytać na pewno się da i na pewno da się zmienić. Tylko że w teorii 1. Niektóre wartości zmieniają się bardzo szybko, naprawdę bardzo szybko (nie wiem jak CheatEngine je zamraża, na pewno nie robi tego timerem co milisekundy, bo musiałby to robić czasami szybciej niż procesor, a jakim cudem by to robił xD?), 2. Aby odczytana informacja miała sens trzeba wiedzieć ile bajtów zajmuje. Bo wiadomo że inne dane wyjdą z odczytania int, inne z bool. Jeżeli masz zewnętrzny program, który gdzieś zapisuje informację w znanej Ci postaci to nie powinno być problemu (w sumie też zaraz sprawdzę... ). Jednak stworzenie CheatEngine wymaga pewnie znajomości specjalnych algorytmów (albo jeden dobrej biblioteki, gdzie ktoś już wszystko rozwiązał :) i wiedzy o tym jak jest deklarowana pamięć przez system (Jeżeli chcesz czytać tylko RAM to trzeba wiedzieć że pierwsze adresy to adresy pamięci ram z np. Karty Graficznej). jeśli chodzi o polecenie bool * wsk = reinterpret_cast < bool * >( adres ) To ono działa ale nie działa :) Otóż, kiedy podałem adres np. 0x00020007 to zachodziły takie zależności Gdy napisałem program, który w nieskończonej pętli ładował tam wartość "true" to CheatEngine podgląd na ten adres niezmiennie wskazywał zero. Kiedy napisałem program za pomocą tego kodu, który odczytuje zmienną, i znów odpaliłem ten sam z nieskończoną pętlą, to adres zmiennej był nie zmienny i pokazywał zero. Kiedy w jednym programie odczytałem wartość stamtąd (wyszło 0) i napisałem jedynką i znów wypisałem (wyszło 1). Jednak w CheatEngine i wcześniejszym programie dalej widniało 0. Nie wiem. Nie rozumiem, ale wygląda jakby wartość w pamięci zmieniała się jedynie dla aktualnego programu. |
|
yoogi Temat założony przez niniejszego użytkownika |
» 2011-06-24 03:20:43 Uuuu... trochę się opisałeś, aż miło popatrzeć :) A ja w tym czasie znalazłem rozwiązanie: #include <Windows.h> #include <iostream> using namespace std; int main() { HWND hwnd; DWORD ID; DWORD rw = 0; HANDLE handle; int a; int b = 100; unsigned adres = 0x38F8C0; for(;; ) { hwnd = FindWindow( NULL, "KeyMemory" ); GetWindowThreadProcessId( hwnd, & ID ); handle = OpenProcess( PROCESS_ALL_ACCESS, false, ID ); ReadProcessMemory( handle, LPCVOID( adres ), & a, sizeof( a ), & rw ); cout << "Zmienna A to: " << a << endl; cout << "Podaj wartosc do zmienienia: "; cin >> b; WriteProcessMemory( handle, LPVOID( adres ), & b, sizeof( int ), & rw ); CloseHandle( handle ); getchar(); } }
Ale niestety można tylko odczytywać dane danej aplikacji. |
|
Mrowqa |
» 2011-06-24 13:26:17 @up a jak robi to CheatEngine ?? Chyba nie bez powodu wybiera się proces :P ( teraz sobie o tym przypomniałem :P ).
Pozdrawiam, Mrowqa |
|
yoogi Temat założony przez niniejszego użytkownika |
» 2011-06-24 16:59:49 A jak mam uzyskać te wszystkie adresy ? |
|
akwes |
» 2011-06-26 17:45:53 Zainstaluj cheat engine i wejdź do folderu, jest od groma plików *.dll, większość pewnie nie jest ich, a po nazwie trafisz do biblioteki i kto wie, może któraś z nich to oferuje? (przeszukanie procesów, wybranie procesu oraz uzyskanie danych dotyczących alokowanego przezeń miejsca). |
|
asembler |
» 2011-06-26 17:59:31 |
|
1 2 « 3 » 4 |