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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват и модификация исходящих tcp пакетов, возможно ли ? ("на лету") 
:(
    Опции темы
RA
Дата 6.6.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



lifer

Завтра приду домой всё проверю.

PM   Вверх
lifer
Дата 7.6.2005, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

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



Цитата
Завтра приду домой всё проверю.

спасибо.

P.S. Извините что так много вопросов задаю, просто с темой перехвата API первый раз столкнулся.

Да, и еще, чем такая конструкция:
Код

HookCode(@send, @sendHookProc, @sendNextHook);

отличается от такой:
Код

HookAPI('wsock32.dll', 'send', @sendHookProc, @sendNextHook);


Это сообщение отредактировал(а) lifer - 7.6.2005, 09:35
PM MAIL WWW ICQ   Вверх
RA
Дата 7.6.2005, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



HookAPI('wsock32.dll', 'send', @sendHookProc, @sendNextHook);

наложыт хук на функцию send в модуле wsock32.dll, тоесть получать мы будем весь трафик, а нам как я понял нужно только от конкретного процесса.


Цитата(lifer @ 6.6.2005, 17:50)
Захотел протестировать dll, по идее Result := -1; должен блокировать передачу данных. Я правильно понял?


Ну по идее так можно сделать, только чужое приложение будет ожидать таймаута если это поставить на sendHookProc.


Собсно вот прилагаю проверенный код внедрения с дллкой.

Присоединённый файл ( Кол-во скачиваний: 256 )
Присоединённый файл  InjectandhookDll.rar 2,36 Kb
PM   Вверх
lifer
Дата 7.6.2005, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

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



Спасибо большое за помощь, разобрался в вашем коде, теперь с помощью MadCodeHook SendIpcMessage сделал передачу данных между hook.dll и приложением.
Вроде проблема решена.

Если еще появятся вопросы я обращусь к вам.


PM MAIL WWW ICQ   Вверх
RA
Дата 7.6.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Обращайся. smile
PM   Вверх
lifer
Дата 9.6.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

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



Помогите найти ошибку.
Я перевожу данные, передаваемые приложением в hex-вид, для редактирования. Все работает, только при передаче вот таких данных:
89 00 00 00 1F A1 7B 0E 00
89 00 00 00 1F 20 95 0F 00
89 00 00 00 1F 07 C4 0F 00
89 00 00 00 1F FE F2 0F 00
89 00 00 00 1F FE F2 0F 00
89 00 00 00 1F E6 21 10 00


(смотрю с помощью commview)

получается вот это:
89 00 00 00 34 1D D2 14 34
89 00 00 00 34 1D D2 14 34
89 00 00 00 34 1D D2 14 34
89 00 00 00 34 1D D2 14 34
89 00 00 00 34 1D D2 14 34
89 00 00 00 34 1D D2 14 34


данные, не содержащие 00 00 00 обрабатываются корректно. Я наверное неправильно обрабатываю данные в строке Data := Copy (PChar(@Buf),1,len); ?

Вот код перевода в hex:

Код

function sendHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
Data,ResData : string;
i : integer;
begin
   ResData := '';
   Data := Copy (PChar(@Buf),1,len);
   for i := 1 to len do
        begin
        ResData := ResData + IntToHex(Ord(Data[i]),2) + ' ';
        end;
   ShowMessage(ResData);
   
   Result := sendNextHook(s, Buf, len, flags);
end;


Это сообщение отредактировал(а) lifer - 9.6.2005, 16:35
PM MAIL WWW ICQ   Вверх
RA
Дата 10.6.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Код

function InHex(Buffer: pointer; Length: Word): string;
var
  i: integer;
  HexBuf: string;
begin
  HexBuf := '';
  for Iterator := 0 to Length - 1 do
  begin
    HexBuffer := HexBuf + IntToHex(Ord(char(pointer(integer(Buffer) + i)^)), 2) + ' ';
  end;
  Result := HexBuf;
end;


function sendHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
  HexData: string;
  BufData: pchar;
begin


  Result := 0;

  GetMem(BufData, Result);


  try
    CopyMemory(BufData, @Buf, Result);
    BufData[0] := chr(10);
    BufData[1] := chr(20);
    BufData[2] := chr(30); 
    word(pointer(BufData)^) := 10; 
    dword(pointer(integer(BufData) + 2)^) := 20; 
    word(pointer(integer(BufData) + 6)^) := 30; 
    CopyMemory(@Buf, BufData, Result);
  finally
    FreeMem(BufData);
  end;


...............
  HexData := InHex(@Buf, Result);
................

  Result := sendNextHook(s, Buf, len, flags);
end;


Это сообщение отредактировал(а) RAdmin - 10.6.2005, 22:11
PM   Вверх
lifer
Дата 11.6.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

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



Спасибо, только вот зачем вот этот кусок кода:
Код

 Result := 0;

  GetMem(BufData, Result);


  try
    CopyMemory(BufData, @Buf, Result);
    BufData[0] := chr(10);
    BufData[1] := chr(20);
    BufData[2] := chr(30); 
    word(pointer(BufData)^) := 10; 
    dword(pointer(integer(BufData) + 2)^) := 20; 
    word(pointer(integer(BufData) + 6)^) := 30; 
    CopyMemory(@Buf, BufData, Result);
  finally
    FreeMem(BufData);
  end;


У меня все работает вот так:

Код

function InHex(Buffer: pointer; Length: Word): string;
var
  i: integer;
  HexBuf: string;
begin
  HexBuf := '';
  for i := 0 to Length - 1 do
  begin
    HexBuf := HexBuf + IntToHex(Ord(char(pointer(integer(Buffer) + i)^)), 2) + ' ';
  end;
  Result := HexBuf;
end;

function sendHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
  HexData: string;
  BufData: pchar;
begin
  HexData := InHex(@Buf, len);
  ShowMessage(HexData);

  Result := sendNextHook(s, Buf, len, flags);
end;

PM MAIL WWW ICQ   Вверх
RA
Дата 11.6.2005, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Цитата(lifer @ 11.6.2005, 12:37)
Спасибо, только вот зачем вот этот кусок кода:


Ну это модификаци, если конечно тебе это нужно. smile
PM   Вверх
Guest
Дата 11.6.2005, 15:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Ну это модификаци, если конечно тебе это нужно

А... ну тогда наверное должно быть так:

Код

CopyMemory(@Buf, BufData, Result); 
...
CopyMemory(BufData, @Buf, Result);


Мне нужно будет модифицировать пакеты вручную, для этого я и делаю перевод в Hex.


  Вверх
lifer
Дата 12.6.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

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



Цитата
А... ну тогда наверное должно быть так:

Ой, ошибся, вы были правы. я не туда глядел smile
PM MAIL WWW ICQ   Вверх
Tosik
Дата 5.4.2010, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тема хоть и старая, но вопрос актуальный. Есть желающие помочь разобраться с тем о чём говориться в теме?
PM MAIL   Вверх
Rennigth
Дата 6.4.2010, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А в чем вопрос-то? Проблемма в чем?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Tosik
Дата 6.4.2010, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Разбираю вот этот код 
Присоединённый файл ( Кол-во скачиваний: 150 ) 
  InjectandhookDll.rar 2,36 Kb
(Выложенный выше).

Нужно изменить все вот это
Код

procedure InjectTo(Dll,FileName:String);
var
  dll_to_inject: String;

  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  ContinueLoop: BOOL;
  hp: Thandle;
begin
  GetDebugPrivs;
  dll_to_inject := Dll;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  While ContinueLoop do
  begin
    If LowerCase(FProcessEntry32.szExeFile) = LowerCase(FileName) then
    begin
      InjectDllToTarget(dll_to_inject, FProcessEntry32.th32ProcessID, @InjectedProc, 1000);
      Break;
    end;
    ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);  
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 InjectTo(ExtractFilePath(ParamStr(0)) + 'Hook.dll',Edit1.text);
end;

end.

На то чтобы, по нажатию проверялось CRC файла, если совпадает exe'шка запускается и  внедряется dll . 


Также желательно примерчик, как шифровать трафик в dll, ну и вообще интересует как можно зашифровать трафик, чтобы потом его расшифровать сервером. 

Это сообщение отредактировал(а) Tosik - 6.4.2010, 08:49
PM MAIL   Вверх
KotJ
Дата 16.4.2010, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код библиотеки :
Код

library Hook;

uses
  Windows,
  Winsock,
  SysUtils,
  madCodeHook;

var
  sendNextHook: function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
  sendtoNextHook: function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;

function sendHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var f:file;
begin
  AssignFile(f,'h:\\text.txt');
  Rewrite(f);
  CloseFile(f);
  Result := sendNextHook(s, Buf, len, flags);;
end;

function sendtoHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var f:file;
begin
  AssignFile(f,'h:\\text.txt');
  Rewrite(f);
  CloseFile(f);
  Result := sendtoNextHook(s, Buf, len, flags);;
end;

begin
  //HookAPI(PChar('c:\\WINDOWS\\system32\\WSOCK32.DLL'), PChar('send'), @sendHookProc, @sendNextHook);
  //HookAPI(PChar('c:\\WINDOWS\\system32\\WSOCK32.DLL'), PChar('sendto'), @sendtoHookProc, @sendtoNextHook);
  HookCode(@send, @sendHookProc, @sendNextHook);
  HookCode(@sendto, @sendtoHookProc, @sendtoNextHook);
end.


библиотека внедряется в оперу, файл внедряемой библиотеки не удаляется, я так полагаю что это признак что нормально внедрилась.
Но при лазании по Инету, никаких файлов не создается, хотя по идее должно?
Что я делаю не так? не могу никак понять.. пробовал и HookCode и HookAPI..
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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