Есть прога которая привязывается к железу, в том числе и к CPUID. Патчить не приемлемо, потому что прога регулярно обновляется и запакована аспром. Как можно перехватить вызов инструкции CPUID ? MS-REM когда то сказал на CrackLab: Можно сделать cpuid привилегированной инструкцией, ловить исключения и эмулировать. Как это можно сделать, может кто примерами поделиться ? Известно, что перед CPUID вызывается GetComputerNameA который мне тоже нужно менять. Я сделал лоадер на базе либ MS-REMа который перехватывает GetComputerNameA. Когда происходит перехват прога уже полностью загружена и распакована в память. Может найти в памяти процедуру которая вызывает CPUID и пропатчить ? Подскажите как это сделать. Заранее благодарен.
Знаю как сделать rdtsc привилегированной - http://twister.orgfree.com/notes.php#n_privrdtsc, а тебе нужно рыть в ту же сторону. Что сделать? Найти процедуру? Конкретизируй...
Я имел ввиду: Найти последовательность байт в памяти процесса и изменить. В смысле вообще как получить доступ и читать/писать код приложения в памяти. Если я делаю InjectThisExe в приложение, то после этого приложение считается своим или чужим ?
asmlamo Проще будет распаковать ASP и все же пропатчить .... Это можно, но как я уже говорил выше прога постоянно обновляется, а каждый раз ковырять её неохото... Ясно нормально хукнуть CPUID сложно... Подскажите тогда как пропатчить прогу в памяти.
Взял адрес возврата из GetComputerNameA, прошелся поиском по байтам, нашел CPUID и уже патчиш как хош.
Вообще термин хукнуть более правильно относить к API функциям ОС. CPUID это не API функция а команда процессора. Единственный способ это неких образом сделать ее привелигированной инструкцией и ловит эксепшин. Но это непростой путь ...
С чего бы? Относи к чему хочешь, лишь бы люди тебя понимали. Разве CPUID является привелегированной инструкцией хоть на каком-нибудь уровне привелегий?
PaCHER Можно подробней... имея адрес я смогу читать/писать в память процесса без каких либо разрешений и т.д. ? как получить адрес возврата ? (Сама прога написана на делфи и лоадер тоже) пробовал так, но не получаеться... Код (Text): asm push EAX mov EAX,[esp+4] mov adress,EAX pop EAX end; W4FhLF Насколько я знаю то не являеться не на каком... Но вроде както можно сделать её привелегированной.
SergX Никак. IA-32: Exceptions (All Operating Modes) - None. Если только на древних 386\486 запускать Нет, нужно разрешить запись через VirtualProtect\VirtualProtectEx mov можно использовать только в самом процессе (после инжекта своего кода), а для записи в посторонний процесс - WriteProcessMemory
SergX Сделать это просто. Я делал это из драйвера. Оттуда перехватывал некоторые native функции, это значило что прога распакована, затем в проистановленной проге вёлся сигнатурный скан нужных мне участков кода. Всё это патчилось так, что возникало исключение при проезде проца по данному коду. Исключение я ловил и скармливал cpuid какие нужно данные. вот и всё.
<MS-REM когда то сказал на CrackLab: Можно сделать cpuid привилегированной инструкцией, ловить исключения и эмулировать. > Нельзя. Можно её ограничить эту команду. Точнее в передаваемых ей параметрах. В случае если передавался ограниченный параметр, может быть и возникает какоето исключение. Скорее всего он имел ввиду следующее: команда CPUID патчтится так, что далее представляет из себя привелегированную инструкцию, при наезде на неё процем и возникнет исключение. По другому я хз как.
А ты уверен что он там будет ? А если там к примеру на основе данных от этой команды происходит генерация ключа ?