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

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 модуле ?
     
    1. #colorblind

      #colorblind Moderator

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

        mirvirusov New Member

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

          mankurt13 Well-Known Member

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

            cocosyan New Member

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

              Damper Member

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

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