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

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

  1. mirvirusov

    mirvirusov New Member

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

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

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

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

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

    #colorblind Moderator

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

    mirvirusov New Member

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

    mankurt13 Well-Known Member

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