Метода как узнать, что делает лоадер

Discussion in 'Реверсинг' started by mirvirusov, 14 Jul 2021.

  1. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Есть кряк программы, реализован лоадером, вшитым в импорт в виде dll
    DLL ка эта накрыта WinLicense и доблестный крэкер продает свой кряк под подписку, на время
    Когда время лицензии истекает его лоадер перестает работать и соответственно кряка тоже нет. Хитрожопая схема не так ли ?

    Так вот необходимо узнать, какие конкретно модификации делает лоадер в памяти процесса.
    У меня идея такая. Процесс достаточно динамичный, не сидит и не ждет от пользователя каких-то действий, поэтому помимо изменений вносимых лоадером в самом процессе происходят изменения "легальные", производимые самим процессом во время его работы. Было бы гораздо проще если бы это был обычный процесс, достаточно было бы отследить изменения в секции кода и вот они заветные байтики - бежим делать патч. Но все не так просто, процесс защищен от модификации различными проверками типа хеш-сумм некоторых критичных к изменениям функций. И лоадер помимо изменений в коде в любом случае делает патч еще этих хеш сумм, а они хранятся в секции данных, и помимо лоадера туда пишет процесс в ходе работы, как бы банально это не звучало. И нужно определить какие данные меняет лоадер, а какие данные меняются самим процессом, что бы разграничить их и сделать чистый патч без глюков. А то лишнего наворочу и приложение будет падать в итоге в самый неподходящий момент. Непорядок будет.

    Пока что я придумал такой вариант отделения изменений процесса и лоадера.
    Нужно снять 3(можно больше) дампа с оригинального процесса, который загружается без вмешательства лоадера и найти все байты которые не совпадают в этих дампах. Это и будут те переменные, которые меняются в процессе работы процесса им же самим. Далее я хочу забить все эти переменные в одном из дампов нулями и на время отложить его. Назовем его ориг_мод.
    Дальше такие же операции нужно будет произвести с процессом, который запускается с участием лоадера (снимаем несколько дампов и сравниваем) и разницу забиваем нулями, при этом вносимые лоадером изменения во всех дампах будут одинаковы и не попадут к числу переменных забиваемых нулями. Назовем этот модифицированный дамп с нулями лоад_мод.

    Далее нужно будет просто сравнить дамп ориг_мод c дампом лоад_мод и в итоге мы получим разницу только там где делает изменения лоадер, а места которые меняет сам процесс в обеих файлах будут забиты нулями и не будут различаться. Чем больше дампов я сниму на первых 2 этапах с различными промежутками времени, тем меньше на мой взгляд будет помех.

    Что скажете дамы и господа ? Может есть какой то другой более эффективный и короткий способ, как узнать, что делает лоадер накрытый WinLicense в другом dll модуле ?
     
  2. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    632
    Likes Received:
    245
    Reputations:
    42
    Это очень хардкорный метод, который тем не менее имеет право на жизнь. Если жертва накрыта каким-то протом, то лодырь его инлайнит и фиксит не только секцию кода, но и секцию прота. Следовательно ваш метод может сработать, но не полностью. Особенно, если прот динамически выделяет память под выполнение кусков кода. Лично мне кажется проще всего анпакнуть лодырь и посмотреть, что он делает
     
  3. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Жертва не накрыта никаким протом, накрыт только лоадер
     
  4. mankurt13

    mankurt13 Well-Known Member

    Joined:
    18 Oct 2019
    Messages:
    373
    Likes Received:
    1,398
    Reputations:
    3
    Значит дампишь процесс и сравниваешь секции образа с эталоном, запущенным без лодыря - почти наверняка в коде будут хуки/патчи. Если не будут, ищи хуки на апях.
     
  5. cocosyan

    cocosyan New Member

    Joined:
    19 Feb 2013
    Messages:
    18
    Likes Received:
    1
    Reputations:
    5
    Лучше наверное отвязать саму программу, а не ковырять накрытый лоадер, тем более программа ничем не накрыта
     
  6. Damper

    Damper Member

    Joined:
    6 Jul 2015
    Messages:
    51
    Likes Received:
    17
    Reputations:
    1
    Нет,не лучше,так ты нарушишь закон,а лодырёк-это чьё-то более легальное творение,которым ты пользуешься.Можно,с помощью программ,вроде Regshot,Regmon,Filemon,Procmon попробовать отследить различия в съёмках реестра до установки и после установки,к каким участкам реестра и файлам обращается лодырёк.Возможно,что лодырёк создаёт где-то среди файлов свой файлик,от данных которых он ведёт отсчёт даты начала своей работы.Так же,можно попробовать отмотать системное время или дату назад до даты-времени установки лодырька,возможно,что автор не учёл этого и лодырёк не создаёт точек расчёта до конца своей работы...по любому,если лодырёк создаёт точку где-то в ветке реестра,то эту ветку можно попробовать отредактировать...а отслеживаемый файлик удалить и лодырёк переустановить...

    Вообще,как вариант можно установить лодырёк в программу находящейся в системе под виртуальной машиной и пользоваться им,когда закончится срок работы лодырька,то переустановить всё вместе с системой и пользоваться далее...и будет вам счастье...
     
    #6 Damper, 17 Oct 2021
    Last edited: 19 Oct 2021