Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wysiwetlenie danych o danym adresie

Ostatnio zmodyfikowano 2011-06-26 19:49
Autor Wiadomość
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 "??"
P-34527
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 ?
P-34532
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.
P-34536
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:
C/C++
#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.
P-34542
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
P-34591
yoogi
Temat założony przez niniejszego użytkownika
» 2011-06-24 16:59:49
A jak mam uzyskać te wszystkie adresy ?
P-34618
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).
P-34726
asembler
» 2011-06-26 17:59:31
P-34729
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona