На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> перехват recv
    Добрый день. Пытаюсь перехватить вызов recv в своей программе из браузер IE. Но иногда происходит падение приложения. Никак не могу разобраться в чём же ошибка. Помогите пожалуйста. Проект прикрепил.
    Прикреплённый файлПрикреплённый файлrecv.rar (28,93 Кбайт, скачиваний: 133)
      Причина в процедуре SpliceLockJmp, не смотря на то что VirtualProtect выполняется успешно, атрибуты защиты иногда возвращаются обратно (из-за одновременного вызова функций из разных нитей) и инструкция lock xchg word ptr [ecx], ax выполняется с ошибкой. На этом моменте я кстати заострял внимание в статье - не внимательно читаешь.

      Исправить достаточно просто.

      ExpandedWrap disabled
        function InterceptedSend(S:Cardinal;var Buf;Len:Integer;flags:integer):integer;stdcall;
        type
          TSend = function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
        var
          _send: TSend;
        begin
        //  SpliceLockJmp(HotPathSpliceRec[P_SEND].FuncAddr, HotPathSpliceRec[P_SEND].LockJmp);
        //  Result := send(s,buf,len,flags);
        //  SpliceLockJmp(HotPathSpliceRec[P_SEND].FuncAddr, LOCK_JMP_OPKODE);
          @_send := PAnsiChar(HotPathSpliceRec[P_SEND].FuncAddr) + 2;
          Result := _send(s,buf,len,flags);
        end;
         
        function InterceptedRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
        type
          TRecv = function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
        var
          _recv: TRecv;
        begin
        //  SpliceLockJmp(HotPathSpliceRec[P_RECV].FuncAddr, HotPathSpliceRec[P_RECV].LockJmp);
        //  Result := recv(s, Buf, len, flags);
        //  SpliceLockJmp(HotPathSpliceRec[P_RECV].FuncAddr, LOCK_JMP_OPKODE);
          @_recv := PAnsiChar(HotPathSpliceRec[P_RECV].FuncAddr) + 2;
          Result := _recv(s, Buf, len, flags);
        end;


      Здесь не производится снятие перехватчика, а сразу идет вызов на саму функцию.

      ЗЫ: а вообще хотел этот подход на вторую часть статьи оставить, не думал что кто-то наткнется :)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0192 ]   [ 17 queries used ]   [ Generated: 24.04.24, 10:49 GMT ]