1

Тема: Пошук значення в динамічній пам'яті

Хай. Сабжик може не відповідає задачі на всі 100%, тому що я не можу описати все декількома словами. Задачка така. Є одна прога, (ігруля), в ній є така штука, як шкала життів, котра показує життя в відцотках, хоча в статистиці персонажу можна побачити і число. Мета така: знайти поточне значення життів в пам'яті програми, та вивести його в формочку, наприклад. Основною проблемою для мене є - знаходження потрібного значення. Використовуючи спеціальний софт я можу знайти потрібне значення, але при кожному запуску гри, воно змінює свою адресу.
Я читав, що в програмі є покажчик, котрий не змінює своєї адреси, і цей покажчик вказує на місце в пам'яті, де лежить потрібне мені значення. Але знаєте що? Потрібних значень в мене три. Це виглядає от так: я знайшов купу адрес с потрібним значенням, далі, в грі, змінюю кількість своїх життів, і бачу, як значення по трьом адресам змінюються також. Що мені робити? Як, при кожному запуску гри, знати, по якій адресі лежить потрібне мені значення? Мені потрібна лише теоретична частина, я все спробую зробити.

2

Re: Пошук значення в динамічній пам'яті

Варто пам’ятати, що ваше значення одне з багатьох, тому воно може знаходитися у структурі (класі). Тобто треба визначити початок структури (класу). А як початок визначено - тоді вже можна пошукати вказівник на структуру, який також може бути звичайним полем в класі ;)

3 Востаннє редагувалося FakiNyan (01.08.2014 00:00:40)

Re: Пошук значення в динамічній пам'яті

0xDADA11C7 написав:

Варто пам’ятати, що ваше значення одне з багатьох, тому воно може знаходитися у структурі (класі). Тобто треба визначити початок структури (класу). А як початок визначено - тоді вже можна пошукати вказівник на структуру, який також може бути звичайним полем в класі ;)

о господи, а як то визначити? Я читав, шо на адресу значення треба ставити брейкпоінт, і змінити значення в грі, а потім вилізе частина коду типу

mov [exb+0000001f],tb

і от тут 00000001f - є зміщенням, а далі треба від адреси значення відняти це зміщення і отримаємо адресу вказівника. Тобто подібну фігню треба проводити декілька разів, поки ми не отримаємо адресу, котра не буде змінюватись після перезавантаження проги?

4

Re: Пошук значення в динамічній пам'яті

о господи, а як то визначити?

Наочно :) У більшості випадків це не складно. По-перше усі поля класів вирівняні на 4, тобто закінчують на 0, 4, 8, С.
Типи полів бувають лише декількох видів - безпосереднє значення і вказівник. Особливістю інтелівської архітектури є те, що числа записуються не так як у людей, а у протилежному напрямку - з молодших розрядів до старших. Тож огляньте прилеглі до вашого значення комірки пам’яті і подивіться куди ведуть вказівники. Як найдете якусь константу - зможете створити сигнатуру для знаходження потрібного вам значення.

Брекпоїнти це добре, але спочатку спробуйте працювати з даними.

5

Re: Пошук значення в динамічній пам'яті

0xDADA11C7 написав:

о господи, а як то визначити?

Наочно :) У більшості випадків це не складно. По-перше усі поля класів вирівняні на 4, тобто закінчують на 0, 4, 8, С.
Типи полів бувають лише декількох видів - безпосереднє значення і вказівник. Особливістю інтелівської архітектури є те, що числа записуються не так як у людей, а у протилежному напрямку - з молодших розрядів до старших. Тож огляньте прилеглі до вашого значення комірки пам’яті і подивіться куди ведуть вказівники. Як найдете якусь константу - зможете створити сигнатуру для знаходження потрібного вам значення.

Брекпоїнти це добре, але спочатку спробуйте працювати з даними.

ну я не зовсім зрозумів, які вказівники ви маєте на увазі, і чому щось має бути поблизу мого значення, це якось просто. Зараз я пробував зробити от так: знайти адресу значення, а далі знайти всі статичні вказівники, котрі вказують на це значення, їх я знайшов десь біля 200, а то й більше. Далі я запам'ятовую адреси цих вказівників і перезапускаю програму. А після цього дивлюсь, на які значення вказують ті вказівники, і якщо вони вказують на шукане мною значення, то цей вказівник те, що мені потрібно. І як мені дізнатись, що от це значення являеться константою? там якось підсвітитись має чи що?

6 Востаннє редагувалося 0xDADA11C7 (01.08.2014 15:45:51)

Re: Пошук значення в динамічній пам'яті

ну я не зовсім зрозумів, які вказівники ви маєте на увазі

ви розумієте що клас "героя" містить життя, ману, ім’я і витривалість? так от ім’я є стрічковим типом, а воно зазвичай зберігаються як вказівник.

і чому щось має бути поблизу мого значення, це якось просто.

Це зовсім не просто, бо навіть прості структури даних мовах зі збором сміття з точки зору внутрішньої архітектури - складні. І щось має бути поблизу, бо ООП.
наприклад бачимо якийсь вказівник (на валідну пам’ять) - переходимо по ньому - а там ще вказівник - переходимо по ньому, а там буфер з ім’ям персонажа, а якщо ім’я персонажа менше ніж 15 символів, то другого вказівника нема, а на цьому місці - буфер з ім’ям персонажа.
а насправді у високорівневій мові с++ це виглядає як

std::string nameOfPerson;

7

Re: Пошук значення в динамічній пам'яті

0xDADA11C7 написав:

ну я не зовсім зрозумів, які вказівники ви маєте на увазі

ви розумієте що клас "героя" містить життя, ману, ім’я і витривалість? так от ім’я є стрічковим типом, а воно зазвичай зберігаються як вказівник.

і чому щось має бути поблизу мого значення, це якось просто.

Це зовсім не просто, бо навіть прості структури даних мовах зі збором сміття з точки зору внутрішньої архітектури - складні. І щось має бути поблизу, бо ООП.
наприклад бачимо якийсь вказівник (на валідну пам’ять) - переходимо по ньому - а там ще вказівник - переходимо по ньому, а там буфер з ім’ям персонажа, а якщо ім’я персонажа менше ніж 15 символів, то другого вказівника нема, а на цьому місці - буфер з ім’ям персонажа.
а насправді у високорівневій мові с++ це виглядає як

std::string nameOfPerson;

так мені не ім'я треба, а поточний рівень життя, і я його знаходжу за типом float

8

Re: Пошук значення в динамічній пам'яті

а я вас підводю до думки, що ім’я і рівень життя взаємопов’язані і виглядає це так.

    float health;
/* Щось іще*/.
    std::string nameOfPerson;

Зараз вам треба знайти константу, я пропоную - ім’я.
Тоді алгоритм пошуку такий - шукаєте ім’я - шукаєте вказівник на ім’я (можливо - шукаєте вказівник на вказівник на ім’я :)) поряд вказівником на ім’я знаходитиметься життя/мана/опір вогню і магії :)

9

Re: Пошук значення в динамічній пам'яті

0xDADA11C7 написав:

а я вас підводю до думки, що ім’я і рівень життя взаємопов’язані і виглядає це так.

    float health;
/* Щось іще*/.
    std::string nameOfPerson;

Зараз вам треба знайти константу, я пропоную - ім’я.
Тоді алгоритм пошуку такий - шукаєте ім’я - шукаєте вказівник на ім’я (можливо - шукаєте вказівник на вказівник на ім’я :)) поряд вказівником на ім’я знаходитиметься життя/мана/опір вогню і магії :)

ну окєй, зара повидаляю файлики, а то дурний cheat engine заглючив, та створив мені 140 тищ файликів з даними про покажчики, а потім ще встановлю Шин8.1 і спробую

10

Re: Пошук значення в динамічній пам'яті

Прихований текст

уявляєте, в мене є знайомий і в нього якісь трабли з його шльо.. дівкою, так він в себе в статусі ВК написав - "прости", ото довбень, ага? я так ржав

Подякували: 0x9111A1

11

Re: Пошук значення в динамічній пам'яті

О а ти уявляєш, я сьогодні знайшов собі репетитора з укр. Мови.
Тож якраз пост під дану тему, надіюсь допоможе вирішити твою проблему.

12

Re: Пошук значення в динамічній пам'яті

Прихований текст
Joker написав:

О а ти уявляєш, я сьогодні знайшов собі репетитора з укр. Мови.
Тож якраз пост під дану тему, надіюсь допоможе вирішити твою проблему.

шо вам треба? у вас ці дні?

Подякували: 0xDADA11C7, Felis silvestris catus, Joker3

13

Re: Пошук значення в динамічній пам'яті

Ні просто ніяк у лігу зла не можу поступити. Вирішив створити свою а тут проблемка - конкурентів усунути.

14

Re: Пошук значення в динамічній пам'яті

Joker написав:

Ні просто ніяк у лігу зла не можу поступити. Вирішив створити свою а тут проблемка - конкурентів усунути.

ви хочете потрапити до бану, чи що? тоді ви мені не кокурент

15

Re: Пошук значення в динамічній пам'яті

Вибачте щераз.

16

Re: Пошук значення в динамічній пам'яті

Joker написав:

Вибачте щераз.

Нізащо.

Прихований текст

Z214682529086

Подякували: 0xDADA11C71

17

Re: Пошук значення в динамічній пам'яті

Z214682529086 що це?

18

Re: Пошук значення в динамічній пам'яті

Рахунок веб-мані ;)

19

Re: Пошук значення в динамічній пам'яті

ой, млинець, не знаю, звідки воно там взялося...

20

Re: Пошук значення в динамічній пам'яті

навіщо велосипеди придумувати
артмані давно то все вміє, і головне має гайд хороший як знайти потрібний вам вказівник і зміщення

Подякували: FakiNyan1