Полные сорцы вот этих, там еще был cb.exe скомпиленный cb.asm - код на ассемблере, который реализует перехват вызовов API ядра Windows и обратных вызовов. Вот основные моменты: - Вызов Setup() инициализирует структуры данных и вызывает функции для перехвата API. - NtGateInit настраивает шлюзы для перехватываемых вызовов NT API. - %NTCALL и %RCALL - макросы для выполнения перехваченных системных вызовов. - NtCrcToId отображает CRC хеш API на его системный ID, вероятно, для сокрытия использования. - Код обработки обратных вызовов вроде WwSetupCallback используется для обработки обратных вызовов в перехваченных API. - Используются различные механизмы для скрытия от отладчиков и мониторинга стека. Основные задачи: - Построение таблицы поиска для перехватываемых API - Установка шлюзов для перехваченных вызовов - Сопоставление API по CRC вместо имени для сокрытия - Перехват обратных вызовов и параметров - Скрытие от отладчиков Это позволяет перехватывать вызовы ядра на низком уровне и скрытно изменять поведение программ. В целом, похоже на фреймворк для хуков, мониторинга и внедрения в вызовы ядра Windows.
мужики помогите дофиксить, собирается чудом на masm 6.5 http://gri-software.ru/files/tia/masm.zip --- Сообщение объединено, 18 сен 2024 в 16:13 --- запуск по Ctrl+Shift+B через VSCode там пару плагинов под цветастость есть
щас затык почему PEB не видит при запуске --- Сообщение объединено, 18 сен 2024 в 17:50 --- через это не запустит уверен
Код (Text): 00000B04 64: A1 2C mov Eax,fs:[TEB.Peb] 00000070 Судя по комментариям, у тебя подключены заголовки, которых в проекте нет. Я ядро нт десятилетиями не листаль но fs:[0x70] как-то странно для PEB. Код (Text): 00000074 C TEB STRUCT C ; NtTib теперь определена как отдельные поля 00000000 00000000 C ExceptionList DWORD ? 00000004 00000000 C StackBase DWORD ? 00000008 00000000 C StackLimit DWORD ? 0000000C 00000000 C SubSystemTib DWORD ? 00000010 00000000 C FiberData DWORD ? 00000014 00000000 C ArbitraryUserPointer DWORD ? 00000018 00000000 C Self DWORD ? C ; Остальные поля TEB 0000001C 00000000 C EnvironmentPointer DWORD ? 00000020 00000000 C ClientId_UniqueProcess DWORD ? 00000024 00000000 C ClientId_UniqueThread DWORD ? 00000028 00000000 C ActiveRpcHandle DWORD ? 0000002C 00000000 C ThreadLocalStoragePointer DWORD ? 00000030 00000000 C ProcessEnvironmentBlock DWORD ? 00000034 00000000 C LastErrorValue DWORD ? 00000038 00000000 C CountOfOwnedCriticalSections DWORD ? 0000003C 00000000 C CsrClientThread DWORD ? 00000040 00000000 C Win32ThreadInfo DWORD ? C ; ... другие поля ... 00000044 00000000 C Tib NT_TIB <> 00000000 00000000 00000000 00000000 00000000 00000000 00000060 00000000 C Cid CLIENT_ID <> 00000000 C ; Other TEB fields 00000068 00000000 C ProcessId DWORD ? 0000006C 00000000 C ThreadId DWORD ? C ; ... (add other fields as needed) 00000070 00000000 C Peb DWORD ? C ; Add other fields as needed C TEB ENDS Майкрософт утверждает, что 4*12=48(0x30) валидное смещение для указателя PEB. Код (Text): typedef struct _TEB { PVOID Reserved1[12]; PPEB ProcessEnvironmentBlock; PVOID Reserved2[399]; BYTE Reserved3[1952]; PVOID TlsSlots[64]; BYTE Reserved4[8]; PVOID Reserved5[26]; PVOID ReservedForOle; PVOID Reserved6[4]; PVOID TlsExpansionSlots; } TEB, *PTEB; --- Сообщение объединено, 18 сен 2024 в 20:08 --- ЗЫ: https://cracklab.team/index.php?threads/1318/ неожиданно, но многое прояснилось.
У крелка вроде правильно: Код (Text): TEB STRUCT NtTib NT_TIB <> EnvironmentPointer DWORD ? ClientId CLIENT_ID <> ActiveRpcHandle DWORD ? ThreadLocalStoragePointer DWORD ? ProcessEnvironmentBlock DWORD ? ... 28+4+8+4+4=48 Код (Text): %ENVP macro R mov R,fs:[TEB.ProcessEnvironmentBlock] mov R,dword ptr [R][DENV] assume R:PENV endm Шляпа в .lst-файле, я так понял это уже ты собирал и хз из чего: Код (Text): C %ENVP macro R C mov R,fs:[TEB.Peb] C mov R,DWORD PTR [R][DENV] C assume R:PENV C endm Код (Text): 00000070 00000000 C Peb DWORD ?