Перейти к содержанию

Рекомендуемые сообщения

Документация говорит, что:

Sets the entry to frozen state. updownfreeze is optional. 0=freeze, 1=allow increase, 2=allow decrease

Так что должно быть что-нибудь вроде:

memoryrecord_freeze(memoryrecord, 0)

Хотя и пишут, что второй аргумент не обязателен. Покажи весь код, заодно проверь, есть ли права на эту страницу памяти.

Ссылка на комментарий
Поделиться на другие сайты

Да это понятно. Код пусть будет самый простой-поиск адреса и его заморозка.

1-ищу аобсканом по сигнатуре адрес

2-хочу этот адрес заморозить с пом меморирекорд


memoryrecord_freeze (adresnaydenniy,0)

Никакой заморозки не происходит.


memoryrecord_freeze(memoryrecord, 0)

тут memoryrecord- что это?

Ссылка на комментарий
Поделиться на другие сайты

Memoryrecord тут, как я понимаю, адрес памяти. Который, кстати, бесполезно искать aobscan'ом, ибо он ищет адрес инструкции (код), а не памяти (данные). Адреса памяти ищутся через указатели.

Т.е. (пвесдокод):

0x12345678: mov eax,[ebx]

И при этом ebx = 0x7654321. Вот адрес инструкции, работающей с памятью, найти можно по сигнатуре байт через aobscan. А заморозить можно адрес, с которым эта инструкция работает, т.е. 0x7654321.

Ссылка на комментарий
Поделиться на другие сайты

Ок, вот дамп из Olly:


CPU Disasm
Address Hex dump Command Comments
00A910B4 |. 6A 38 PUSH 38 ; /Arg3 = 38
00A910B6 |. 8D4424 5C LEA EAX,[ESP+5C] ; |
00A910BA |. 6A 00 PUSH 0 ; |Arg2 = 0
00A910BC |. 50 PUSH EAX ; |Arg1

Это, значит, код программы, загруженный в память. Да - и код, и данные, с которыми код работает - всё хранится в памяти. Ты находишь какой-нибудь адрес поиском в СЕ, например, 0x123456. Типа, скажем, 4 байт целое. Открываешь отладчик и тебе выскакивает инструкция:

00A910B6  |.  8D4424 5C	 LEA EAX,[ESP+5C]						 ; |

Мол, вот эта инструкция пишет в твой 0x123456, который ты нашёл, насяльнике! Ты открываешь дизассемблер и видишь картинку выше (дамп).

Дык вот в момент срабатывания инструкции в [ESP+5C] действительно находится адрес памяти 0x123456, который ты нашёл ранее.

Казалось бы, при чём здесь 0x00A910B4, стоящий напротив инструкции? Это - адрес памяти, по которому загружена эта самая инструкция.

Вот aobscan нужен для того, чтобы искать местоположение инструкции в памяти, а не адреса данных, с которыми эти инструкции работают. Местоположение у нас в данном случае - 0x00A910B4. Адрес, с которым инструкция работает - 0x123456.

Так что как ни пытайся - "заморозить" инструкцию не получится. Зато вполне получится заморозить адрес, с которым она работает - 0x123456.

А всё почему? Вот что по-твоему делает заморозка? Она делает вот так:


Записать в 0x123456 значение 100
Подождать 100 мсек

Записать в 0x123456 значение 100
Подождать 100 мсек

Записать в 0x123456 значение 100
Подождать 100 мсек...

Поэтому пытаться заморозить код - бесполезно. Само собой, туда тоже можно записаь 100, но толку не будет.

Становится понятнее?

Ссылка на комментарий
Поделиться на другие сайты

Я тебя понял. Но адрес который я нашел как раз тот, что нужен. Если я от него найду адрес, который получает доступ к нему, то его сложно морозить, тк обращается он ко многим другим адресам

Принцип заморозки буду так и делать прописывать значение в адрес.

Ссылка на комментарий
Поделиться на другие сайты

Как бы, если инструкция работает со многими адресами памяти - можно просто найти указатель на нужный и морозить его.

Второй вариант - написать скрипт, ищущий аобсканом нужную инструкцию и прикручивающий к ней фильтр. Типа, если адрес нужный - то с ним ничего не делать.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.