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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват API 
:(
    Опции темы
<Spawn>
Дата 2.6.2003, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Пробую делать перехват вызовов WinSock API, а именно функции recv. Но что то, используемый мною класс ее ни как не меняет. Внедряюсь в чужое АП при помощи хуков - внедрение проходит успешно, поскольку проверяю наличие библиотеки winsock в процессе через GetModuleHandle.

Вот утсановка хука( часть DLL):
Код
...
const
wsocket='wsock32.dll';
WM_SETSOCKETHOOK=WM_USER+100;
SpecificId=65535;

type
THook_Recv=function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;

var
OldRecv:THook_Recv=nil;
PeImportHooks:=TJclPeMapImgHooks;
Hooked:Boolean=False;

function Hook_Recv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
CopyData:TCOPYDATASTRUCT;
begin
//пересылка данных в компонент обработки
Result:=OldRecv(s,Buf,len,flags);
end;

function SetSocketHook:Boolean;
begin
Result:=False;
PeImportHooks:=nil;
PeImportHooks:=TJclPeMapImgHooks.Create;
if PeImportHooks.HookImport(Pointer(HInstance), wsocket, 'recv',
   @Hook_Recv, @OldRecv) then
begin
 Result:=True;
 ShowMessage('Set Hook');
end
else
begin
 ShowMessage('Error Set Hook);
 PeImportHooks.Free;
end;
end;

function MsgProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PMSG;
begin
if Code >= 0 then
begin
Result := 0;
Msg := Pointer(LParam);
if (Msg.message=WM_SETSOCKETHOOK) and (Msg.wParam=SpecificId) then
begin
 if SetSocketHook then
  Hooked:=True;
end;
end
else
Result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure SetHook;export;stdcall;
begin
HookHandle:=SetWindowsHookEx(WH_GETMESSAGE, @MsgProc, HInstance, 0);
end;
...


Я заглянул в класс подмены функции таблицы импорта, но там все ок - ошибок не было. Причины была в том, что класс, видимо, не нашел этой функции в таблице импорта, поскольку в цикле просморта я подставлял ShowMessage но нахождения не было:
Код
ImportDesc := PImageImportDescriptor(DWORD(Base) + ImportDir.VirtualAddress);
 while ImportDesc^.Name <> 0 do
 begin
   CurrName := PChar(Base) + ImportDesc^.Name;
   if StrIComp(CurrName, PChar(ModuleName)) = 0 then
   begin
     ImportEntry := PImageThunkData(DWORD(Base) + ImportDesc^.FirstThunk);
     while ImportEntry^.Function_ <> 0 do
     begin
       if IsThunked then
       begin
         ImportThunk := PWin9xDebugThunk(ImportEntry^.Function_);
         FoundProc := IsWin9xDebugThunk(ImportThunk) and (ImportThunk^.Addr = FromProcDebugThunk^.Addr);
       end
       else
         FoundProc := Pointer(ImportEntry^.Function_) = FromProc;
       if FoundProc and not IsBadStringPtr(Pointer(ImportEntry^.Function_), 4) then
       begin
         Pointer(ImportEntry^.Function_) := ToProc; ShowMessage('Proc Finded');
         Result := True;
       end;
       Inc(ImportEntry);
     end;
   end;
   Inc(ImportDesc);
 end;

. Продезассемблировав нужную мне прогу при помощи IDA Pro, я увидел там вот это:
Код
.idata:004E435C                 extrn __imp_recv:dword; DATA XREF: recvr
.idata:004E435C                                        ; Receive data from a socket

Почему в заголовке файла она хранится как __imp_recv?
Подскажите пожалста в чем может быть ошибка подмены импорта.

Это сообщение отредактировал(а) <Spawn> - 3.6.2003, 07:19


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 3.6.2003, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



сделай вывод ImportEntry^.Function_ при поиске адреса.
здесь:
FoundProc := Pointer(ImportEntry^.Function_) = FromProc;
"вывод"(ImportEntry^.Function_ );

и убедись, что в списке импорта есть адрес recv...


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 3.6.2003, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Цитата(man2002ua @ 3.6.2003, 01:46)
и убедись, что в списке импорта есть адрес recv...

Как я уже говорил, я проверял наличие самой библиотеки через GetModuleHandle - все было ок. И еще я проверял наличие самой функции при помощи GetProcAddress. Результат тот же - ее адресс был найден.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 3.6.2003, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ок, выведи значение ImportEntry для меня


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 3.6.2003, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Не найдено таких значений!!!!


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 3.6.2003, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



То есть:
CurrName := PChar(Base) + ImportDesc^.Name;
if StrIComp(CurrName, PChar(ModuleName)) = 0 then
begin
// не попадает ?



--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 3.6.2003, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Да результат функции StrIComp всегда не равен 0. Значения ImportDesc^.Name меняется с 354104 по 360268 за 13 итераций и при этом ни разу не выполняется код после if StrIComp(CurrName, PChar(ModuleName)) = 0 then.

Это сообщение отредактировал(а) <Spawn> - 3.6.2003, 17:26


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 3.6.2003, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Я посмотрел значения всех CurrName := PChar(Base) + ImportDesc^.Name - там небыло wsock32.dll !!!!!!!!!!!!!!!!!!!!!!!!!!


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 3.6.2003, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Как же такое может быть, что GetProcAddress(GetModuleHandle('wsock32.dll'),'recv') возвращает адресс функции, а в таблице импорта она не находится? И не находитcя там сама библиотека wsock32.dll.

Вот список импортируемых ДЛЛ (Почему идет повторение?):

kernel32.dll
user32.dll
advapi32.dll
oleaut32.dll
kernel32.dll
advapi32.dll
kernel32.dll
version.dll
gdi32.dll
user32.dll
kernel32.dll
oleaut32.dll
comctrl32.dll

Я пробовал подменить SelectObject - все было ок.

Это сообщение отредактировал(а) <Spawn> - 3.6.2003, 20:46


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
stab
Дата 4.6.2003, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



может я не совсем что-то понимаю, но получается что на момент установки хука сокеты еще не загружены и динамически подгружаются позже... но может я что-то не понимаю smile.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
man2002ua
Дата 4.6.2003, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нет, просто wsock32.dll грузит не сам exe, а одна из библиотек до него.
Дай полный список импортируемых dll. Или скажи - там есть wsock32.dll? Смотри PEViewer.exe например.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 4.6.2003, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



А где эту прогу взять можно?

Я при помощи того класса вытащил вот эти библиотеки:
kernel32.dll
user32.dll
advapi32.dll
oleaut32.dll
kernel32.dll
advapi32.dll
kernel32.dll
version.dll
gdi32.dll
user32.dll
kernel32.dll
oleaut32.dll
comctrl32.dll



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 4.6.2003, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Отправил тебе прогу - смотри почту. Посмотришь, если ли в списке импорта wsock32.dll. Если нет - давай Exе мне.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 4.6.2003, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



ок


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 4.6.2003, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



У меня пока небольшие проблемки смоим основным мылом sad.gif Не мог бы ты, пожалста, послать прогу на [email protected]


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 4.6.2003, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Done


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 4.6.2003, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



В списке импорта WinSock есть, но что странно - напротив адресов нету имен импортируемых функций.
П.С. Класная прога.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 4.6.2003, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ага, значит не все так плохо, как кажется на первый взгляд ;). То что нет имен - ерунда, т.к. твой компонент ищет их не по имени (разумно smile.gif), а по адресу.
Теперь насчет того, что компонент не находит - это не понятно...
Кинь мне если можешь.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 4.6.2003, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Я тебе тогда в привате его давал))


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 4.6.2003, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вижу, токо я уже себе сам такое сделал, не компонентом конечно, но зато все понятно. Поэтому и говорю - давай свой exe, я попробую его пропустить через свой перехватчик. Если не поймает буду ковырять.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 5.6.2003, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Он весит 60 Мб где то)


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 5.6.2003, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мать-перемать... Ладно, говоришь IDA - показывает его, как extern, значит таки включается. Попробуй все найденные имена импортируемых библиотек записать в массив. Потом, для каждого имени - вызывай свой перехватчик, т.е. чтобы компонент искал Recv не в Exe, а этих dll, может какая-то из них импортирует ее.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 5.6.2003, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Пробовал для всех найденых ДЛЛ - функция recv не найдена((((

Это сообщение отредактировал(а) <Spawn> - 5.6.2003, 15:55


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 5.6.2003, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Щас докалупаю перечисление открытых процессом дескрипторов и вышлю тебе dll с перехватом recv.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 5.6.2003, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



ОО)) Заранее спасибо.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 6.6.2003, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Я пробую запустить так(Для примера возьму Form1, чтоб было понятнее как описать имя класса):

InjSpool.exe c:\Download\Temp\InjLib.dll Form1 - при таком запуске ругается, что Process instance not found.

Может я что то делаю неправильно?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 6.6.2003, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Form1 - это имя процесса? Наверно Process1 - более правильно. или вызови диспетчер задач и посмотри как называется процесс, т.к. программа внедряет любую dll в любой процесс...


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 6.6.2003, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Если процесс имеет имя состоящееиз нескольких строк, то вылетает ошибка (


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 6.6.2003, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Блин, ехе-переименуй!
Я не делал для всех случаев проверку- облом, мне это для работы не надо smile.gif
и еще момент - запускать лучше из Far или подобного командера.

Это сообщение отредактировал(а) man2002ua - 6.6.2003, 17:17


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 6.6.2003, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



656: >> WSOCK32.dll [004E4324]
656: <start> 004E4324
656: ---> 71A91890
656: ---> 71A91B7B
656: ---> 71A932CA
656: ---> 71A91AF4
656: ---> 71A91740
656: ---> 71A93ECE
656: ---> 71A91ED3
656: ---> 71AB2E5F
656: ---> 71A912A7
656: ---> 71A91746
656: ---> 71A93C22
656: ---> 71AB1072
656: ---> 71A93E5D
656: ---> 71A9155A
656: ---> 71AB1020
656: ---> 71A91746
656: ---> 71A91A6D
656: ---> 71A941DA
656: ---> 71A92BBF
656: ---> 71A912A7
656: ---> 71A91836


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 7.6.2003, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а сообщения Address Found - patching %08X не было?
Вышли мне wsock32.dll - или сам ida раскрути и скажи, функция recv - Какой адрес имеет?

Это сообщение отредактировал(а) man2002ua - 7.6.2003, 09:04


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 8.6.2003, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Cори что не мог раньше ответить. У меня дома инет вырубился до понедельника( Завтра вышлю тебе winsock.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 9.6.2003, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Это из wsock32.dll

.text:74FE10B2 public recv
.text:74FE10B2 recv proc near
.text:74FE10B2
.text:74FE10B2 Buffers = _WSABUF ptr -8
.text:74FE10B2 s = dword ptr 8
.text:74FE10B2 Flags = dword ptr 0Ch
.text:74FE10B2 NumberOfBytesRecvd= dword ptr 10h
.text:74FE10B2 flags = dword ptr 14h

Это сообщение отредактировал(а) <Spawn> - 9.6.2003, 19:41


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 10.6.2003, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



бред какой-то. Импортируются функции по адресам 71Axxxxxx, а в wsock32 они с 74ххххххххх.
Скопируй мне из ida файла программы
1) обращение к recv _jmp ds:recv - адреса и код
2) значение по адресу, куда переходит jmp __extern recv - запомни адрес XXX
3) открой программу с помощью Hiew и перейди на XXX (нажми F5 и введи .ХХХ (точка впереди), ентер)
4) скопируй мне 4 байта оттеда.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 10.6.2003, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Обращение к recv из проги

.text:004B6222 call recv
.text:004B6227 cmp eax, 0FFFFFFFFh
.text:004B622A jnz short loc_4B6249
.text:004B622C call WSAGetLastError
.text:004B6231 cmp eax, 2733h
.text:004B6236 mov [esi+41Ch], eax
.text:004B623C jz short loc_4B6247
.text:004B623E push eax
.text:004B623F call sub_4B63C0
.text:004B6244 add esp, 4
.text:004B6247
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Я тут маленько порылся и вот, что заметил:

.text:004D063E ; [00000006 BYTES: COLLAPSED FUNCTION recv. PRESS KEYPAD "+" TO EXPAND]

Раскрытое значение
.text:004D063E
.text:004D063E ; --------------- S U B R O U T I N E ---------------------------------------
.text:004D063E
.text:004D063E
.text:004D063E ; int __stdcall recv(SOCKET s,char *buf,int len,int flags)
.text:004D063E
.text:004D063E recv proc near ; CODE XREF: sub_4B6210+12p
.text:004D063E ; sub_4B6FC0+12Dp ...
.text:004D063E jmp ds:__imp_recv ; Receive data from a socket
.text:004D063E recv endp
.text:004D063E

Я что то не совсем понимаю назначение данного кода. То есть при вызове recv вызывается __imp_recv? Для чего?
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Recv в таблице импорта.

.idata:004E435C ; int __stdcall __imp_recv(SOCKET s,char *buf,int len,int flags)
.idata:004E435C extrn __imp_recv:dword ; DATA XREF: recvr
.idata:004E435C ; Receive data from a socket
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
А что за прога Hiew? Где ее можно взять.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 10.6.2003, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



надеюсь тебе в craft@.. пролезет 320 Кб smile.gif
выслал Hiew


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 11.6.2003, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Байты по адресу 004E435C(вместе с тем на которых оказался курсор) - 10 00 00 80. Если это не поможет, то могу выслать сам exe(я ошибся, сказав что он весит 60Мб. Он весит около 1Мб, а вот с сопутствующими файлами он весит порядочно).


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 11.6.2003, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Высылай!


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 11.6.2003, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Done smile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 11.6.2003, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня все нормально обнаруживается той утилиткой, что я тебе высылал InjSpool... Адрес патчится на новый! Ты наверно не тот exe выслал?
1) Запускаем Client.exe
2) Запускаем InjSpool.exe C:\download\InjLib.DLL client
3) - в отладчике Address found - 4E435C smile.gif

Или что-то ты не то делаешь или у меня ОС такая раздолбаная, что позволяет делать с ней что угодно biggrin.gif


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 11.6.2003, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



У меня выводит лишь все используемые модули с функциями. Address found нет. Запускаю клиент, потом
InjSpool.exe C:\download\Delphi\Temp\InjLib.DLL client.exe. У меня Винь ХП. Что делать?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 11.6.2003, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



без понятия... Ставить W2K наверное smile.gif Мне не на чем проверить - ХР нету...


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 11.6.2003, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Попробую на Вин2К сервер.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 11.6.2003, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



На одном форуме мне ответили, что возможно функции импортируются по ординалу и для этого необходимо модифицировать таблицу импорта. И там дали две функции для получения и модификации таблицы. Щас буду с этим разбираться.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
man2002ua
Дата 11.6.2003, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так не "возможно", а так оно и есть. Но при запуске - они преобразуются в нормальные адреса...


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 11.6.2003, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Ну тогда не знаю) Остается один выход - детально изучить заголовок файла и пытаться, пытаться, пытаться...


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 11.6.2003, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Вот, кстати, как это реализуется на Си, в одной похожей рабочей проге -

Код
void SocketHookSet::install()
{
   DWORD oldProtect;

   DWORD image_base = (DWORD)GetModuleHandle(NULL);
   IMAGE_DOS_HEADER *idh = (IMAGE_DOS_HEADER *)image_base;
   IMAGE_FILE_HEADER *ifh = (IMAGE_FILE_HEADER *)(image_base +
       idh->e_lfanew + sizeof(DWORD));
   IMAGE_OPTIONAL_HEADER *ioh = (IMAGE_OPTIONAL_HEADER *)((DWORD)(ifh) +
       sizeof(IMAGE_FILE_HEADER));
   IMAGE_IMPORT_DESCRIPTOR *iid = (IMAGE_IMPORT_DESCRIPTOR *)(image_base +
       ioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

   VirtualProtect((LPVOID)(image_base +
       ioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress),
       ioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].Size, PAGE_READWRITE,
       &oldProtect);

   while(iid->Name)
   {
       for(ImportDescriptorHook * dhook = desc_hooks; dhook->name != 0; dhook++)
           if(stricmp(dhook->name, (char *)(image_base + iid->Name)) == 0)
           {
               //trace_printf("Found descriptor: %s\n", dhook->name);
               IMAGE_THUNK_DATA * pThunk = (IMAGE_THUNK_DATA *)
                   ((DWORD)iid->OriginalFirstThunk + image_base);
               IMAGE_THUNK_DATA * pThunk2 = (IMAGE_THUNK_DATA *)
                   ((DWORD)iid->FirstThunk + image_base);
               while(pThunk->u1.AddressOfData)
               {
                   char * name = 0;
                   int ordinal;
                   // Imported by ordinal only:
                   if(pThunk->u1.Ordinal & 0x80000000)
                       ordinal = pThunk->u1.Ordinal & 0xffff;
                   else    // Imported by name, with ordinal hint
                   {
                       IMAGE_IMPORT_BY_NAME * pname = (IMAGE_IMPORT_BY_NAME *)
                           ((DWORD)pThunk->u1.AddressOfData + image_base);
                       ordinal = pname->Hint;
                       name = (char *)pname->Name;
                   }
                   for(ImportEntryHook * ehook = dhook->entries; ehook->name != 0; ehook++)
                   {
                       if(name != 0 && strcmp(name, ehook->name) == 0)
                       {
                           //trace_printf("Found entry name: %s\n", ehook->name);
                           pThunk2->u1.Function = (PDWORD)ehook->hook_func;
                       }
                       else if(ordinal == ehook->ordinal)
                       {
                           //trace_printf("Found entry ordinal: %s\n", ehook->name);
                           pThunk2->u1.Function = (PDWORD)ehook->hook_func;
                       }
                   }
                   pThunk++;
                   pThunk2++;
               }
           }
       iid++;
   }
}



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 8.7.2003, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Все дело было в том, что при подключении к чужому процессу я указывал в роли hInstance стандартную переменную, а нужно было сделать GetModuleHandle(nil) ))))


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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