Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехватываю функцию ЕncryрtMеssage из secur32.dll 
V
    Опции темы
lollollollol
Дата 12.9.2013, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Перехватываю функцию ЕncryрtMеssage из secur32.dll

Много раз перечитывал MSDM
В итоге написал следующий код:
Код

type
  PSecBuffer=^TSecBuffer;
  TSecBuffer = record
    cBuffers :ULONG;
    BufferType:ULONG;
    pvBuffer:pointer;
  end;
  PSecBufferDesc=^TSecBufferDesc;
  TSecBufferDesc = record
    ulVersion:ULONG;
    cBuffers :ULONG;
    pBuffers:PSecBuffer;
  end;

function my_EncryptMessage(phContext:integer;fQOP:ULONG;pMessage:PSecBufferDesc;MessageSeqNo:ULONG):Integer; stdcall;
begin
OutputDebugStringA(PChar('EncryptMessage'+IntToStr(pMessage.cBuffers)+','+IntToStr(pMessage.pBuffers.cBuffers)+','+IntToStr(pMessage.pBuffers.BufferType)+' :'+PChar(pMessage.pBuffers.pvBuffer)));
  Result:=old_EncryptMessage(phContext,fQOP,pMessage,MessageSeqNo);
end;


Как результат переменная pMessage.cBuffers содержит информацию, что имеется 3 или 4 блока данных. 
Я всегда получаю только хедер заголовка, без POST запроса, в чём проблема?
Я думаю дело в том что информация хранится в остальных блоках, но как их найти, где они?

Как получить всю инфу, которая передаётся в эту функцию? 
PM MAIL   Вверх
Illusion Dolphin
Дата 12.9.2013, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Цитата

в чём проблема?

Имхо вы неправильно перевели структуры. Вот тут http://technet.microsoft.com/en-us/library/bb742535.aspx судя по описанию они другие:
Код

//
// SecBuffer
//
// Generic memory descriptors for buffers passed in to the security
// API
//
typedef struct _SecBuffer {
unsigned long cbBuffer;    // Size of the buffer, in bytes
unsigned long BufferType;   // Type of the buffer (below)
void SEC_FAR * pvBuffer;   // Pointer to the buffer
} SecBuffer, SEC_FAR * PSecBuffer;
typedef struct _SecBufferDesc {
unsigned long ulVersion;   // Version number
unsigned long cBuffers;    // Number of buffers
#ifdef MIDL_PASS
[size_is(cBuffers)]
#endif
PSecBuffer pBuffers;    // Pointer to array of buffers
} SecBufferDesc, SEC_FAR * PSecBufferDesc;
#define SECBUFFER_VERSION   0
#define SECBUFFER_EMPTY    0 // Undefined, replaced by provider
#define SECBUFFER_DATA    1 // Packet data
#define SECBUFFER_TOKEN    2 // Security token
#define SECBUFFER_PKG_PARAMS  3 // Package specific parameters
#define SECBUFFER_MISSING   4 // Missing Data indicator
#define SECBUFFER_EXTRA    5 // Extra data
#define SECBUFFER_STREAM_TRAILER 6 // Security Trailer
#define SECBUFFER_STREAM_HEADER  7 // Security Header
#define SECBUFFER_ATTRMASK   0xF0000000
#define SECBUFFER_READONLY   0x80000000 // Buffer is read-only

SecBuffer  Buffers[3];
SecBufferDesc BufferDesc;
...
BufferDesc.ulVersion = SECBUFFER_VERSION;
BufferDesc.cBuffers = 3;
BufferDesc.pBuffers = &Buffers;
Buffers[0].cbBuffer = sizeof(Protocol_Header);
Buffers[0].BufferType = SECBUFFER_READONLY | SECBUFFER_DATA;
Buffers[0].pvBuffer = pHeader;
Buffers[1].cbBuffer = pHeader->MessageSize;
Buffers[1].BufferType = SECBUFFER_DATA;
Buffers[1].pvBuffer = pMessage;
Buffers[2].cbBuffer = pHeader->TrailerSize;
Buffers[2].BufferType = SECBUFFER_READONLY | SECBUFFER_TOKEN;
Buffers[2].pvBuffer = pSecurityTrailer;


Для делфи это будет чтото вроде (не компилировал, но суть, думаю, понятна):
Код

type
  PSecBuffer=^TSecBuffer;
  TSecBuffer = record
    cBuffers :ULONG;
    BufferType:ULONG;
    pvBuffer:Pointer;
  end;
  ArrSecBuffer = array[0..0] of TSecBuffer; 
  PArrSecBuffer = ^PArrSecBuffer;
  PSecBufferDesc=^TSecBufferDesc;
  TSecBufferDesc = record
    ulVersion:ULONG;
    cBuffers :ULONG;
    pBuffers:PArrSecBuffer;
  end;


Это сообщение отредактировал(а) Illusion Dolphin - 12.9.2013, 18:32


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
lollollollol
Дата 12.9.2013, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Я брал описание структур и функции тут
http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx

Сразу видно, мастер, спасибо! Получил ВСЕ данные.
Но вот незадача:
Иногда данные начинаются как бы не сначала:
Цитата

[31264] EncryptMessage0,5,2:ё˜
[31264] ЁPOST /cgi-bin/auth?from=splash HTTP/1.1 

перед POST могут быть разное количество данных, всяких символов. В конце пакетов тоже самое.
Плюс почемуто часть пакетов пустые.

И ещё странность, длину структуры получаю так:
IntToStr(pMessage.pBuffers[a].cBuffers), в данном примере оно отобразило 5, но чаще покаывает цифры больше 900

В чём может быть дело?

Чуть подправил ваш вариант, вот так структуру объявил
Код

  PSecBuffer=^TSecBuffer;
  TSecBuffer = record
    cBuffers :ULONG;
    BufferType:ULONG;
    pvBuffer:Pointer;
  end;
  ArrSecBuffer = array[0..3] of TSecBuffer;
  PArrSecBuffer = ^ArrSecBuffer;
  PSecBufferDesc=^TSecBufferDesc;
  TSecBufferDesc = record
    ulVersion:ULONG;
    cBuffers :ULONG;
    pBuffers:PArrSecBuffer;
  end;

PM MAIL   Вверх
Illusion Dolphin
Дата 12.9.2013, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Цитата

Но вот незадача:

Не вижу кода логирования и кода перехвата - сложно сказать


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
lollollollol
Дата 14.9.2013, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Я разобрался, хотя честно признаться сам не совсем понял что сделал - в один момент всё заработало как по маслу, спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.