Jak zamrozić adres w pamięci programu

0

Napisałem program który zmienia w adresie w pamięci jakiegoś programu pewną wartość,jednak niemal natychmiast program automatycznie przywraca poprzednią wartość.Jak zrobić aby nowa wartość przypisana prze zemnie nie była zmieniana przez program?

0
  1. wyłączyć w programie aktualizację tej zmiennej (rozwiązanie bez sensu i nie wiem czy możliwe)
  2. zmienić wartość zmiennej w miejscu z którego jest przepisywana i aktualizowana a nie w miejscu gdzie jest już pobrana
0

Ale jak to znaleźć przy użyciu jakiegoś hex edytora?

0

Może skorzystaj z programu Cheat Engine albo jakiegoś w tym stylu. Cheat Engine ma w starszych wersjach źrodła w Delphi, a z
tego co autor odpisał mi na forum najnowsze wersje będą miały już źródła w lazarusie. TYlko, że Cheat Engine przeszukuje nieco
inaczej pamięć procesu niż ja umiem to zrobić. A zamrożenie pamięci można zrobić w wątku, wcześniej OpenProcess, a w wątku
co na przykład 100 milisekundowy Sleep robić WriteProcessMemory pod dany adres danej wartośći. Więcej na temat tych funkcji
jest w msdnie, a jak podejrzewam w google, znajdzie się też dużo przykładów, na to jak zrobić prosty trainer z ów funkcjami ;/
Nie wiem czy dobrze kombinuję, ale jak zrobisz zmianę wartośći dość częśto w krótkim czasie to przechytrzysz program lub grę.

0

Właśnie nie wiem czy da się na to nabrać obiekt moich badań, ponieważ próbowałem sprawdzić czy da się zamrozić w cheat engine.Ale to nie do końca skutkowało ponieważ program później pobiera te wartości i raz pobiera tą starą a raz nową w zależności czy trafi w czasie na odświeżenie i nadpisanie przez cheat engine lub nadpisanie starej wartości przez program.Z tym że częściej trafia na tą starą wartość.Trochę zagmatwałem wypowiedź ale mam nadzieje że zrozumiecie o co mi chodzi.

0

To jedyne rozwiązane jakie przychodzi mi do głowy to pod debuggerem założyć pułapkę na WriteProcessMemory, o ile tak ten
program - cel zapisuje pamięć albo nie wiem hmemcpy może i śledzić kod, ale ja dawno tego nie robiłem i w zasadzie nigdy z
tego co kojarzę nie zakładałem pułapek na funkcje inne niż pokazywanie MessageBoxów czy okien lub sprawdzających napędy
albo pobierających tekst z kontrolek czyli najbardziej przydatnych w "poprawianiu" gier czy programow. Wiele tu nie doradze,
bo dawno się nie bawiłem, ale może ktoś inny coś podpowie, bo pewnie bez "poprawienia" kodu programu się nie obędzie ;/

0

Olesio, dobrze kombinujesz, ale nie tędy droga.

Należy stworzyć uproszczony debugger, który albo za pomocą pułapki sprzętowej na zapis do pamięci (przez rejestry DR*) albo poprzez PAGE_GUARD będzie śledził odwołania do zmiennej. W momencie próby modyfikacji wątek zostanie przerwany a kontrola trafi do debuggera, ten w następnej instrukcji po prostu przywróci odpowiednią wartość. Oczywiście nie daje to gwarancji gdyż nowa wartość poza zapisem do zmiennej może być bezpośrednio używana dalej z rejestru.

0

No wiec udało się z timerem ustawiłem co 1ms i jakoś działa,ale wiem że to niedoskonały pomysł i nie będzie to na dłuższą metę w moim programie, w wolnym czasie będę musiał pogooglować na temat tych pułapek bo się zainteresowałem.Dzięki wielkie za chęć pomocy!!!.

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