Есть кряк программы, реализован лоадером, вшитым в импорт в виде dll DLL ка эта накрыта WinLicense и доблестный крэкер продает свой кряк под подписку, на время Когда время лицензии истекает его лоадер перестает работать и соответственно кряка тоже нет. Хитрожопая схема не так ли ? Так вот необходимо узнать, какие конкретно модификации делает лоадер в памяти процесса. У меня идея такая. Процесс достаточно динамичный, не сидит и не ждет от пользователя каких-то действий, поэтому помимо изменений вносимых лоадером в самом процессе происходят изменения "легальные", производимые самим процессом во время его работы. Было бы гораздо проще если бы это был обычный процесс, достаточно было бы отследить изменения в секции кода и вот они заветные байтики - бежим делать патч. Но все не так просто, процесс защищен от модификации различными проверками типа хеш-сумм некоторых критичных к изменениям функций. И лоадер помимо изменений в коде в любом случае делает патч еще этих хеш сумм, а они хранятся в секции данных, и помимо лоадера туда пишет процесс в ходе работы, как бы банально это не звучало. И нужно определить какие данные меняет лоадер, а какие данные меняются самим процессом, что бы разграничить их и сделать чистый патч без глюков. А то лишнего наворочу и приложение будет падать в итоге в самый неподходящий момент. Непорядок будет. Пока что я придумал такой вариант отделения изменений процесса и лоадера. Нужно снять 3(можно больше) дампа с оригинального процесса, который загружается без вмешательства лоадера и найти все байты которые не совпадают в этих дампах. Это и будут те переменные, которые меняются в процессе работы процесса им же самим. Далее я хочу забить все эти переменные в одном из дампов нулями и на время отложить его. Назовем его ориг_мод. Дальше такие же операции нужно будет произвести с процессом, который запускается с участием лоадера (снимаем несколько дампов и сравниваем) и разницу забиваем нулями, при этом вносимые лоадером изменения во всех дампах будут одинаковы и не попадут к числу переменных забиваемых нулями. Назовем этот модифицированный дамп с нулями лоад_мод. Далее нужно будет просто сравнить дамп ориг_мод c дампом лоад_мод и в итоге мы получим разницу только там где делает изменения лоадер, а места которые меняет сам процесс в обеих файлах будут забиты нулями и не будут различаться. Чем больше дампов я сниму на первых 2 этапах с различными промежутками времени, тем меньше на мой взгляд будет помех. Что скажете дамы и господа ? Может есть какой то другой более эффективный и короткий способ, как узнать, что делает лоадер накрытый WinLicense в другом dll модуле ?
Это очень хардкорный метод, который тем не менее имеет право на жизнь. Если жертва накрыта каким-то протом, то лодырь его инлайнит и фиксит не только секцию кода, но и секцию прота. Следовательно ваш метод может сработать, но не полностью. Особенно, если прот динамически выделяет память под выполнение кусков кода. Лично мне кажется проще всего анпакнуть лодырь и посмотреть, что он делает
Значит дампишь процесс и сравниваешь секции образа с эталоном, запущенным без лодыря - почти наверняка в коде будут хуки/патчи. Если не будут, ищи хуки на апях.
Лучше наверное отвязать саму программу, а не ковырять накрытый лоадер, тем более программа ничем не накрыта
Нет,не лучше,так ты нарушишь закон,а лодырёк-это чьё-то более легальное творение,которым ты пользуешься.Можно,с помощью программ,вроде Regshot,Regmon,Filemon,Procmon попробовать отследить различия в съёмках реестра до установки и после установки,к каким участкам реестра и файлам обращается лодырёк.Возможно,что лодырёк создаёт где-то среди файлов свой файлик,от данных которых он ведёт отсчёт даты начала своей работы.Так же,можно попробовать отмотать системное время или дату назад до даты-времени установки лодырька,возможно,что автор не учёл этого и лодырёк не создаёт точек расчёта до конца своей работы...по любому,если лодырёк создаёт точку где-то в ветке реестра,то эту ветку можно попробовать отредактировать...а отслеживаемый файлик удалить и лодырёк переустановить... Вообще,как вариант можно установить лодырёк в программу находящейся в системе под виртуальной машиной и пользоваться им,когда закончится срок работы лодырька,то переустановить всё вместе с системой и пользоваться далее...и будет вам счастье...