Wyliczanie adresu w pamięci

Odpowiedz Nowy wątek
2019-07-29 23:35
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

edytowany 8x, ostatnio: WeiXiao, 2019-07-29 23:45
Nie licz adresu w pamięci, użyj kalkulatora :P - Burmistrz 2019-07-29 23:44

Pozostało 580 znaków

2019-07-30 00:27
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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 2x, ostatnio: Shalom, 2019-07-30 00:30

Pozostało 580 znaków

2019-07-30 00:42
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?

edytowany 9x, ostatnio: WeiXiao, 2019-07-30 00:56

Pozostało 580 znaków

2019-07-30 00:49
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ś.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-07-30 00:54
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?

edytowany 6x, ostatnio: WeiXiao, 2019-07-30 00:59

Pozostało 580 znaków

2019-07-30 01:05
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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Mój ma ukraść z tego innego, a później robić swoje na nim :P jak boty do gier - WeiXiao 2019-07-30 01:06
To może prosciej: zamiast próbować wyliczyć adres na stercie gdzie jest ten string, to leakuj adres POINTERA który na tego stringa pokazuje, bo w miejscu gdzie jest używany ten pointer pewnie będzie na stosie, a te adresy raczej będzie się dało faktycznie policzyć względnie. - Shalom 2019-07-30 01:16

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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