Сейчас на форуме: igorcauret, Rio (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Не срабатывают никакие остановы. OllyDBG 1.10 |
Посл.ответ | Сообщение |
|
Создано: 25 февраля 2015 00:59 · Личное сообщение · #1 В какой-то момент в памяти появляется нужный мне текст. Не могу определить в какой момент. Hardware Breakpoint ставлю - текс появляется как ни в чем не бывало без останова. Memory BP ставлю, F9, Ольга кричит "OllyDbg is unable to activate memory breakpoint on address range 02E145A0..02E145A0. Breakpoint is completely removed". ReadFile исключил (Кстати, не откажусь от наставлений, как ловить текст от ReadFile). Что еще может быть? ![]() |
|
Создано: 25 февраля 2015 05:45 · Личное сообщение · #2 |
|
Создано: 25 февраля 2015 07:00 · Личное сообщение · #3 Есть функция ReadFile BOOL WINAPI ReadFile( _In_ HANDLE hFile, _Out_ LPVOID lpBuffer, _In_ DWORD nNumberOfBytesToRead, _Out_opt_ LPDWORD lpNumberOfBytesRead, _Inout_opt_ LPOVERLAPPED lpOverlapped ); Если ставить любые точки останова на lpBuffer, то они не сработают на всех ОС во всех случаях. Ситуация моделируется полностью. При чем тут экстрасенс? Есть ли способ все-таки поймать момент записи в lpBuffer? Как это сделать? Какие еще есть подобные процедуры, где происходит обход точек останова на запись? Добавлено спустя 13 минут LoadString, по -моему, таким же макаром работает, но она также не используется в программе для заполнения памяти. ![]() |
|
Создано: 25 февраля 2015 07:29 · Личное сообщение · #4 volopas пишет: Есть ли способ все-таки поймать момент записи в lpBuffer? дык оно в ядре пишется (ZwReadFile), а OllyDbg - это прикладной уровень. Понятное дело, что просто так не достанешь! Разве что, как функа ReadFile отработала и ты стоишь на RET в kernel32, тогда можно поставить останов на буфере и посмотреть, кто берет данные из него. ![]() |
|
Создано: 25 февраля 2015 07:43 · Личное сообщение · #5 |
|
Создано: 25 февраля 2015 08:20 · Личное сообщение · #6 |
|
Создано: 25 февраля 2015 08:45 · Личное сообщение · #7 |
|
Создано: 25 февраля 2015 09:07 · Личное сообщение · #8 reversecode пишет: очередной старфорс Так старфорс уже подох, вроде. Не надо вспоминать покойных ![]() volopas Может страница, на которой ставите точки точки, меняет атрибуты доступа через VirtualProtect или другая антиотладка. В любом случае надо ссылку на программу! Наверняка там какой-то говнопрот, как уже заметил reversecode ![]() |
|
Создано: 25 февраля 2015 09:09 · Личное сообщение · #9 |
|
Создано: 01 марта 2015 11:44 · Поправил: volopas · Личное сообщение · #10 Code:
Данная программа - Microsoft Virtual PC 2007 SP1 - ссылки см . https://exelab.ru/f/action=vthread&forum=5&topic=23441 При попытке поставить memory breakpoint on access ольга делает VirtualProtectEx Code:
GetLastError показывает 000001E7: Code:
Добавлено спустя 12 минут Непонятно даже , где прога исполняет код виртуальной среды. Прога создает кучу потоков, постоянно переключается между ними. Оттрасировать не получается. Добавлено спустя 1 час 29 минут Если взять ту же Ольгу , запустить ее внутри виртуальной машины, открыть Ольгой любой EXE (можно саму себя), вбить в EntryPoint любые инструкции по вкусу, то эти инструкции таки появляются в памяти отлаживаемого Virtual PC.exe. Эти секции памяти появляются неясным образом. Поставил IN3 BP на все процедуры выделения памяти - результат нулевой. Пока есть 2 проблемы: 1. Механизм выделения памяти под виртуальную машину. 2. Не срабатывают точки останова при обращении к памяти с кодом виртуальной машины во время выполнения этого кода внутри машины (внутри машины в ольге производится RUN) Добавлено спустя 7 часов 21 минуту Прога вызывает Code:
В окне хендлов: Code:
Что это за устройство "\Device\VMM"? ![]() |
|
Создано: 02 марта 2015 11:26 · Поправил: volopas · Личное сообщение · #11 Обнаружено, что в Vitrual PC.exe делаются следующие >004FCA20 /. 55 PUSH EBP ; ... >004FCA5A |. E8 E10BFAFF CALL Virtual_.0049D640 ; >>0049D68A . FFD2 CALL EDX >>>004FCFA1 |. E8 3A000000 CALL Virtual_.004FCFE0 ; >>>>004FD051 |. E8 BA9F0100 CALL Virtual_.00517010 ; -103/-102 (4) >>>>> Code:
После этого DeviceIoControl создается область в памяти с размером 2000 для которой нельзя поменять доступ (ПКМ > Set access > Full access), нельзя поставить Breakpoint > memory, on access. Указатель на область в памяти возвращается в OutBuffer. Что делать , как поставить точку останова? Добавлено спустя 1 час 1 минуту 00516C69 |. FFD7 CALL EDI ; \CreateFileA Code:
Возвращает 000001D4 File (dev) 3. 00120089 \Device\VMM 00516F93 |. FF15 78C35F00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA Code:
Возвращает 00000380 File (dev) 2. 00100080 \Device\VMM В InBuffer помещено 000001D4 Code:
Code:
Возвращает 000003DC ....... \Device\VMM И наконец InBuffer помещается 00000380 Code:
В OutBuffer возвращается указатель на искомый память. Добавлено спустя 1 час 46 минут Потом в эту память идет чтения жесткого диска виртуальной машины (файла *.vhd ) 0050B593 Virtual_ Disabled CALL DWORD PTR DS:[<&KERNEL32.ReadFile>] 0reading vhd 004FDF47 Virtual_ Disabled MOV DWORD PTR SS:[ESP+20],EAX 1coping to stack (0012FC6C) 005C0A68 Virtual_ Disabled MOV AL,BYTE PTR DS:[ESI] 2coping to OutBuffer^ ![]() |
|
Создано: 14 марта 2015 19:15 · Поправил: volopas · Личное сообщение · #12 В файле VMM.sys есть подозрительные строки , которые почему-то находятся в секции .data Code:
Code:
Если меняю в стравнении 3F на допустим 3E, зануляю 8 байт по смещению $190 (цифровая подпись) , меняю CheckSum по смещению $150 , подсовываю патченный драйвер в C:\WINDOWS\system32\drivers\ , то виртуальная машина не стартует (консоль запускается , но при попытке стартануть машину, появляется черное окно гостевой ОС (даже в биос не заходит) , Virtual PC.exe грузит проц 100 % и ничего не происходит) Добавлено спустя 4 часа 9 минут Следующим пропатчиванием удалось добиться на первый взгляд стабильной работы 0002BF92 75 05 JNZ SHORT 0002BF99 0002BF92 9090 nop Видимо, как указано в статье https://exelab.ru/f/action=vthread&forum=5&topic=23441 , эти опкоды используются не только для выявления виртуальной машины, но и для нужд BIOS. Поэтому видимо биос и не загружался. Но существует опасность , що все-таки этим пропатчиванием работа машины может быть нарушена. Поэтому нужна помощь специалистов. ![]() |
|
Создано: 16 марта 2015 14:32 · Поправил: volopas · Личное сообщение · #13 Пришлось столкнутся с проблемой несрабатывания остановов на код драйвера в ядре . Такое может быть ? Какие есть стандартные способы отловить этот момент? https://exelab.ru/f/action=vthread&forum=3&topic=17835&page=1#26 Пробовалось ставить EB FE и СС . Безрезультатно. EB FE просто вешает систему. СС - идет появляется окно ошибки (не MessageBox) Virtual PC --------------------- An internal vitrual machine error (3) has occured. The virtual machine will reset now. Добавлено спустя 15 минут Конкретно не срабатывает брейкпоинт на 0002BF2E 2E:8038 0F CMP BYTE PTR CS:[EAX],0F (указан адрес RAW-data. ) драйвера vmm.sys. Добавлено спустя 16 минут Просто спецы говорили , что напр. ReadFile работает в ядре и отловить невозможно. А теперь я отлаживаю ядро. В чем опять проблема? ![]() |
|
Создано: 18 марта 2015 07:57 · Поправил: volopas · Личное сообщение · #14 Специалисты, вы где? Вот список процедур драйвера . Какие из них могут провоцировать несрабатывание остановов? ExAllocatePoolWithTag KeClearEvent IoDeleteSymbolicLink ExFreePoolWithTag IoSetDeviceInterfaceState (не стабатывает) RtlInitUnicodeString IoDeleteDevice KeSetEvent (срабатывает слишком часто. Оттрассировать трудно.) KeInitializeEvent IoDetachDevice (не стабатывает) PoSetPowerState RtlFreeUnicodeString IofCompleteRequest (срабатывает слишком часто. Оттрассировать трудно.) KeWaitForSingleObject IoCreateSymbolicLink RtlCopyUnicodeString IoCreateDevice (не срабатывает) IoReleaseCancelSpinLock IofCallDriver IoFreeWorkItem PoRequestPowerIrp IoAllocateWorkItem (Не срабатывает) PoStartNextPowerIrp PoCallDriver IoQueueWorkItem memmove (срабатывает слишком часто. Оттрассировать трудно.) MmUnmapIoSpace MmMapIoSpace (срабатывает 2 раза, но память 2e 80 38 0f используется после этих 2 срабатываний) MmUnmapLockedPages MmMapLockedPagesSpecifyCache (срабатывает слишком часто. Оттрассировать трудно.) IoBuildPartialMdl (5-6 срабатывание??) MmAllocatePagesForMdl (срабатывает слишком часто. Оттрассировать трудно.) KeQuerySystemTime MmFreePagesFromMdl KeSetImportanceDpc (срабатывает слишком часто. Оттрассировать трудно.) KeRemoveQueueDpc KeInitializeDpc IoFileObjectType ObReferenceObjectByHandle ObfDereferenceObject IoFreeMdl MmGetPhysicalAddress (срабатывает слишком часто. Оттрассировать трудно.) MmProbeAndLockPages (срабатывает слишком часто. Оттрассировать трудно.) MmUnlockPages (срабатывает слишком часто. Оттрассировать трудно.) IoAllocateMdl (срабатывает слишком часто. Оттрассировать трудно.) IoWMIRegistrationControl KeSetTargetProcessorDpc KeQueryActiveProcessors KeDelayExecutionThread KeInsertQueueDpc KeQueryTimeIncrement KeTickCount ExRaiseStatus (не срабатывает) ExfInterlockedRemoveHeadList ExfInterlockedInsertHeadList MmFreeContiguousMemorySpecifyCache ZwQueryValueKey ZwClose KeNumberProcessors MmAllocateContiguousMemorySpecifyCache (Не срабатывает) AllocateContiguousMemorySpecifyCache ZwOpenKey DbgPrint ExUnregisterCallback ExRegisterCallback ExCreateCallback (Не срабатывает) DbgBreakPoint (Не срабатывает) MmFreeContiguousMemory MmFreeMappingAddress MmAllocateMappingAddress (Не срабатывает) MmAllocateContiguousMemory (Не срабатывает) KfAcquireSpinLock (Не срабатывает) KfReleaseSpinLock ExReleaseFastMutex ExAcquireFastMutex KeGetCurrentIrql KfLowerIrql KfRaiseIrql RtlAnsiCharToUnicodeChar (Не срабатывает) KeBugCheckEx (Не срабатывает) memset (срабатывает слишком часто. Оттрассировать трудно.) _aullshr memcpy (срабатывает слишком часто. Оттрассировать трудно.) _allmul _allshl _alldiv RtlUnwind Добавлено спустя 19 минут после этих остановов появляется наг про An internal vitrual machine error (3) has occured. Virtual PC.exe 004FE470 Virtual_ Always PUSH -0x1 004FE565 Virtual_ Always CALL Virtual_.004CC320 ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Не срабатывают никакие остановы. OllyDBG 1.10 |