misha Опубликовано 3 июля, 2012 Поделиться Опубликовано 3 июля, 2012 Собственно пытался использоватьmemoryrecord_freezeНо ничего не морозит. И как сейчас на форуме писать в личку? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 июля, 2012 Поделиться Опубликовано 3 июля, 2012 Документация говорит, что:Sets the entry to frozen state. updownfreeze is optional. 0=freeze, 1=allow increase, 2=allow decreaseТак что должно быть что-нибудь вроде:memoryrecord_freeze(memoryrecord, 0)Хотя и пишут, что второй аргумент не обязателен. Покажи весь код, заодно проверь, есть ли права на эту страницу памяти. Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 3 июля, 2012 Автор Поделиться Опубликовано 3 июля, 2012 Да это понятно. Код пусть будет самый простой-поиск адреса и его заморозка.1-ищу аобсканом по сигнатуре адрес2-хочу этот адрес заморозить с пом меморирекордmemoryrecord_freeze (adresnaydenniy,0)Никакой заморозки не происходит.memoryrecord_freeze(memoryrecord, 0)тут memoryrecord- что это? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 июля, 2012 Поделиться Опубликовано 3 июля, 2012 Memoryrecord тут, как я понимаю, адрес памяти. Который, кстати, бесполезно искать aobscan'ом, ибо он ищет адрес инструкции (код), а не памяти (данные). Адреса памяти ищутся через указатели.Т.е. (пвесдокод):0x12345678: mov eax,[ebx]И при этом ebx = 0x7654321. Вот адрес инструкции, работающей с памятью, найти можно по сигнатуре байт через aobscan. А заморозить можно адрес, с которым эта инструкция работает, т.е. 0x7654321. Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 3 июля, 2012 Автор Поделиться Опубликовано 3 июля, 2012 Сорри, но для меня не очень понятно. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 июля, 2012 Поделиться Опубликовано 3 июля, 2012 Ок, вот дамп из Olly:CPU DisasmAddress Hex dump Command Comments00A910B4 |. 6A 38 PUSH 38 ; /Arg3 = 3800A910B6 |. 8D4424 5C LEA EAX,[ESP+5C] ; |00A910BA |. 6A 00 PUSH 0 ; |Arg2 = 000A910BC |. 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, но толку не будет.Становится понятнее? Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 3 июля, 2012 Автор Поделиться Опубликовано 3 июля, 2012 Я тебя понял. Но адрес который я нашел как раз тот, что нужен. Если я от него найду адрес, который получает доступ к нему, то его сложно морозить, тк обращается он ко многим другим адресамПринцип заморозки буду так и делать прописывать значение в адрес. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 июля, 2012 Поделиться Опубликовано 3 июля, 2012 Как бы, если инструкция работает со многими адресами памяти - можно просто найти указатель на нужный и морозить его. Второй вариант - написать скрипт, ищущий аобсканом нужную инструкцию и прикручивающий к ней фильтр. Типа, если адрес нужный - то с ним ничего не делать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения