Wyliczanie adresu w pamięci

0

Hi

Chciałbym wyliczyć pod jakim adresem będzie nowa wartość stringa (o zmiennej długości)

Wyciągam base address procesu:

Base: 18219008
HexBase: 1160000

Wyciągam kilka adresów CheatEnginem:

Addr1 = 12814C37
Addr2 = 128119AF
Addr3 = 1281AD27
Addr4 = 128190F7
Addr5 = szukany

I nie jestem pewien co tu źle robię:

Meth:

Diff1 = 12814C37 - 1160000 = ‭116B 4C37‬
Diff2 = 128119AF - 1160000 = 116B 19AF
Diff3 = 1281AD27 - 1160000 = 116B AD27
Diff4 = 128190F7 - 1160000 = 116B 90F7‬

Diff1 - Diff2 = 116B 4C37‬ - 116B 19AF = 3288
Diff2 - Diff3 = 116B 19AF - 116B AD27 = FFFF FFFF FFFF 6C88
Diff3 - Diff4 = 116B AD27 - 116B 90F7‬ = 1C30

V

Diff2 - Diff1 = 116B 19AF - ‭116B 4C37‬ = FFFF FFFF FFFF CD78‬
Diff3 - Diff2 = 116B AD27 - 116B 19AF = 9378‬
Diff4 - Diff3 = 116B 90F7‬ - 116B AD27 = FFFF FFFF FFFF E3D0‬

Te różnice coś mi się nie podobają :P

2

A skad w ogóle pomysł że te różnice ci coś dadzą? Zgaduje ze to są adresy ze sterty, więc to dość złudne liczyc na to, że względne adresy między tymi zmiennymi będą stałe. To czasem ma sens dla zmiennych na stosie, szczególnie jeśli sekwencja wywołań funkcji jest stała.
Ale dla sterty to nie takie proste, a już szczególnie jeśli długości tych stringów są zmienne. Bo jeśli np. przed chwilą zwolnił się mały blok o takim samym rozmiarze jak ten którego ktoś szuka, to dostanie ten poprzednio zwolniony blok, ale jeśli rozmiar jest inny albo nie ma nic na liscie ostatnio zwolnionych co by pasowało, to dostanie zupełnie nowy fragment sterty.

0

@Shalom:

Zatem jakie podejście można byłoby tu zastosować?

Wiem co mniej/więcej zawiera taki string, więc mógłbym jakoś skanować pamięć i szukać patternu w stringach?

2

No mógłbyś. Debugger albo ten twój CheatEngine wspierają takie rzeczy :) Pytanie tylko co ty chcesz z tym potem zrobić? Możesz też spatchować tą binarkę tak żeby leakowała ci te interesujące adresy czy coś.

0

@Shalom:

Pytanie tylko co ty chcesz z tym potem zrobić?

Chciałbym móc wyszukiwać te wartości "w locie", w swojej konsolówce, nawet jeżeli musiałbym z ręki podać jakiś initial state.

while(processIsRunning)
{
   DoSomething(GetValueFromMemoryOfOtherProcess(processName))
}

Możesz też spatchować tą binarkę tak żeby leakowała ci te interesujące adresy czy coś.

Brzmi świetnie, ale pewnie dużo trudnej roboty?

0

Hm jeśli to twój program to przecież możesz sobie sam te adresy leakować jeśli chcesz? A co do patchowania to trochę zależy od samej binarki i od tego czy jest tam miejsce na patcha czy nie.

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