Сейчас на форуме: morgot, Rio, CDK123, zds, tyns777, tihiy_grom, rmn (+5 невидимых)

 eXeL@B —› Программирование —› NtSystemDebugControl
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 октября 2008 22:29
· Личное сообщение · #1

Все доброго всремени суток. Вопрос прост и лаконичен - где найти описание вышеупомянутой функции? Гугл не предлагать - и без вас гуглил уже, но там куча ссылок, и везде неполное описание, а нужна вся доступная на сегодня инфа, тем не менее, буду рад любым ссылкам, может, хоть слеплю из того, что будет, то, что надо.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 08 октября 2008 23:01 · Поправил: Hellspawn
· Личное сообщение · #2

как ни странно, но в гугле всё есть. что в твоём понимании - "полное описание"?

-----
[nice coder and reverser]





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

Создано: 08 октября 2008 23:06
· Личное сообщение · #3

У Неббета есть
NTSYSAPI
NTSTATUS
NTAPI
ZwSystemDebugControl(
IN DEBUG_CONTROL_CODE ControlCode,
IN PVOID InputBuffer OPTIONAL,
IN ULONG InputBufferLength,
OUT PVOID OutputBuffer OPTIONAL,
IN ULONG OutputBufferLength,
OUT PULONG ReturnLength OPTIONAL
);

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





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 октября 2008 23:10
· Личное сообщение · #4

Hellspawn пишет:
как ни странно, но в гугле всё есть. что в твоём понимании - "полное описание"?
typedef enum _SYSDBG_COMMAND {
//Windows NT
SysDbgGetTraceInformation = 1,
SysDbgSetInternalBreakpoint = 2,
SysDbgSetSpecialCall = 3,
SysDbgClearSpecialCalls = 4,
SysDbgQuerySpecialCalls = 5,
//NT 5.1
SysDbgDbgBreakPointWithStatus = 6,
SysDbgSysGetVersion = 7,
SysDbgCopyMemoryChunks_0 = 8,
SysDbgCopyMemoryChunks_1 = 9,
SysDbgCopyMemoryChunks_2 = 10,
SysDbgCopyMemoryChunks_3 = 11,
SysDbgSysReadControlSpace = 12,
SysDbgSysWriteControlSpace = 13,
SysDbgSysReadIoSpace = 14,
SysDbgSysWriteIoSpace = 15,
SysDbgSysReadMsr = 16,
SysDbgSysWriteMsr = 17,
SysDbgSysReadBusData = 18,
SysDbgSysWriteBusData = 19,
SysDbgSysCheckLowMemory = 20,
//NT 5.2
SysDbgEnableDebugger = 21,
SysDbgDisableDebugger = 22,
SysDbgGetAutoEnableOnEvent = 23,
SysDbgSetAutoEnableOnEvent = 24,
SysDbgGetPitchDebugger = 25,
SysDbgSetDbgPrintBufferSize = 26,
SysDbgGetIgnoreUmExceptions = 27,
SysDbgSetIgnoreUmExceptions = 28
} SYSDBG_COMMAND, *PSYSDBG_COMMAND;
Вот эти все классы и что они из себя представляют - это полное описание

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 08 октября 2008 23:12
· Личное сообщение · #5

ARCHANGEL
скажи цель, критерий поиска лучше будет ;)

-----
My love is very cool girl.





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 08 октября 2008 23:12 · Поправил: Hellspawn
· Личное сообщение · #6

это не документировано, можно по названию догодаться или разбирайся сам

theCollision +1

-----
[nice coder and reverser]





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 октября 2008 23:17
· Личное сообщение · #7

Hellspawn пишет:
это не документировано
Ну это я понял
theCollision пишет:
скажи цель, критерий поиска лучше будет ;)
Цель - взять MSR-регистр MSR_DEBUGCTLA и взвести в нем бит BTF (single-step on branches)

-----
Stuck to the plan, always think that we would stand up, never ran.





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

Создано: 08 октября 2008 23:30
· Личное сообщение · #8

ARCHANGEL
www.openrce.org/blog/view/535/Branch_Tracing_with_Intel_MSR_Registers

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




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 08 октября 2008 23:32
· Личное сообщение · #9

ARCHANGEL
Около этого копать ?
www.openrce.org/blog/view/535/Branch_Tracing_with_Intel_MSR_Registers

-----
My love is very cool girl.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 октября 2008 23:40
· Личное сообщение · #10

coderess
Проще говоря:
invoke NtSystemDebugControl,addr SysDbgWriteMsr, byref(msr), sizeof SYSDBG_MSR,0,0,0
а че за byref(msr)?

-----
Stuck to the plan, always think that we would stand up, never ran.





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

Создано: 08 октября 2008 23:59 · Поправил: coderess
· Личное сообщение · #11

byref - передает указатель на объект, типа

Code:
  1. lea esi, msr
  2. invoke NtSystemDebugControl,addr SysDbgWriteMsr, esi, sizeof SYSDBG_MSR,0,0,0


Кстате, незабудь про получение привилегии на отладку SE_DEBUG_NAME для вызова NtSystemDebugControl. есть замечательная статья про привилегии может пригодится
www.rsdn.ru/article/baseserv/privileges.xml

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





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 09 октября 2008 00:06
· Личное сообщение · #12

А msr - структура SYSDBG_MSR? Тогда ясно. Но надо опробовать

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 09 октября 2008 00:15 · Поправил: mak
· Личное сообщение · #13

ZwSystemDebugControl
ZwSystemDebugControl performs a subset of the operations available to a kernel mode
debugger.
NTSYSAPI
NTSTATUS
NTAPI
ZwSystemDebugControl(
IN DEBUG_CONTROL_CODE ControlCode,
IN PVOID InputBuffer OPTIONAL,
IN ULONG InputBufferLength,
OUT PVOID OutputBuffer OPTIONAL,
IN ULONG OutputBufferLength,
OUT PULONG ReturnLength OPTIONAL
);

Parameters

ControlCode
The control code for operation to be performed. Permitted values are drawn from the
enumeration DEBUG_CONTROL_CODE.
typedef enum _DEBUG_CONTROL_CODE {
DebugGetTraceInformation = 1,
DebugSetInternalBreakpoint,
DebugSetSpecialCall,
DebugClearSpecialCalls,
DebugQuerySpecialCalls,
DebugDbgBreakPoint
} DEBUG_CONTROL_CODE;

InputBuffer
Points to a caller-allocated buffer or variable that contains the data required to perform
the operation. This parameter can be null if the ControlCode parameter specifies an
operation that does not require input data.

InputBufferLength
The size in bytes of InputBuffer.

OutputBuffer
Points to a caller-allocated buffer or variable that receives the operation’s output data.
This parameter can be null if the ControlCode parameter specifies an operation that
does not produce output data.

OutputBufferLength
The size in bytes of OutputBuffer.

ReturnLength
Optionally points to a variable that receives the number of bytes actually returned to
OutputBuffer. If this information is not needed, ReturnLength may be a null pointer.
1996 CH01 11/19/99 12:24 PM System Information and Control: ZwSystemDebugControl

Return Value

Returns STATUS_SUCCESS or an error status, such as STATUS_PRIVILEGE_NOT_HELD,
STATUS_INVALID_INFO_CLASS or STATUS_INFO_LENGTH_MISMATCH.

Related Win32 Functions
None.

Remarks
SeDebugPrivilege is required to use ZwSystemDebugControl in Windows 2000.
ZwSystemDebugControl allows a process to perform a subset of the functions available to
a kernel mode debugger.
The system should be booted from a configuration that has the boot.ini “/DEBUG” (or
equivalent) option enabled; otherwise a kernel debugger variable needed for the cor-
rect operation of internal breakpoints is not initialized.
The data structures used by ZwSystemDebugControl are defined in windbgkd.h (includ-
ed with the Platform SDK).An up-to-date copy of this file is needed to compile the
code in Examples 1.3 and 1.4. One of the structures used by ZwSystemDebugControl
includes a union that has grown over time, and ZwSystemDebugControl checks that the
input/output buffers are large enough to hold the largest member of the union.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





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

Создано: 09 октября 2008 00:18
· Личное сообщение · #14

А msr - структура SYSDBG_MSR?

Да

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





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 09 октября 2008 00:26
· Личное сообщение · #15

Бонус =)

e49f_08.10.2008_CRACKLAB.rU.tgz - zwsystemdebugcontrol struct.inc

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 09 октября 2008 00:29
· Личное сообщение · #16

Code:
  1. KdPhysicalMemoryOperation proc Operation:BOOLEAN, PhysicalAddress:PVOID, BufferAddress:PVOID, BytesToRead:ULONG
  2. Local DbgBuffer:DBGKD_READ_WRITE_PHYSICAL
  3.          xor eax,eax
  4.          mov edx,PhysicalAddress
  5.          mov ecx,BufferAddress
  6.          mov DbgBuffer.AddressHi,eax
  7.          mov DbgBuffer.AddressLo,edx
  8.          mov DbgBuffer.Buffer,ecx
  9.          push eax
  10.          mov edx,BytesToRead
  11.          push eax
  12.          push eax
  13.          lea ecx,DbgBuffer
  14.          mov DbgBuffer._Length,edx
  15.          push Sizeof DBGKD_READ_WRITE_PHYSICAL
  16.          push ecx
  17.          .if Operation == Eax
  18.          push SysDbgReadPhysical
  19.          .else
  20.          push SysDbgWritePhysical
  21.          .endif
  22.          Call ZwSystemDebugControl
  23.          ret     
  24. KdPhysicalMemoryOperation endp
  25. NTSTATUS
  26. KdPhysicalMemoryOperation(
  27.          IN BOOLEAN Operation,
  28.          IN ULONG PhysicalAddress,
  29.          IN OUT PVOID BufferAddress,
  30.          IN ULONG BytesToRead)


И еще бонусный код + интересный код на Сииии

2e90_08.10.2008_CRACKLAB.rU.tgz - dbg.cpp

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 116.1 (ветеран), 5thx
Активность: 0.060
Статус: Участник

Создано: 09 октября 2008 20:28
· Личное сообщение · #17

ARCHANGEL пишет:
Цель - взять MSR-регистр MSR_DEBUGCTLA и взвести в нем бит BTF (single-step on branches)


У Криса К. есть статья про это с примерами, правда через дровину.

Я пробовал этот трюк применять на практике в OllyDbg, но стабильного положительного эффекта добиться не удалось . По непонятной причине иногда команды при взведенном BTF выполняются в обычном пошаговом режиме Предполагаю, что виной тому система, т.е. какой-то (какие-то) процесс(ы) сбрасывает этот бит до выполнения следующей команды в Olly. Но это всего-лишь догадки.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 10 октября 2008 15:30
· Личное сообщение · #18

BoOMBoX/TSRh,mak,coderess
У меня всё вышло! Ура! В качестве примера антиотладки, если кому интересно, выкладываю вот это. Это, конечно, не всё, что можно сделать с помощью этой фичи, но хоть что-то.

304e_10.10.2008_CRACKLAB.rU.tgz - Tracer.exe

-----
Stuck to the plan, always think that we would stand up, never ran.



 eXeL@B —› Программирование —› NtSystemDebugControl
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати