eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 3 апреля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: tundra37, -Sanchez- (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Не срабатывают никакие остановы. OllyDBG 1.10
Посл.ответ Сообщение

Ранг: 6.8 (гость)
Статус: Участник

Создано: 25 февраля 2015 00:59 New!
Цитата · Личное сообщение · #1

В какой-то момент в памяти появляется нужный мне текст. Не могу определить в какой момент. Hardware Breakpoint ставлю - текс появляется как ни в чем не бывало без останова. Memory BP ставлю, F9, Ольга кричит "OllyDbg is unable to activate memory breakpoint on address range 02E145A0..02E145A0. Breakpoint is completely removed".

ReadFile исключил (Кстати, не откажусь от наставлений, как ловить текст от ReadFile). Что еще может быть?

Ранг: 233.1 (наставник)
Статус: Участник

Создано: 25 февраля 2015 05:45 New!
Цитата · Личное сообщение · #2

Обратись сюда: --> Link <--

Ранг: 6.8 (гость)
Статус: Участник

Создано: 25 февраля 2015 07:00 New!
Цитата · Личное сообщение · #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, по -моему, таким же макаром работает, но она также не используется в программе для заполнения памяти.

Ранг: 376.0 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 25 февраля 2015 07:29 New!
Цитата · Личное сообщение · #4

volopas пишет:
Есть ли способ все-таки поймать момент записи в lpBuffer?

дык оно в ядре пишется (ZwReadFile), а OllyDbg - это прикладной уровень. Понятное дело, что просто так не достанешь! Разве что, как функа ReadFile отработала и ты стоишь на RET в kernel32, тогда можно поставить останов на буфере и посмотреть, кто берет данные из него.

Ранг: 6.8 (гость)
Статус: Участник

Создано: 25 февраля 2015 07:43 New!
Цитата · Личное сообщение · #5

В том - то и дело, что надо перед тем как текст начинает использоваться его поменять. То есть надо понять откуда он берется в памяти.

Ранг: 233.1 (наставник)
Статус: Участник

Создано: 25 февраля 2015 08:20 New!
Цитата · Личное сообщение · #6

Всем будет гораздо проще, если ты выложишь таргет и адреса, на которых не срабатывает точка останова


Ранг: 1003.3 (!!!!)
Статус: Участник

Создано: 25 февраля 2015 08:45 New!
Цитата · Личное сообщение · #7

очередной старфорс которые ломают свиноводы

Ранг: 20.5 (новичок)
Статус: Участник

Создано: 25 февраля 2015 09:07 New!
Цитата · Личное сообщение · #8

reversecode пишет:
очередной старфорс

Так старфорс уже подох, вроде. Не надо вспоминать покойных
volopas
Может страница, на которой ставите точки точки, меняет атрибуты доступа через VirtualProtect или другая антиотладка. В любом случае надо ссылку на программу! Наверняка там какой-то говнопрот, как уже заметил reversecode


Ранг: 1003.3 (!!!!)
Статус: Участник

Создано: 25 февраля 2015 09:09 New!
Цитата · Личное сообщение · #9

волопас это свиновод
свиноводы ломают только старфорс

| Сообщение посчитали полезным: TryAga1n


Ранг: 6.8 (гость)
Статус: Участник

Создано: 1 марта 2015 11:44 · Поправил: volopas New!
Цитата · Личное сообщение · #10

Code:
  1. В любом случае надо ссылку на программу! 


Данная программа - Microsoft Virtual PC 2007 SP1 - ссылки см . https://exelab.ru/f/index.php?action=vthread&forum=5&topic=23441
При попытке поставить memory breakpoint on access ольга делает VirtualProtectEx
Code:
  1. 0012A990   004191AC  /CALL to VirtualProtectEx from OLLYDBG.004191A6
  2. 0012A994   00000250  |hProcess = 00000250 (window)
  3. 0012A998   03AE2000  |Address = 03AE2000
  4. 0012A99C   00001000  |Size = 1000 (4096.)
  5. 0012A9A0   00000001  |NewProtect = PAGE_NOACCESS
  6. 0012A9A4   004D8158  \pOldProtect = OLLYDBG.004D8158

GetLastError показывает 000001E7:
Code:
  1. ERROR_INVALID_ADDRESS 487 (0x1E7) Attempt to access invalid address.


Добавлено спустя 12 минут
Непонятно даже , где прога исполняет код виртуальной среды. Прога создает кучу потоков, постоянно переключается между ними. Оттрасировать не получается.

Добавлено спустя 1 час 29 минут
Если взять ту же Ольгу , запустить ее внутри виртуальной машины, открыть Ольгой любой EXE (можно саму себя), вбить в EntryPoint любые инструкции по вкусу, то эти инструкции таки появляются в памяти отлаживаемого Virtual PC.exe. Эти секции памяти появляются неясным образом. Поставил IN3 BP на все процедуры выделения памяти - результат нулевой.

Пока есть 2 проблемы: 1. Механизм выделения памяти под виртуальную машину. 2. Не срабатывают точки останова при обращении к памяти с кодом виртуальной машины во время выполнения этого кода внутри машины (внутри машины в ольге производится RUN)

Добавлено спустя 7 часов 21 минуту
Прога вызывает
Code:
  1. 0012FC74   004FDB8D  /CALL to DeviceIoControl from Virtual_.004FDB87
  2. 0012FC78   00000458  |hDevice = 00000458
  3. 0012FC7C   9C402C03  |IoControlCode = 9C402C03
  4. 0012FC80   00000000  |InBuffer = NULL
  5. 0012FC84   00000000  |InBufferSize = 0
  6. 0012FC88   00000000  |OutBuffer = NULL
  7. 0012FC8C   00000000  |OutBufferSize = 0
  8. 0012FC90   0012FCA4  |pBytesReturned = 0012FCA4
  9. 0012FC94   00000000  \pOverlapped = NULL

В окне хендлов:
Code:
  1. Handles, item 277
  2.  Handle=00000458
  3.  Type=File (dev)
  4.  Refs=   2.
  5.  Access=00100080 SYNCHRONIZE|READ_ATTRIBUTES
  6.  Name=\Device\VMM


Что это за устройство "\Device\VMM"?

Ранг: 6.8 (гость)
Статус: Участник

Создано: 2 марта 2015 11:26 · Поправил: volopas New!
Цитата · Личное сообщение · #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:
  1. 00517010  /$  83EC 08       SUB ESP,8
  2. 00517013  |.  833D C48B6700>CMP DWORD PTR DS:[678BC4],-1
  3. 0051701A  |.  C70424 000000>MOV DWORD PTR SS:[ESP],0
  4. 00517021  |.  75 06         JNZ SHORT Virtual_.00517029
  5. 00517023  |.  33C0          XOR EAX,EAX
  6. 00517025  |.  83C4 08       ADD ESP,8
  7. 00517028  |.  C3            RETN
  8. 00517029  |>  56            PUSH ESI
  9. 0051702A  |.  6A 00         PUSH 0                                   ; /hTemplateFile = NULL
  10. 0051702C  |.  68 80000040   PUSH 40000080                            ; |Attributes = NORMAL|OVERLAPPED
  11. 00517031  |.  6A 03         PUSH 3                                   ; |Mode = OPEN_EXISTING
  12. 00517033  |.  6A 00         PUSH 0                                   ; |pSecurity = NULL
  13. 00517035  |.  6A 00         PUSH 0                                   ; |ShareMode = 0
  14. 00517037  |.  6A 00         PUSH 0                                   ; |Access = 0
  15. 00517039  |.  68 2C696300   PUSH Virtual_.0063692C                   ; |FileName = "\.\Global\VMM"
  16. 0051703E  |.  FF15 78C35F00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA
  17. 00517044  |.  8BF0          MOV ESI,EAX
  18. 00517046  |.  83FE FF       CMP ESI,-1
  19. 00517049  |.  74 2C         JE SHORT Virtual_.00517077
  20. 0051704B  |.  6A 00         PUSH 0                                   ; /pOverlapped = NULL
  21. 0051704D  |.  8D4424 0C     LEA EAX,DWORD PTR SS:[ESP+C]             ; |
  22. 00517051  |.  50            PUSH EAX                                 ; |pBytesReturned
  23. 00517052  |.  6A 04         PUSH 4                                   ; |OutBufferSize = 4
  24. 00517054  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]            ; |
  25. 00517058  |.  51            PUSH ECX                                 ; |OutBuffer
  26. 00517059  |.  6A 04         PUSH 4                                   ; |InBufferSize = 4
  27. 0051705B  |.  8D5424 24     LEA EDX,DWORD PTR SS:[ESP+24]            ; |
  28. 0051705F  |.  52            PUSH EDX                                 ; |InBuffer
  29. 00517060  |.  68 0C28409C   PUSH 9C40280C                            ; |IoControlCode = 9C40280C
  30. 00517065  |.  56            PUSH ESI                                 ; |hDevice
  31. 00517066  |.  FF15 14C35F00 CALL DWORD PTR DS:[<&KERNEL32.DeviceIoCo>; \DeviceIoControl
  32. 0051706C  |.  84C0          TEST AL,AL
  33. 0051706E  |.  75 0F         JNZ SHORT Virtual_.0051707F
  34. 00517070  |.  56            PUSH ESI                                 ; /hObject
  35. 00517071  |.  FF15 C8C45F00 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; \CloseHandle
  36. 00517077  |>  83C8 FF       OR EAX,FFFFFFFF
  37. 0051707A  |.  5E            POP ESI
  38. 0051707B  |.  83C4 08       ADD ESP,8
  39. 0051707E  |.  C3            RETN
  40. 0051707F  |>  85FF          TEST EDI,EDI
  41. 00517081  |.  74 06         JE SHORT Virtual_.00517089
  42. 00517083  |.  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
  43. 00517087  |.  8907          MOV DWORD PTR DS:[EDI],EAX
  44. 00517089  |>  8BC6          MOV EAX,ESI
  45. 0051708B  |.  5E            POP ESI
  46. 0051708C  |.  83C4 08       ADD ESP,8
  47. 0051708F  \.  C3            RETN
  48.  



После этого DeviceIoControl создается область в памяти с размером 2000 для которой нельзя поменять доступ (ПКМ > Set access > Full access),
нельзя поставить Breakpoint > memory, on access. Указатель на область в памяти возвращается в OutBuffer.

Что делать , как поставить точку останова?

Добавлено спустя 1 час 1 минуту
00516C69 |. FFD7 CALL EDI ; \CreateFileA
Code:
  1. 0012FAC0   00516C6B  /CALL to CreateFileA from Virtual_.00516C69
  2. 0012FAC4   0063692C  |FileName = "\.\Global\VMM"
  3. 0012FAC8   80000000  |Access = GENERIC_READ
  4. 0012FACC   00000001  |ShareMode = FILE_SHARE_READ
  5. 0012FAD0   00000000  |pSecurity = NULL
  6. 0012FAD4   00000003  |Mode = OPEN_EXISTING
  7. 0012FAD8   40000080  |Attributes = NORMAL|OVERLAPPED
  8. 0012FADC   00000000  \hTemplateFile = NULL

Возвращает 000001D4 File (dev) 3. 00120089 \Device\VMM




00516F93 |. FF15 78C35F00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA
Code:
  1. 0012FCF0   00516F99  /CALL to CreateFileA from Virtual_.00516F93
  2. 0012FCF4   0063692C  |FileName = "\.\Global\VMM"
  3. 0012FCF8   00000000  |Access = 0
  4. 0012FCFC   00000000  |ShareMode = 0
  5. 0012FD00   00000000  |pSecurity = NULL
  6. 0012FD04   00000003  |Mode = OPEN_EXISTING
  7. 0012FD08   40000080  |Attributes = NORMAL|OVERLAPPED
  8. 0012FD0C   00000000  \hTemplateFile = NULL

Возвращает 00000380 File (dev) 2. 00100080 \Device\VMM


В InBuffer помещено 000001D4
Code:
  1. 0012FCE8   00516FC6  /CALL to DeviceIoControl from Virtual_.00516FC4
  2. 0012FCEC   00000380  |hDevice = 00000380
  3. 0012FCF0   9C402808  |IoControlCode = 9C402808
  4. 0012FCF4   00678BC4  |InBuffer = Virtual_.00678BC4
  5. 0012FCF8   00000004  |InBufferSize = 4
  6. 0012FCFC   00000000  |OutBuffer = NULL
  7. 0012FD00   00000000  |OutBufferSize = 0
  8. 0012FD04   0012FD14  |pBytesReturned = 0012FD14
  9. 0012FD08   00000000  \pOverlapped = NULL



Code:
  1. 0012FBBC   00517044  /CALL to CreateFileA from Virtual_.0051703E
  2. 0012FBC0   0063692C  |FileName = "\.\Global\VMM"
  3. 0012FBC4   00000000  |Access = 0
  4. 0012FBC8   00000000  |ShareMode = 0
  5. 0012FBCC   00000000  |pSecurity = NULL
  6. 0012FBD0   00000003  |Mode = OPEN_EXISTING
  7. 0012FBD4   40000080  |Attributes = NORMAL|OVERLAPPED
  8. 0012FBD8   00000000  \hTemplateFile = NULL

Возвращает 000003DC ....... \Device\VMM


И наконец InBuffer помещается 00000380
Code:
  1. 0012FBB8   0051706C  /CALL to DeviceIoControl from Virtual_.00517066
  2. 0012FBBC   000003DC  |hDevice = 000003DC
  3. 0012FBC0   9C40280C  |IoControlCode = 9C40280C
  4. 0012FBC4   0012FBEC  |InBuffer = 0012FBEC
  5. 0012FBC8   00000004  |InBufferSize = 4
  6. 0012FBCC   0012FBE0  |OutBuffer = 0012FBE0
  7. 0012FBD0   00000004  |OutBufferSize = 4
  8. 0012FBD4   0012FBE4  |pBytesReturned = 0012FBE4
  9. 0012FBD8   00000000  \pOverlapped = NULL

В 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^

Ранг: 6.8 (гость)
Статус: Участник

Создано: 14 марта 2015 19:15 · Поправил: volopas New!
Цитата · Личное сообщение · #12

В файле VMM.sys есть подозрительные строки , которые почему-то находятся в секции .data
Code:
  1. 00000240    2E 64 61 74>ASCII ".data"        ; SECTION
  2. 00000248    F0A30000    DD 0000A3F0          ; VirtualSize = A3F0 (41968.)
  3. 0000024C    00900200    DD 00029000          ; VirtualAddress = 29000
  4. 00000250    008C0000    DD 00008C00          ; SizeOfRawData = 8C00 (35840.)
  5. 00000254    007E0200    DD 00027E00          ; PointerToRawData = 27E00
  6. 00000258    00000000    DD 00000000          ; PointerToRelocations = 0
  7. 0000025C    00000000    DD 00000000          ; PointerToLineNumbers = 0
  8. 00000260    0000        DW 0000              ; NumberOfRelocations = 0
  9. 00000262    0000        DW 0000              ; NumberOfLineNumbers = 0
  10. 00000264    400000C8    DD C8000040          ; Characteristics = INITIALIZED_DATA|NOT_PAGED|READ|WRITE

Code:
  1. 0002BF2E 2E:8038 0F        CMP BYTE PTR CS:[EAX],0F
  2. 0002BF32 0F85 88010000     JNZ 0002C0C0
  3. 0002BF38 2E:8078 01 C7     CMP BYTE PTR CS:[EAX+1],0C7
  4. 0002BF3D 75 0B             JNZ SHORT 0002BF4A
  5. 0002BF3F 2E:8078 02 C8     CMP BYTE PTR CS:[EAX+2],0C8
  6. 0002BF44 0F84 DA010000     JE 0002C124
  7. 0002BF4A 2E:8078 01 3F     CMP BYTE PTR CS:[EAX+1],3F
  8. 0002BF4F 0F85 6B010000     JNZ 0002C0C0

Если меняю в стравнении 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/index.php?action=vthread&forum=5&topic=23441 , эти опкоды используются не только для выявления виртуальной машины, но и для нужд BIOS. Поэтому видимо биос и не загружался.

Но существует опасность , що все-таки этим пропатчиванием работа машины может быть нарушена. Поэтому нужна помощь специалистов.

Ранг: 6.8 (гость)
Статус: Участник

Создано: 16 марта 2015 14:32 · Поправил: volopas New!
Цитата · Личное сообщение · #13

Пришлось столкнутся с проблемой несрабатывания остановов на код драйвера в ядре . Такое может быть ? Какие есть стандартные способы отловить этот момент?

https://exelab.ru/f/index.php?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 работает в ядре и отловить невозможно. А теперь я отлаживаю ядро. В чем опять проблема?

Ранг: 6.8 (гость)
Статус: Участник

Создано: 18 марта 2015 07:57 · Поправил: volopas New!
Цитата · Личное сообщение · #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

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS