Старые антиотладочные приемы на новый лад

       

простейший (но ненадежный) алгоритм трансляции адресов


Его можно встретить в некоторых вирусах и root-kit'ов (когда вы столкнетесь с ним при дизассемблировании вы будете знать, что это такое), однако, в легальных программах (особенно коммерческих!) его использование категорически недопустимо и потому необходимо либо все-таки писать свой драйвер, вызывающий MmGetPhysicalAddress из режима ядра, либо воспользовавшись тем фактом, что адреса из диапазона 80000000h: 877EF000h транслируются однозначно, внедрить в операционную систему специальный "жучок". То есть, фактически создать в ней свой собственный call-gate, позволяющий вызывать ядерные функции с прикладного уровня. Один из вариантов его реализации приведен в вышеупомянутой статье, однако, он не свободен от ошибок и на многопроцессорных машинах (которыми, в частности, являются все машины с материнской платой и процессором Pentium-4 с технологией Hyper-Threading, не говоря уже о многоядерных AMD), возможны "синие экраны смерти", которые опять-таки недопустимы...

Означает ли это, что данный антиотладочный прием полностью бесполезен? Вовсе нет! Трудности создания устойчивой и надежно работающей программы на его основе носят технический характер и вполне преодолимы. Если не трогать трансляцию, то никаких проблем вообще не возникает!



Содержание раздела