детект сканирования памяти процесса

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 25 Mar 2020.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    идея индея, да и крякми или что это было я хз.
    вообщем суть такова, - когда память вашего процесса ктото сканит, например читэнджина, в простом случае это можно задетектить (если там не через дрова режим), т.к. области памяти будут подгружаться в озу и соответственно попадать в список рабочего набора процесса, а если мы точно знаем что у нас есть такие, которых в этом списке быть не должно - значит ктото кудато не туда полез.

    Code:
    #include <windows.h>
    
    #pragma comment(linker, "/ENTRY:start")
    
    
    extern "C" __declspec(dllimport) NTSTATUS WINAPI ZwQueryInformationProcess(HANDLE,DWORD,PVOID,ULONG,PULONG);
    extern "C" __declspec(dllimport) NTSTATUS WINAPI ZwSetInformationProcess(HANDLE,DWORD,PVOID,ULONG);
    extern "C" __declspec(dllimport) NTSTATUS WINAPI ZwQueryVirtualMemory(HANDLE,PVOID,DWORD,PVOID,SIZE_T,PSIZE_T);
    
    
    LPVOID g_WSMemList[16384];   // .bss
    
    
    void initialize(void)
    {
       /*
        typedef struct _QUOTA_LIMITS {
           SIZE_T PagedPoolLimit;
           SIZE_T NonPagedPoolLimit;
           SIZE_T MinimumWorkingSetSize;
           SIZE_T MaximumWorkingSetSize;
           SIZE_T PagefileLimit;
           LARGE_INTEGER TimeLimit;
       } QUOTA_LIMITS, *PQUOTA_LIMITS;
       */
    
      NTSTATUS st;
      DWORD parambuf[8];
     
                        /* ProcessQuotaLimits */
      st = ZwQueryInformationProcess((HANDLE)-1, 1, parambuf, sizeof(parambuf), 0);
      if (st == 0) {
        parambuf[2] = 0xffffffff;
        parambuf[3] = 0xffffffff;
                        /* ProcessQuotaLimits */
        ZwSetInformationProcess((HANDLE)-1, 1, parambuf, sizeof(parambuf));
      }
      return;
    }
    
    
    bool find_address(LPVOID addr)
    {
      int cntr;
                                               /* MemoryWorkingSetList */
      if ( ZwQueryVirtualMemory((HANDLE)-1, 0, 1, g_WSMemList, sizeof(g_WSMemList), 0) )
        return false;
    
      cntr = (int)g_WSMemList[0];
      while ((SIZE_T)addr != ((SIZE_T)g_WSMemList[cntr] & 0xFFFFF000))
      {
        if ( !--cntr )
          return false;
      }
      return true;
    }
    
    
    void start()
    {
      LPVOID testalloc;
     
      AllocConsole();
      testalloc = (LPVOID)VirtualAlloc(0, sizeof(void*), 4096, 4); // вот это трогать нельзя, если оно попало список - значит ктото сюда обращался. а это палево.
     
      initialize();
     
      
      do
        Sleep(100);
      while ( !find_address(testalloc) );
    // сканер спалился
      MessageBoxA(0, "CYKA BLYAT!", 0, 0);
      ExitProcess(0);
    }
    
     
  2. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    А авер ? Он кстати читает нынче в контексте своего родного процесса или текущего ?
    Ибо ничто ему не мешает туда полезть посканить и подгрузить страницу вроде. Тоесть будет срабатывать чуть менее чем у всех сей детектор.
     
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    а что авер? как только память влетает в рабочий набор - то сканер спалился, если там не гипервизор конеш
     
  4. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    Да просто не ясно как это юзать вместе со сканером.
    Авер влезет в твою память в контексте рандомного процесса (вероятнее всего). Произойдет детект вещающий что calc.exe влез туда куда его не просили.

    Ну это прикольно конечно, но зачем ? :)
    ===================
    Хотя в принципе надо бы скомпилить...
     
  5. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    Это не о стеке, Блитц :) Это о том как задетектить чей-то нехороший процесс, который копается где не надо.
    Что-то типа мины. Тронешь память - сработает взрыватель.
     
    altblitz likes this.
  6. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,146
    Reputations:
    236
    Ничего не понимайтунг в этих ваших новоязах.
    Так или иначе, сторонняя програ, в работе своей сделает обращение ко стеку.
    Возможно и вероятно, не сама, но с использованием .dll Windows.

    Блиц, не написал ни одной программы,
    но эти крэки и кей-гены, научился расшифровывать слёту, снимая ебанный алгоритм само-шифрации и получая исходный код с начальным адресом 004000 ))
     
  7. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    всмысле? ты просто аллоцируешь блок виртуальной памяти и он в статусе MEM_COMMIT - т.е. зарезервен в pagefile.sys, а вот когда уже эти адреса читаешь или пишешь(или сторонний дядька с другого процесса) - то это ессна вылетает в RAM, ну и это и есть рабочий набор (WorkingSet)
    и смысл кода - обнаружить изменения в WorkingSetе собственного процесса
     
  8. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    Ну так авер когда ковыряется у тебя в потрохах чекает же память ? По идее он и попытается узнать что за хрень там выделена.
    Надо чекнуть конечно на нескольких аверах - но чото есть такое сильное подозрение что будет ложный детект.
     
  9. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    авер юзает direct kernel object manipulation, а что касается например касперского - то там еще и гипервизор, который хукает ссдт обходя этот патчгвард итд - так что в юзермоде ты ничего точно не почуствуешь. таки дела. аппаратная виртуализация, бро, это как говорят, ring -1

    но простой юзермодный софт который попробует почитать твою память, типа отладчика - спалится априори
     
  10. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    Вообще какбэ против не особо активного злоумышленника можно просто хардверную бряку на чтение поставить... Зависит от цели.
    Причем авер скорее всего на ней не попадется.

    Х/з. Надо плясать от конкретной задачи и тестить.
     
  11. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    Может зависеть от авера.
     
  12. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    если авер не разбирается в том что делает - то на рынке он засветится и моментально сольётся, да и смысл - ими и так забит вирустотал.
    разве что накодить хелоуворлд, получить подписчиков, сорвать бабло да съебаться)
     
  13. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    Ну так-то да. Но в Европе, например, их покупают :)
    Вообще какбэ писать антивирусы - это вполне себе неплохая тема. Может и не надолго - но можно пару десятков килоевро на пиво раздобыть.
     
  14. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    там в целом то нечего писать, ну разве что через AVX оптимизировать пузырьком инструментацию каждого потока в системе. да и то, я думаю, давно уже сделали. сейчас всё перешло в юзермод на уровне "никто никому не мешает"
     
    DartPhoenix likes this.
  15. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,146
    Reputations:
    236
    Длинно-негодавливый сморчок.

    [​IMG]

    Все парни и девицы нашего Античата освоили компиляцию кернела с Clang и -О3.
    А твоя, опять тому мальчику 10 лет, трусики спускал после урока и лобок ему лизал девственный?
     
  16. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    вообщето там есть и -mabi=ms, да и куча прочих деталей при генерации кода. ну это так тебе, например. да еще и Hikari obfuscator. поставлю тебе + если додумаешься как его собрать)
     
  17. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,146
    Reputations:
    236
    И не спросит вашенская, как Блиц тренировал себя на креках да кей-генах.
    То старина и дела, тех ушедших дней. Славно им почивати ))

    Вот эти самые обфускаторы, коль речь зашла о них.
    Ломательны они, но доо-о-олго. Очень даже.

    Прогнать ~50 KB ключе-генератора, пока он распакует сам себя - это действительно сложно.
    А вот сам алго ломки программы - оче даже просто, как оно оказывается ))

    Sina hard rock

     
  18. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,258
    Reputations:
    327
    обфускаторы предназначены не для усложнения крека этого ниггерского, но для того, чтобы размывать статические сигнатуры кода. в целом - это один из основных шагов при сборке бота, например. крипторы так и работают, с той лишь разницей что пейлоад размазывается по секциям стаба, пройдя предварительную проверку по всем аверам. и далее этот конфиг запускается в продакшн.
     
    user100 likes this.
  19. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,146
    Reputations:
    236
    Значит, мы о разном талдычим?
    Обфускаторами или крипторами, называю ту часть кода, что запускается первой,

    [​IMG]

    в длительном процессе распаковывает себя догола, и теперь, вовремя словить точку входа непосредственно в кей-ген.

    (девушка, совершеннолетняя она)
     
  20. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,080
    Likes Received:
    8,149
    Reputations:
    25
    Мрак. Основная бывшая причина моих страданий с населением, которое не одупляет что крипт может работать несколько иначе если он на основе ВМ.
    Ты им уже на картинках рисуешь и объясняешь что намерен некоторую часть их кода превратить в бессмысленный набор байт сильно похожий на текст - они гривой машут... машут... а потом вопрос "а мы сами стаб сможем править" ?

    Какой в мамину вашу п*** стаб ??? Русским по белому же пишется что это ВМ, встраивается прямо в код, генерируется автоматом и хер ты там ее отличишь от обычного кода. Это не "стаб" бл... ! Часть кода никогда не будет расшифрована полностью ни моя ни ваша ! Бляха реально картинки рисовал. Опять гривой помахали, типо поняли. Вопрос номер следующий: так что, каждый день надо к тебе обращаться за исправлениями ?

    В третий раз объясняешь что генерится рандомная виртуальная машина и палится она ох как не скоро, надо просто запустить еще раз если внезапно спалилась и обращаться надо будет раз в ... месяц, в две недели... не знаю, зависит от того что за говно там льется.

    Нет, грит. Мы бы хотели сами стаб исправлять. Фууууф. Ну ок. До свидания. Час объяснений впустую...
    Ух бл... Ненавижу общаться с заказчиком напрямую.
     
    user100 likes this.