[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    ну , кнопочка сверху , над тем что редактируешь (там где надо)
     
    1 person likes this.
  2. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    А да, все это я сделал, сохранил фаил в *.Res, как теперь exe сделать?
     
  3. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    Сохранить Как ( и выбираешь win32 pe file )
     
    3 people like this.
  4. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Спс, еще вопрос, как иконку поменять в ResHacker?
     
  5. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    265
    Likes Received:
    638
    Reputations:
    476
    Честно говоря, не вижу причем тут дельфи, но сменить иконку в ResHacker довольно легко: открываем приложение в ResHAcker, далее Action->Replace icon...->Open file with new icon...->Replace->File->Save as...

    Кстати, вот пример простенькой программки, которая предназначена только для данного действия - смены иконок других программ, написано на Дельфи, исходный код прилагается.
     
    _________________________
    1 person likes this.
  6. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    поменялась картинка в папке, но когда запускаеш на панели Пуск старая картинка
     
  7. xaker-boss

    xaker-boss Elder - Старейшина

    Joined:
    6 Mar 2007
    Messages:
    251
    Likes Received:
    49
    Reputations:
    -11
    Подскажите как программно поставить паузу в Windows Media плеере?
    Если нетрудно напишите кодом, буду вам очень блогодарен
    И как сделать так чтобы при сворачивании програма улитала в трей ?
     
    #1627 xaker-boss, 29 May 2008
    Last edited: 29 May 2008
  8. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    WinApi!Или это не в моде?Тебе надо послать сообщение окну!

    Вот:
    Code:
    Описание:
    
    function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
    
    Посылает сообщение оконной функции указанного окна. Возвpат из функции осуществляется только после обpаботки сообщения.
    Параметры:
    
    Wnd: Окно, пpинимающее сообщение или $FFFF для посылки всем всплывающим окнам в системе.
    Msg: Тип сообщения.
    wParam: дополнительная инфоpмация о сообщении.
    lParam: дополнительная инфоpмация о сообщении.
    
    Возвpащаемое значение:
    
    Значение, возвpащенное пpинимающей оконной функцией.
    
    
    С кодом не помогу, юзай сам, а то ничему не научишься:(
     
    #1628 De-visible, 29 May 2008
    Last edited: 29 May 2008
    7 people like this.
  9. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как поменять иконку 16*16? Эта иконка отабражается в меню пуск
     
  10. xaker-boss

    xaker-boss Elder - Старейшина

    Joined:
    6 Mar 2007
    Messages:
    251
    Likes Received:
    49
    Reputations:
    -11
    De-visible извеняюсь конечно, но я некогда неработал с WinApi и незнаю не одной функции.
    Ты не мог бы написать код? плиз
     
    1 person likes this.
  11. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    НTL файлы типа ico представляют собой не только 1 рисунок. в таком файле их может содержаться несколько, 16/24/32 например. поищи среду разработки таких файлов
     
  12. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    o_O

    Я выдел сатые значки лижали там в виде комплекта, 48*48, 32*32, 24*24, 16*16, но как так сделать? можно ли это сделать при помощи проги SngIt?

    Поскал ниче не нашол..... :(

    begin_end: такой вопрос относится к разделу софт-виндовс, там бы быстрее посоветовали нужное ПО, а вообще используй поиск по форуму, вот например нужная тебе программка.
     
    #1632 НTL, 30 May 2008
    Last edited by a moderator: 30 May 2008
  13. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    как можно защитить программу от внедрения библиотеки методом CreateRemoteThread? на Delphi
     
  14. cash$$$

    cash$$$ Banned

    Joined:
    6 Jan 2008
    Messages:
    385
    Likes Received:
    246
    Reputations:
    10
    Для загрузки библиотеки можно использовать функцию LdrLoadDll из ntdll.dll.
    Code:
    function LdrLoadDll(szcwPath: PWideChar;
                        pdwLdrErr: dword;
                        pUniModuleName: PUnicodeString;
                        pResultInstance: PDWORD): NTSTATUS;
                           stdcall; external 'ntdll.dll';
    Нас интересует параметр pUniModuleName представляющий из себя указатель на строку типа UnicodeString в которой передается имя загружаемой DLL. По указателю pResultInstance будет сохранен адрес MZ заголовка загруженной DLL (параметр hInstance).
    Следующий код загружает DLL аналогично функции kernel32 LoadLibraryW:
    Code:
    Function MyLoadLibrary(lpLibFileName: PWideChar): HMODULE;
    var
     uName: TUnicodeString;
    begin
     RtlInitUnicodeString(@uName, lpLibFileName);
     if (LdrLoadDll(nil, 0, @uName, @Result) > 0) then Result := 0;
     RtlFreeUnicodeString(@uName);
    end;
    Для получения адреса функции cледует использовать LdrGetProcedureAddress.
    Code:
    function LdrGetProcedureAddress(hModule: dword;
                                    dOrdinal: DWORD;
                                     psName: PAnsiString;
                                     ppProcedure: ppointer): NTStatus;
                                      stdcall; external 'ntdll.dll';
    Если необходимо обеспечить максимальную скрытность перехвата, то вообще лучше использовать во внедряемом коде только функции Native API.
    Процедура копирования участка памяти в процесс:
    Code:
    function InjectMemory(Process: dword; Memory: pointer; Size: dword): pointer;
    var
      BytesWritten: dword;
    begin
      Result := VirtualAllocEx(Process, nil, Size, MEM_COMMIT or MEM_RESERVE,
                               PAGE_EXECUTE_READWRITE);
      WriteProcessMemory(Process, Result, Memory, Size, BytesWritten);
    end;
    Эта процедура предельно проста, она принимает хэндл открытого процесса, указатель на данные в текущем процессе и размер данных, а возвращает указатель на данные в целевом процессе.

    Внедрение процедуры в целевой процесс:
    Code:
    program InjectCode;
    
    uses
      Windows,
      advApiHook;
    
    type
      TRemoteInfo = record
        LoadLibrary: function(lpLibFileName: PChar): HMODULE; stdcall;
        GetProcAddress: function(hModule: HMODULE;
                                 lpProcName: LPCSTR): FARPROC; stdcall;
        Kernel32    : array[0..16] of Char;
        User32      : array[0..16] of Char;
        MessageBoxA : array[0..16] of Char;
        nExitThread : array[0..16] of Char;
        Text        : array[0..16] of Char;
        Title       : array[0..16] of Char;
      end;
    
    { Процедура внедряемая в процесс }
    procedure RemoteThread(RemoteInfo: pointer); stdcall;
    var
     MessageBox: function(hWnd: HWND; lpText,
                          lpCaption: PChar; uType: UINT): Integer; stdcall;
     ExitThread: procedure(uExitCode: UINT); stdcall;
    begin
      with TRemoteInfo(RemoteInfo^) do
      begin
        @MessageBox := GetProcAddress(LoadLibrary(User32), MessageBoxA);
        @ExitThread := GetProcAddress(LoadLibrary(Kernel32), nExitThread);
        MessageBox(0, Text, Title, 0);
        ExitThread(0);
      end;
    end;
    procedure RemoteThreadEnd; begin end; //метка конца кода 
    
    var
      RemoteInfo: TRemoteInfo;
      pInfo, CodeAdr: pointer;
      TID: dword;
      Process: dword;
      StartInfo: TStartupInfo;
      ProcInfo: TProcessInformation;
    
    begin
      //Запускаем процесс
      ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
      StartInfo.cb := SizeOf(TStartupInfo);
      CreateProcess(nil, 'notepad.exe', nil, nil, False, 0,
                    nil, nil, StartInfo, ProcInfo);
      Process := ProcInfo.hProcess;
      //Заполняем структуру передаваемую внедряемому коду
      lstrcpy(RemoteInfo.User32, 'user32.dll');
      lstrcpy(RemoteInfo.Kernel32, 'kernel32.dll');
      lstrcpy(RemoteInfo.MessageBoxA, 'MessageBoxA');
      lstrcpy(RemoteInfo.nExitThread, 'ExitThread');
      lstrcpy(RemoteInfo.Text, 'Hello World!');
      lstrcpy(RemoteInfo.Title, 'Injected MessageBox');
      //получаем адреса используемых API
      @RemoteInfo.LoadLibrary    := GetProcAddress(GetModuleHandle('kernel32.dll'),
                                                   'LoadLibraryA');
      @RemoteInfo.GetProcAddress := GetProcAddress(GetModuleHandle('kernel32.dll'),
                                                   'GetProcAddress');
      //копируем в процесс структуру с данными
      pInfo := InjectMemory(Process, @RemoteInfo, SizeOf(TRemoteInfo));
      //копируем в процесс внедряемый код
      CodeAdr := InjectMemory(Process, @RemoteThread,
                              dword(@RemoteThreadEnd) - dword(@RemoteThread));
      //запускаем внедренный код
      CreateRemoteThread(Process, nil, 0, CodeAdr, pInfo, 0, TID);
    end.
    Перед внедрением кода процедуры, необходимо скопировать в память целевого процесса структуру с данными используемыми внедряемым кодом. В этой структуре необходимо передать адреса функций LoadLibary и GetProcAddress, через которые внедряемый код будет загружать используемые библиотеки и получать адреса используемых функций.
    введем еще одну процедуру:
    Code:
    function InjectThread(Process: dword; Thread: pointer; Info: pointer;
                          InfoLen: dword; Results: boolean): THandle;
    var
      pThread, pInfo: pointer;
      BytesRead, TID: dword;
    begin
      pInfo   := InjectMemory(Process, Info, InfoLen);
      pThread := InjectMemory(Process, Thread, SizeOfProc(Thread));
      Result  := CreateRemoteThread(Process, nil, 0, pThread, pInfo, 0, TID);
      if Results then
        begin
          WaitForSingleObject(Result, INFINITE);
          ReadProcessMemory(Process, pInfo, Info, InfoLen, BytesRead);
        end;
    end;
    Эта процедура копирует в целевой процесс внедряемый код и структуру с данными для него, после чего запускает внедренный код.
    Принимаемые параметры:
    Process - хэндл открытого процесса.
    Thread - указатель на внедряемый код в текущем процессе.
    Info - указатель на структуру с данными.
    InfoLen - размер структуры с данными.
    Results - необходимость возврата результата. (если true, то функция ожидает завершения удаленного потока и копирует обратно структуру с данными) .
     
    1 person likes this.
  15. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    не внедрение библиотеки, а защита от внедрения. интересует именно от createremotethread
     
  16. Nick_Rimer

    Nick_Rimer New Member

    Joined:
    12 May 2008
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    для cash$$$
    спасибо за столь подробный ответ!! правда, я уже давно знаю, как создавать ресурсы посредством brcc32.exe и файлов *.rc
    меня именно шрифты интересовали. Спасибо большое еще раз, буду пробовать!

    ------------

    теперь другой вопрос.. я использую компонент TntRichEdit
    можно ли в нем сделать текст по ширине? если да, то как? если нет, то вопрос отпал..
     
  17. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    begin_end, сделал библиотеку иконок сохранил как icc как теперь поменять значек?
     
  18. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    #1638 Jes, 30 May 2008
    Last edited: 30 May 2008
    2 people like this.
  19. Dr.KoD

    Dr.KoD Elder - Старейшина

    Joined:
    1 Mar 2008
    Messages:
    68
    Likes Received:
    22
    Reputations:
    1
    Nightmarе Вообще юзай компонент динамикскинформ( в нем вообще редактор есть для создания собственных скинов) или SUIPack и не заморачивайся.
     
  20. xaker-boss

    xaker-boss Elder - Старейшина

    Joined:
    6 Mar 2007
    Messages:
    251
    Likes Received:
    49
    Reputations:
    -11
    Кто знает как программно нажать на кнопку 'Enter' ?
    Если незатруднит напишите кодом, плиз
     
Thread Status:
Not open for further replies.