Полные сорцы вот этих, там еще был 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 --- Сообщение объединено, Sep 18, 2024 --- запуск по Ctrl+Shift+B через VSCode там пару плагинов под цветастость есть
щас затык почему PEB не видит при запуске --- Сообщение объединено, Sep 18, 2024 --- через это не запустит уверен
Code (Text): 00000B04 64: A1 2C mov Eax,fs:[TEB.Peb] 00000070 Судя по комментариям, у тебя подключены заголовки, которых в проекте нет. Я ядро нт десятилетиями не листаль но fs:[0x70] как-то странно для PEB. Code (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. Code (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; --- Сообщение объединено, Sep 18, 2024 --- ЗЫ: https://cracklab.team/index.php?threads/1318/ неожиданно, но многое прояснилось.
У крелка вроде правильно: Code (Text): TEB STRUCT NtTib NT_TIB <> EnvironmentPointer DWORD ? ClientId CLIENT_ID <> ActiveRpcHandle DWORD ? ThreadLocalStoragePointer DWORD ? ProcessEnvironmentBlock DWORD ? ... 28+4+8+4+4=48 Code (Text): %ENVP macro R mov R,fs:[TEB.ProcessEnvironmentBlock] mov R,dword ptr [R][DENV] assume R:PENV endm Шляпа в .lst-файле, я так понял это уже ты собирал и хз из чего: Code (Text): C %ENVP macro R C mov R,fs:[TEB.Peb] C mov R,DWORD PTR [R][DENV] C assume R:PENV C endm Code (Text): 00000070 00000000 C Peb DWORD ?
Code (Text): mov eax,dword[fs:30h] ; PEB_32 mov rax,qword[gs:60h] ; PEB_64 ;----------------------------------------------- 0: kd> dt _teb32 nt!_TEB32 +0x000 NtTib : _NT_TIB32 +0x01c EnvironmentPointer : Uint4B +0x020 ClientId : _CLIENT_ID32 +0x028 ActiveRpcHandle : Uint4B +0x02c TLSPointer : Uint4B +0x030 ProcessEnvironmentBlock : Uint4B _PEB32 +0x034 LastErrorValue : Uint4B ;....... 0: kd> dt _teb nt!_TEB +0x000 NtTib : _NT_TIB +0x038 EnvironmentPointer : Ptr64 +0x040 ClientId : _CLIENT_ID +0x050 ActiveRpcHandle : Ptr64 +0x058 TLSPointer : Ptr64 +0x060 ProcessEnvironmentBlock : Ptr64 _PEB +0x068 LastErrorValue : Uint4B ;.......
PeGetNativeBase встал на movzx eax,[edi].BaseDllName._Length --- Сообщение объединено, Sep 23, 2024 --- собрал на masm 6.14 но чето валится снова movzx eax,[edi].BaseDllName._Length --- Сообщение объединено, Sep 23, 2024 --- пеб вычисляет хоть ) --- Сообщение объединено, Sep 23, 2024 --- помог рандом хак PEB_LDR_DATA STRUCT _Length DWORD ? Initialized BYTE ? undefined1 BYTE ? ; undefined undefined2 BYTE ? ; undefined u3 BYTE ? ; undefined SsHandle DWORD ? InLoadOrderModuleList LIST_ENTRY <> InMemoryOrderModuleList LIST_ENTRY <> InInitializationOrderModuleList LIST_ENTRY <> EntryInProgress DWORD ? ShutdownInProgress BYTE ? u4 BYTE ? ; undefined u5 BYTE ? ; undefined u6 BYTE ? ; undefined ShutdownThreadId DWORD ? PEB_LDR_DATA ENDS --- Сообщение объединено, Sep 23, 2024 --- RPL 0x19FE1C Setup.PeGetNativeBase 0x0019FE1C NtGateInit.PTR 0x0019FE0C Setup.NtGateInit 0x19FE1C Setup.ENV 0x0019FE1C Setup.NTCRC 0x19FE1C Setup.TLS 0x0019FE1C Setup.TsGet 0x0019FE1C TmInit.TmCreateTimer 0x19FE14 TmInit.TmSetTimer 0x19FE14 TmInit.TmAccessFile 0x19FE14 TmInit.TmAccessFile 0x19FE14 TmInit.TmNewObject 0x19FE14 Setup.StkTrap 0x19FE18 STKCRC 0x2220000 Setup.Key 0x19FE1C NtReTree.PeMapView 0x19FDF0 Setup.STKCRC 0x19FE1C Setup.NtReTree 0x19FE1C Под дебагом получаю.. без Scyllahide.. если вкл на макс то DEP Violation осталось ток остальной лог докурить