ищу антидебаг инди

Тема в разделе "WASM.SOURCES & 2LZ", создана пользователем galenkane, 23 ноя 2023.

  1. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    298
    Вообщем пофиксил основную часть, вывод в логе.
    Трабл есть с WsGet который сканит память модулей что залезли в ПО. Нужно ресерчить еще, а так годнота
    --- Сообщение объединено, 24 сен 2024 ---
    для фикса WsGet нужно увеличить
    Local Mm[2048]:ULONG
     

    Вложения:

  2. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    298
    кто захочет подебажит)
     

    Вложения:

  3. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    429
    Какой критерий палива
    безусловная терминация процесса или что-то еще?
     
  4. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    298
    из длл полет нормальный, тестовая структура для вывода
    --- Сообщение объединено, 24 сен 2024 ---
    на таймерах вылетает без анхуков разных под скиллахайдом ,дальше не тестил еще
    --- Сообщение объединено, 24 сен 2024 ---
    но код бодрый, под мультипоток замутить будет пушка
     

    Вложения:

    • main.zip
      Размер файла:
      130,4 КБ
      Просмотров:
      69
  5. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    429
    под дебуггером валится на

    Log data, item 2
    Address = 1000262B
    Message = Access violation when writing to [000000D0] - passed to application
     
  6. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    298
    там валится должно да,главное под продакшен чтобы не мешало
    --- Сообщение объединено, 24 сен 2024 ---
    по критериям подойдет опрос структуры раз в минуту думаю,кому как нрав.

    всевдокод

    Код (ASM):
    1. ; cb.asm
    2. ; Добавьте следующие глобальные переменные и функции
    3.  
    4. .data
    5. gDebugLog DEBUG_LOG <?>
    6. gDebugLogMutex HANDLE ?
    7. gUpdateThreadHandle HANDLE ?
    8. gStopUpdateThread BOOL FALSE
    9.  
    10. .code
    11. UpdateDebugLogThread proc
    12.     .while !gStopUpdateThread
    13.         ; Захват мьютекса
    14.         invoke WaitForSingleObject, gDebugLogMutex, INFINITE
    15.        
    16.         ; Обновление gDebugLog
    17.         ; ... (код для обновления различных полей gDebugLog)
    18.         inc gDebugLog.UpdateCounter
    19.        
    20.         ; Освобождение мьютекса
    21.         invoke ReleaseMutex, gDebugLogMutex
    22.        
    23.         ; Ожидание перед следующим обновлением
    24.         invoke Sleep, 100  ; Обновление каждые 100 мс
    25.     .endw
    26.     ret
    27. UpdateDebugLogThread endp
    28.  
    29. StartDebugLogUpdate proc
    30.     ; Создание мьютекса
    31.     invoke CreateMutex, NULL, FALSE, NULL
    32.     mov gDebugLogMutex, eax
    33.    
    34.     ; Создание потока обновления
    35.     invoke CreateThread, NULL, 0, addr UpdateDebugLogThread, NULL, 0, NULL
    36.     mov gUpdateThreadHandle, eax
    37.    
    38.     ret
    39. StartDebugLogUpdate endp
    40.  
    41. StopDebugLogUpdate proc
    42.     ; Установка флага остановки
    43.     mov gStopUpdateThread, TRUE
    44.    
    45.     ; Ожидание завершения потока
    46.     invoke WaitForSingleObject, gUpdateThreadHandle, INFINITE
    47.    
    48.     ; Закрытие хэндла потока
    49.     invoke CloseHandle, gUpdateThreadHandle
    50.    
    51.     ; Закрытие мьютекса
    52.     invoke CloseHandle, gDebugLogMutex
    53.    
    54.     ret
    55. StopDebugLogUpdate endp
    56.  
    57. GetDebugLog proc pDebugLog:PTR DEBUG_LOG
    58.     ; Захват мьютекса
    59.     invoke WaitForSingleObject, gDebugLogMutex, INFINITE
    60.    
    61.     ; Копирование данных
    62.     invoke CopyMemoryInternal, pDebugLog, addr gDebugLog, sizeof DEBUG_LOG
    63.    
    64.     ; Освобождение мьютекса
    65.     invoke ReleaseMutex, gDebugLogMutex
    66.    
    67.     ret
    68. GetDebugLog endp
    69.  
    70. ; ... (остальной код остается без изменений)
    Код (C++):
    1. #include "cblib.h"
    2. #include <iostream>
    3. #include <iomanip>
    4. #include <thread>
    5. #include <atomic>
    6. #include <chrono>
    7.  
    8. std::atomic<bool> g_stopThread(false);
    9. DEBUG_LOG g_latestDebugLog;
    10.  
    11. void UpdateDebugLogThread() {
    12.     while (!g_stopThread) {
    13.         GetDebugLog(&g_latestDebugLog);
    14.         std::this_thread::sleep_for(std::chrono::milliseconds(50));
    15.     }
    16. }
    17.  
    18. void PrintDebugLog(const DEBUG_LOG& debugLog) {
    19.     // ... (код для вывода содержимого DEBUG_LOG)
    20. }
    21.  
    22. bool DetectAnomaly(const DEBUG_LOG& debugLog) {
    23.     // Пример простой проверки на аномалию
    24.     if (debugLog.IsDebuggerPresent || debugLog.SysexitFlags != 0) {
    25.         return true;
    26.     }
    27.     return false;
    28. }
    29.  
    30. int main() {
    31.     // Запуск обновления DEBUG_LOG в DLL
    32.     StartDebugLogUpdate();
    33.  
    34.     // Создание потока для обновления g_latestDebugLog
    35.     std::thread updateThread(UpdateDebugLogThread);
    36.  
    37.     // Основной цикл программы
    38.     int anomalyCounter = 0;
    39.     while (true) {
    40.         if (DetectAnomaly(g_latestDebugLog)) {
    41.             anomalyCounter++;
    42.             std::cout << "Warning: Debug detected! (" << anomalyCounter << " times)" << std::endl;
    43.         }
    44.  
    45.         // Вывод текущего состояния DEBUG_LOG каждые 5 секунд
    46.         if (g_latestDebugLog.UpdateCounter % 50 == 0) {
    47.             PrintDebugLog(g_latestDebugLog);
    48.         }
    49.  
    50.         std::this_thread::sleep_for(std::chrono::milliseconds(100));
    51.  
    52.         // Пример условия выхода из цикла
    53.         if (anomalyCounter > 10) {
    54.             std::cout << "Too many anomalies detected. Exiting." << std::endl;
    55.             break;
    56.         }
    57.     }
    58.  
    59.     // Остановка потока обновления и очистка ресурсов
    60.     g_stopThread = true;
    61.     updateThread.join();
    62.     StopDebugLogUpdate();
    63.  
    64.     return 0;
    65. }
    --- Сообщение объединено, 24 сен 2024 ---
    Вот мультипоточный с реализацией кода выше
     

    Вложения:

    • antik_mt.7z
      Размер файла:
      112,5 КБ
      Просмотров:
      65
  7. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    298
    сорцы рабочей либы + пример как в нативе юзать

    StkTrapResult: 0x00000000
    TrIsDebug: 0x00000000

    это в отладке

    если
    StkTrapResult: 0xc0000353
    TrIsDebug: 0xc0000353
    то не отлаживают
     

    Вложения:

    • adb2.7z
      Размер файла:
      157,5 КБ
      Просмотров:
      12
  8. Ahimov

    Ahimov New Member

    Публикаций:
    0
    Регистрация:
    Понедельник
    Сообщения:
    1
    Привет.

    Это отлаживалось на старом крэклабе и там в конце была проблема с анстабом связанная с планировщиком(сброс кэша для стека и есчо что то).

    GtCall & RtCall - реализация этого. Перед вызовом загружается шифрованный указатель на код возврата и адрес который прочитает ядро, без выборки из юзер. При вызове состояние треда восстанавливается, в частности сбрасывается тф если до вызова небыло трассировки. Сохраненное состояние в юзер не прочитать, вызовы мб рекурсивны(цепь):
    SvMsgBox сохраняет контекст и ключ, возвращая управление. RtMsgBox читает ключ и восстанавливает контекст, передавая управление на шифрованный адрес. SvGetTicks формирует цепь адресов возврата, RtGetTicks возвращает управление проходя цепь.

    Ws* это проверка рабочего набора, если память прочитать(например просмотрев отладчиком) он изменится.

    По антидебагу интересное вот это было, в частности что бы пином не крутили, из того что помню :)
     
  9. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    298
    ну можешь доделать,собирается на masm32v11