Сейчас на форуме: tyns777 (+4 невидимых)

 eXeL@B —› Программирование —› Как поставить железный бряк? (НЕ в Ольге, естесвенно :]
. 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 18 июня 2010 02:56
· Личное сообщение · #1

Речь о лодыре или инлайне: брякнуть пакованую прогу в нужном месте и пропатчить.
Вопросы:
1) как вообще ставятся железные бряки (on execution)?
2) как получить управление по бряку?




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 18 июня 2010 03:39
· Личное сообщение · #2

железные бряки ставятся через регистр Drx

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 18 июня 2010 06:18 · Поправил: 0xy
· Личное сообщение · #3

А какой будет код исключения у железного бряка?
И можно ли его как-то поймать ВНУТРИ ПРОЦЕССА (если прот поставил свой SEH)?



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 18 июня 2010 06:53
· Личное сообщение · #4

> А какой будет код исключения у железного бряка?
STATUS_SINGLE_STEP(#DB) и STATUS_BREAKPOINT(#BP).
> можно ли его как-то поймать ВНУТРИ ПРОЦЕССА (если прот поставил свой SEH)?
SEH локальный для потока, при срабатывании останова в каждом потоке вызывается свой SEH. VEH глобальный, вызывается из всех потоков, но его удалённо нельзя зарегать.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 18 июня 2010 08:21
· Личное сообщение · #5

На васме статья была www.wasm.ru/article.php?article=debugreg



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 19 июня 2010 09:09 · Поправил: 0xy
· Личное сообщение · #6

Если я правильно понял, VEH ВСЕГДА получает управление раньше, чем цепь SEH (даже если звенья SEH добавлялись после установки VEH)?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 19 июня 2010 09:22
· Личное сообщение · #7

Всегда. Там механизм другой. Сначала парсится весь вех, а уже потом сех.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 19 июня 2010 20:11 · Поправил: DenCoder
· Личное сообщение · #8

Clerk пишет:
VEH глобальный, вызывается из всех потоков, но его удалённо нельзя зарегать.


Почему нельзя? Можно!!! Для этого есть CreateRemoteThread или просто VirtualAllocEx/WriteProcessMemory с хуком или бряком на EP, если регать со старта, или на что-то другое, если потом...

-----
IZ.RU




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 19 июня 2010 20:55
· Личное сообщение · #9

DenCoder
ну-ну



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 20 июня 2010 02:44
· Личное сообщение · #10

Да, с VEH вроде все просто (по крайней мере, если прот его не юзает).
Только в 98-й Винде VEH нету
Так что придется мне париться с SEH...



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 20 июня 2010 02:50 · Поправил: HiEndsoft
· Личное сообщение · #11

0xy пишет:
Только в 98-й Винде VEH нету

в 98 винде насколько помниться можно практически все с учетом выполнения привелигированных для NT-линеек команд /интеловские маны нужно смотреть/. (Мы юзали in/out и т.п. для прямого управления оборудованием когда-то.)

-----
продавец резиновых утёнков




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 20 июня 2010 11:46
· Личное сообщение · #12

DenCoder
Сказал удалённо. Вы не можите получить куки из контекста другого процесса. Сосредоточтесь.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 20 июня 2010 15:55
· Личное сообщение · #13

Clerk
Если под "удаленно" Вы имели в виду с другой машины, то речь вообще об этом не шла.
> Вы не можите получить куки из контекста другого процесса
Все-таки из контекста другого процесса? Так вот об этом я и писал... Только при чем здесь куки?

-----
IZ.RU




Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 22 июня 2010 13:10 · Поправил: 0xy
· Личное сообщение · #14

Да, похоже, через SEH свой бряк не перехватить (идея была отслеживать установку SEH-обработчиков и каждый раз впихивать свой, но ни чего хорошего из этого не вышло).

Так что для 98-й я вижу единственный вариант: дебуг-лодырь.
Или все же есть другие варианты (перехвата бряка внутри процесса под 98-й?)




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 22 июня 2010 14:54
· Личное сообщение · #15

Для чего нужна поддержка 98винды?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 22 июня 2010 15:57 · Поправил: DenCoder
· Личное сообщение · #16

0xy
> Да, похоже, через SEH свой бряк не перехватить
Я бы с этим поспорил. Под 98-ой виндой можно сделать так:

1) CreateProcess с флагом CREATE_SUSPENDED.
2) GetThreadContext, eax будет указывать на Entry Point программы (под XP точно, на 98 можно проверить, если нет, то можно вычислить из PE).
3) VirtualAllocEx, выделяющий память в контексте другого процесса, работает, начиная с 2К, под 98 должен быть другой способ. Про секции под 98 ничего почти не знаю... Можно на крайний случай использовать конец страницы для записи своего кода. Делал так, когда 98 юзал - работает.
4) WriteProcessMemory, пишем код установки своего SEH в выбранную память
5) WriteProcessMemory по адресу EP джамп на код
6) Цикл FlushInstructionCache на EP, пока байт не совпадет с E9. Заметил эту особенность поведения спящих процессов на XP - кеш у спящих процессов не всегда сразу сбрасывается, даже если функция возвращает TRUE.
7) ResumeThread

В коде установки SEH должно быть понятно, что нужно делать. Проблема только, что обработчик нужного Вам исключения может поставиться другой, но это, думаю, можно решить установкой хард бряка на доступ к fs:[0], обработать и записать туда своего обработчика.

Может фантастично звучит. Установку совего SEH еще не пробовал, только собираюсь...

-----
IZ.RU




Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 22 июня 2010 16:55
· Личное сообщение · #17

DenCoder
Проблема только, что обработчик нужного Вам исключения может поставиться другой, но это, думаю, можно решить установкой хард бряка на доступ к fs:[0]
Вот именно из этого ни чего хорошего не получилось.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 22 июня 2010 17:24
· Личное сообщение · #18

Онанизмом попахивает каким-то, с этими 9х виндами... Насколько я помню, в 9х виндах изменение системной либы в 1 процессе приводило к изменению во всех процессах. Погляди, куда приходят исключения (в NT-KiUserExceptionDispatcher в ntdll.dll) да и перезапиши хуком хыть прям у себя, код хука в конец секции впиши, проверяй там пид да делай, чо надо.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 22 июня 2010 17:51
· Личное сообщение · #19

Archer
О, точно, это мысль...

-----
IZ.RU




Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 22 июня 2010 18:25
· Личное сообщение · #20

Archer
NT-KiUserExceptionDispatcher в ntdll.dll
Ты всерьез думаешь, что в 98-й токое есть?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 22 июня 2010 19:48
· Личное сообщение · #21

А ресёч провести никак? Только не говори, что в IDT прописаны адреса из ринг3.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 23 июня 2010 14:37
· Личное сообщение · #22

Я не на столько хорошо знаю матчасть
Что есть IDT в Protect Mode? Всё тот же 1-й К физ. памяти, или??
В любом случае, я х.з. как заглянуть туда из Ring3.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 июня 2010 17:35
· Личное сообщение · #23

Ну хотя бы из сеха по стеку подняться выше и поглядеть, из какой библиотеки он вызывается, можешь?



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 24 июня 2010 00:25 · Поправил: 0xy
· Личное сообщение · #24

Вызов идет из kernel32 (секция FREQASM). Но перехватывать его там опасно, ибо в 98-й это ГЛОБАЛЬНЫЙ регион, т.е. его модификация повлияет на все процессы!..




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 24 июня 2010 03:39 · Поправил: DenCoder
· Личное сообщение · #25

Раз такие дела, то где-то даже немного проще... где-то немного сложнее (из-за Win98)...

В программе
Code:
  1.   HMODULE hMod = GetModuleHandle("kernel32.dll");
  2.   IMAGE_NT_HEADERS* nth = (IMAGE_NT_HEADERS*)((DWORD)hMod + ((IMAGE_DOS_HEADER*)hMod)->e_lfanew);
  3.   IMAGE_SECTION_HEADER* ish = (IMAGE_SECTION_HEADER*)((BYTE*)&nth->OptionalHeader + nth->FileHeader.SizeOfOptionalHeader);
  4.   int i = 0;
  5.   do
  6.   {
  7.     if(!strncmp(ish->Name, "FREQASM", 8)) break;
  8.     i++;
  9.     ish += sizeof(IMAGE_SECTION_HEADER);
  10.   }while(< nth->FileHeader.NumberOfSections);
  11.  
  12.   DWORD Addr = (DWORD)hMod + ish->VirtualAddress + ish->Misc.VirtualSize;
  13.   DWORD fOldProtect;
  14.   
  15.   VirtualProtect((void*)Addr, dwSize, PAGE_EXECUTE_READWRITE, &fOldProtect);
  16.   *(DWORD*)Addr = ProcessId;
  17.   memcpy((BYTE*)Addr + 4, (BYTE*)pAsmCode, SizeOfAsmCode);
  18.   
  19.   //корректируем смещение для вызова GetCurrentProcessId
  20.   DWORD pGetCurrentProcessId = (DWORD)GetProcAddress(hMod, "GetCurrentProcessId");
  21.   *(DWORD*)((BYTE*)Entry + 1) = pGetCurrentProcessId - ((DWORD)Entry + 5);
  22.  
  23.   //копируем одну или более инструкций (если число байт одной инструкции меньше 5) для исполнения в обработчике хука
  24.   //замещаемая инструкция не должна быть не jmp, jcxx, call с относительными операндами
  25.   memcpy((void*)ExecuteReplacedInstruction, (void*)KernelHookAddr, SizeOfInstructions);
  26.   //пишем в конец обработчика смещение для возврата обратно
  27.   *(DWORD*)(JmpBack + 1) = (DWORD)KernelHookAddr + SizeOfInstructions - ((DWORD)JmpBack + 5);
  28.  
  29.   VirtualProtect((void*)KernelHookAddr, 5, PAGE_EXECUTE_READWRITE, &fOldProtect);
  30.   *(BYTE*)KernelHookAddr = 0xE9;
  31.   //по нулевому смещению хранится ProcessId
  32.   *(DWORD*)(KernelHookAddr + 1) = Addr + 4 - ((DWORD)KernelHookAddr + 5);


Нужно определить 5 переменных
ProcessId - PID процесса, у котором нужно перехватить управление в kernel32
SizeOfInstructions - размер замещенных инструкций
SizeOfAsmCode - размер кода обработчика хука
KernelHookAddr - адрес замещаемых инструкций
pAsmCode - указатель на код обработчика в контексте нашей программы для копирования в нужное место

Шаблон кода обработчика примерно такой:
Code:
  1.   SavedProcessId  dd ?
  2. Entry:
  3.   call GetCurrentProcessId
  4.   cmp eax, dword ptr [SavedProcessId]
  5.   jnz DontHandle
  6.   ;здесь пишем инструкции, которые нужно выполнить
  7.   ;например OutputDebugString, чтобы сообщить отладчику
  8.   ;если содержатся вызовы функций API, то прежде необходимо скорректировать смещение
  9.   ;...
  10.   ;...
  11.  
  12. ExecuteReplacedInstruction:
  13. DontHandle:
  14.   ;здесь замещенная инструкция
  15.   ;...
  16.  
  17. JmpBack:
  18.   jmp $


В установке хука адреса Entry, ExecuteReplacedInstruction, JmpBack должны быть пересчитаны. Имена их совпадают с именами в коде обработчика для большей наглядности.
Адрес JmpBack зависит от размера замещенных инструкций, здесь приведен код для 5 байт. Для большего размера потребуется дополнительно что-то вроде

Code:
  1.   JmpBack = ExecuteReplacedInstruction + SizeOfInstructions
  2.   *(BYTE*)JmpBack = 0xE9;


а также коррекция смещения в условном переходе. (Это уж чего-то лень стало дописать )

Написал на коленке, но должно работать. Был рад помочь.

-----
IZ.RU





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 июня 2010 16:59
· Личное сообщение · #26

Я и писал, что перехватывать надо в глобальной памяти и проверять ПИД. Предыдущие то посты читаешь, не? И лучше не непосредственно место вызова сеха, а по возможности подняться повыше до места вызова коллбека в ринг3 из ринг0. Хотя если для себя и для одной ОС, то 1 хрен.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 24 июня 2010 19:25
· Личное сообщение · #27

Archer
И лучше не непосредственно место вызова сеха, а по возможности подняться повыше до места вызова коллбека в ринг3 из ринг0
Чет я не уловил, для чего это нужно??? Хочешь сказать, что эта точка будет одинакова для всей линейки Win 9x?
А подняться тяжело, ибо бряки там не работают

PS
Посты я читаю. Но пока все больше склоняюсь к тому, что вариант с дебаг-лодырем для 9x и с VEH для NT намного проще...

PPS
А в Win2k есть VEH?



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 24 июня 2010 19:44
· Личное сообщение · #28

0xy пишет:
А в Win2k есть VEH?

нет, мсдн для этого можно было почитать, особенно статью Мэтта Питрека



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 24 июня 2010 20:39 · Поправил: 0xy
· Личное сообщение · #29

Archer
Очень похоже, что из ядра прыгаем сюда:

BFF78344 /$ 55 PUSH EBP
BFF78345 |. A1 F0BCFBBF MOV EAX,DWORD PTR DS:[BFFBBCF0]
BFF7834A |. 8BEC MOV EBP,ESP
BFF7834C |. 83EC 6C SUB ESP,6C
BFF7834F |. 53 PUSH EBX
BFF78350 |. 56 PUSH ESI
BFF78351 |. 57 PUSH EDI
BFF78352 |. 8B30 MOV ESI,DWORD PTR DS:[EAX]
BFF78354 |. 837D 10 01 CMP DWORD PTR SS:[EBP+10],1
BFF78358 |. 8B4E 38 MOV ECX,DWORD PTR DS:[ESI+38]
BFF7835B |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
BFF7835E |. 75 0A JNZ SHORT BFF7836A
BFF78360 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
BFF78363 |. 80A0 C1000000>AND BYTE PTR DS:[EAX+C1],0FE
BFF7836A |> FF75 08 PUSH DWORD PTR SS:[EBP+8] ; /Arg4
BFF7836D |. 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C] ; |
BFF78370 |. 57 PUSH EDI ; |Arg3
BFF78371 |. FF75 10 PUSH DWORD PTR SS:[EBP+10] ; |Arg2
BFF78374 |. 6A 01 PUSH 1 ; |Arg1 = 00000001
BFF78376 |. E8 CA070000 CALL BFF78B45 ; \KERNEL32.BFF78B45
BFF7837B |. 85C0 TEST EAX,EAX
BFF7837D |. 74 08 JE SHORT BFF78387
BFF7837F |. FF75 08 PUSH DWORD PTR SS:[EBP+8]
BFF78382 |. E8 53E3FEFF CALL BFF666DA
BFF78387 |> 803D 24BDFBBF>CMP BYTE PTR DS:[BFFBBD24],0
BFF7838E |. 74 2A JE SHORT BFF783BA
BFF78390 |. 837D 10 FF CMP DWORD PTR SS:[EBP+10],-1
BFF78394 |. 74 24 JE SHORT BFF783BA
BFF78396 |. FF75 10 PUSH DWORD PTR SS:[EBP+10]
BFF78399 |. E8 809DFEFF CALL BFF6211E
BFF7839E |. 85C0 TEST EAX,EAX
BFF783A0 |. 74 18 JE SHORT BFF783BA
BFF783A2 |. 837D 10 01 CMP DWORD PTR SS:[EBP+10],1
BFF783A6 |. 0F84 B5010000 JE BFF78561
BFF783AC |. 837D 10 03 CMP DWORD PTR SS:[EBP+10],3
BFF783B0 |. 0F84 AB010000 JE BFF78561
BFF783B6 |. 804E 4C 02 OR BYTE PTR DS:[ESI+4C],2
BFF783BA |> A1 F8BCFBBF MOV EAX,DWORD PTR DS:[BFFBBCF8]
BFF783BF |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
BFF783C1 |. 8379 1C 01 CMP DWORD PTR DS:[ECX+1C],1
BFF783C5 |. 1BC0 SBB EAX,EAX
BFF783C7 |. 40 INC EAX
BFF783C8 |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
BFF783CB |. E8 94E2FEFF CALL BFF66664
BFF783D0 |. 83F8 FF CMP EAX,-1
BFF783D3 |. 8BD8 MOV EBX,EAX
BFF783D5 |. C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0
BFF783DC |. 0F84 3B010000 JE BFF7851D
BFF783E2 |> C745 F4 00000>/MOV DWORD PTR SS:[EBP-C],0
BFF783E9 |. 813F 270000C0 |CMP DWORD PTR DS:[EDI],C0000027
BFF783EF |. 74 39 |JE SHORT BFF7842A
BFF783F1 |. 395E 0C |CMP DWORD PTR DS:[ESI+C],EBX
BFF783F4 |. 72 05 |JB SHORT BFF783FB
BFF783F6 |. 395E 10 |CMP DWORD PTR DS:[ESI+10],EBX
BFF783F9 |. 76 2F |JBE SHORT BFF7842A
BFF783FB |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
BFF783FE |. 8B40 54 |MOV EAX,DWORD PTR DS:[EAX+54]
BFF78401 |. 85C0 |TEST EAX,EAX
BFF78403 |. 0F84 F3000000 |JE BFF784FC
BFF78409 |. 8B40 14 |MOV EAX,DWORD PTR DS:[EAX+14]
BFF7840C |. 85C0 |TEST EAX,EAX
BFF7840E |. 0F84 E8000000 |JE BFF784FC
BFF78414 |. 53 |PUSH EBX
BFF78415 |. 50 |PUSH EAX
BFF78416 |. E8 7368FFFF |CALL BFF6EC8E
BFF7841B |. 85C0 |TEST EAX,EAX
BFF7841D |. 0F84 D9000000 |JE BFF784FC
BFF78423 |. C745 F4 01000>|MOV DWORD PTR SS:[EBP-C],1
BFF7842A |> 837D EC 00 |CMP DWORD PTR SS:[EBP-14],0
BFF7842E |. 74 19 |JE SHORT BFF78449
BFF78430 |. 8B43 04 |MOV EAX,DWORD PTR DS:[EBX+4]
BFF78433 |. 3D 00000080 |CMP EAX,80000000
BFF78438 |. 0F82 A5000000 |JB BFF784E3
BFF7843E |. 3D FFFFFFBF |CMP EAX,BFFFFFFF
BFF78443 |. 0F87 9A000000 |JA BFF784E3
BFF78449 |> FF73 04 |PUSH DWORD PTR DS:[EBX+4]
BFF7844C |. 8D4D F0 |LEA ECX,DWORD PTR SS:[EBP-10]
BFF7844F |. 51 |PUSH ECX
BFF78450 |. FF75 08 |PUSH DWORD PTR SS:[EBP+8]
BFF78453 |. 53 |PUSH EBX
BFF78454 |. 57 |PUSH EDI
BFF78455 |. E8 97E3FEFF |CALL BFF667F1 Call (Call SEH)
BFF7845A |. 83C4 14 |ADD ESP,14
BFF7845D |. 395D FC |CMP DWORD PTR SS:[EBP-4],EBX
BFF78460 |. 75 0B |JNZ SHORT BFF7846D
BFF78462 |. 8067 04 EF |AND BYTE PTR DS:[EDI+4],0EF
BFF78466 |. C745 FC 00000>|MOV DWORD PTR SS:[EBP-4],0
BFF7846D |> 85C0 |TEST EAX,EAX ; Switch (cases 0..2)
BFF7846F |. 74 2D |JE SHORT BFF7849E
BFF78471 |. 83F8 01 |CMP EAX,1
BFF78474 |. 74 6D |JE SHORT BFF784E3
BFF78476 |. 83F8 02 |CMP EAX,2
BFF78479 |. 74 56 |JE SHORT BFF784D1
BFF7847B |. 8D45 94 |LEA EAX,DWORD PTR SS:[EBP-6C] ; Default case of switch BFF7846D
BFF7847E |. 897D 9C |MOV DWORD PTR SS:[EBP-64],EDI
BFF78481 |. C745 94 26000>|MOV DWORD PTR SS:[EBP-6C],C0000026
BFF78488 |. C745 98 01000>|MOV DWORD PTR SS:[EBP-68],1
BFF7848F |. C745 A4 00000>|MOV DWORD PTR SS:[EBP-5C],0
BFF78496 |. 50 |PUSH EAX
BFF78497 |. E8 51E2FEFF |CALL BFF666ED
BFF7849C |. EB 45 |JMP SHORT BFF784E3
BFF7849E |> F647 04 01 |TEST BYTE PTR DS:[EDI+4],1 ; Case 0 of switch BFF7846D
BFF784A2 |. 74 23 |JE SHORT BFF784C7
BFF784A4 |. 8D45 94 |LEA EAX,DWORD PTR SS:[EBP-6C]
BFF784A7 |. 897D 9C |MOV DWORD PTR SS:[EBP-64],EDI
BFF784AA |. C745 94 25000>|MOV DWORD PTR SS:[EBP-6C],C0000025
BFF784B1 |. C745 98 01000>|MOV DWORD PTR SS:[EBP-68],1
BFF784B8 |. C745 A4 00000>|MOV DWORD PTR SS:[EBP-5C],0
BFF784BF |. 50 |PUSH EAX
BFF784C0 |. E8 28E2FEFF |CALL BFF666ED
BFF784C5 |. EB 1C |JMP SHORT BFF784E3
BFF784C7 |> FF75 08 |PUSH DWORD PTR SS:[EBP+8]
BFF784CA |. E8 0BE2FEFF |CALL BFF666DA
BFF784CF |. EB 12 |JMP SHORT BFF784E3
BFF784D1 |> 804F 04 10 |OR BYTE PTR DS:[EDI+4],10 ; Case 2 of switch BFF7846D
BFF784D5 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
BFF784D8 |. 3B45 F0 |CMP EAX,DWORD PTR SS:[EBP-10]
BFF784DB |. 73 06 |JNB SHORT BFF784E3
BFF784DD |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10]
BFF784E0 |. 8945 FC |MOV DWORD PTR SS:[EBP-4],EAX
BFF784E3 |> 8B03 |MOV EAX,DWORD PTR DS:[EBX] ; Case 1 of switch BFF7846D
BFF784E5 |. 3BD8 |CMP EBX,EAX
BFF784E7 |. 72 06 |JB SHORT BFF784EF
BFF784E9 |. 837D F4 00 |CMP DWORD PTR SS:[EBP-C],0
BFF784ED |. 74 0D |JE SHORT BFF784FC
BFF784EF |> 83F8 FF |CMP EAX,-1
BFF784F2 |. 8BD8 |MOV EBX,EAX
BFF784F4 |.^ 0F85 E8FEFFFF \JNZ BFF783E2
BFF784FA |. EB 21 JMP SHORT BFF7851D
BFF784FC |> 8D4D 94 LEA ECX,DWORD PTR SS:[EBP-6C]
BFF784FF |. 897D 9C MOV DWORD PTR SS:[EBP-64],EDI
BFF78502 |. C745 94 27000>MOV DWORD PTR SS:[EBP-6C],C0000027
BFF78509 |. C745 98 01000>MOV DWORD PTR SS:[EBP-68],1
BFF78510 |. C745 A4 00000>MOV DWORD PTR SS:[EBP-5C],0
BFF78517 |. 51 PUSH ECX
BFF78518 |. E8 D0E1FEFF CALL BFF666ED
BFF7851D |> 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
BFF78520 |. 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
BFF78523 |. 51 PUSH ECX ; /pExceptionInfo
BFF78524 |. 897D E4 MOV DWORD PTR SS:[EBP-1C],EDI ; |
BFF78527 |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX ; |
BFF7852A |. E8 515C0100 CALL UnhandledExceptionFilter ; \UnhandledExceptionFilter
BFF7852F |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; /Arg4
BFF78532 |. 57 PUSH EDI ; |Arg3
BFF78533 |. FF75 10 PUSH DWORD PTR SS:[EBP+10] ; |Arg2
BFF78536 |. 6A 00 PUSH 0 ; |Arg1 = 00000000
BFF78538 |. E8 08060000 CALL BFF78B45 ; \KERNEL32.BFF78B45
BFF7853D |. 85C0 TEST EAX,EAX
BFF7853F |. 74 08 JE SHORT BFF78549
BFF78541 |. FF75 08 PUSH DWORD PTR SS:[EBP+8]
BFF78544 |. E8 91E1FEFF CALL BFF666DA
BFF78549 |> F646 4C 02 TEST BYTE PTR DS:[ESI+4C],2
BFF7854D |. 75 0E JNZ SHORT BFF7855D
BFF7854F |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
BFF78552 |. 6A FF PUSH -1
BFF78554 |. 8048 23 08 OR BYTE PTR DS:[EAX+23],8
BFF78558 |. E8 F7500000 CALL BFF7D654
BFF7855D |> 8066 4C FD AND BYTE PTR DS:[ESI+4C],0FD
BFF78561 |> FF75 08 PUSH DWORD PTR SS:[EBP+8]
BFF78564 |. FF75 14 PUSH DWORD PTR SS:[EBP+14]
BFF78567 |. FF75 10 PUSH DWORD PTR SS:[EBP+10]
BFF7856A |. 68 00000200 PUSH 20000
BFF7856F |. E8 608EFEFF CALL #8
BFF78574 |. FF75 08 PUSH DWORD PTR SS:[EBP+8]
BFF78577 |. E8 5EE1FEFF CALL BFF666DA
BFF7857C |. 5F POP EDI
BFF7857D |. 5E POP ESI
BFF7857E |. 5B POP EBX
BFF7857F |. 8BE5 MOV ESP,EBP
BFF78581 |. 5D POP EBP
BFF78582 \. C3 RET


BFF667F1 $ BA 2D68F6BF MOV EDX,BFF6682D
BFF667F6 . EB 05 JMP SHORT BFF667FD
BFF667F8 /$ BA 5268F6BF MOV EDX,BFF66852
BFF667FD |> 55 PUSH EBP
BFF667FE |. 8BEC MOV EBP,ESP
BFF66800 |. FF75 0C PUSH DWORD PTR SS:[EBP+C]
BFF66803 |. 52 PUSH EDX
BFF66804 |. 64:FF35 00000>PUSH DWORD PTR FS:[0]
BFF6680B |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
BFF66812 |. FF75 14 PUSH DWORD PTR SS:[EBP+14]
BFF66815 |. FF75 10 PUSH DWORD PTR SS:[EBP+10]
BFF66818 |. FF75 0C PUSH DWORD PTR SS:[EBP+C]
BFF6681B |. FF75 08 PUSH DWORD PTR SS:[EBP+8]
BFF6681E |. FF55 18 CALL DWORD PTR SS:[EBP+18] ; Call SEH
BFF66821 |. 83C4 10 ADD ESP,10
BFF66824 |. 64:8F05 00000>POP DWORD PTR FS:[0]
BFF6682B |. C9 LEAVE
BFF6682C \. C3 RET

Но, повторюсь: не пойму, зачем это нам?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 июня 2010 20:40
· Личное сообщение · #30

Ну если в НТ эта точка одинакова, возможно, в 9х тоже. Но гарантировать не могу, когда я начал ревёрсить, у меня уже не стояла 9х. И сейчас не стоит, иначе бы уже 33 раза проверил. Подняться можно, глядя в стек, бряки не нужны. Ну делай через дебаг, не буду больше донимать.


. 1 . 2 . 3 . >>
 eXeL@B —› Программирование —› Как поставить железный бряк? (НЕ в Ольге, естесвенно :]
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати