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 27-08-2015
JuanOrtega JuanOrtega is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 130
Poder: 13
JuanOrtega Va por buen camino
Extraer las APIS de un ejecutable

Hola estoy pensando en hacer un Antivirus en Delphi para extraer las API que usa un exe y detectar si hay API sospechosas , eh visto varios programas en internet que lo hacen pero no encuentro codigo de nada parecido y menos un manual.

¿ Alguien sabe como se puede hacer ?
Responder Con Cita
  #2  
Antiguo 27-08-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
Revisa este hilo: Explorar datos y funciones exportadas e importadas en el formato PE


Saludos.
Responder Con Cita
  #3  
Antiguo 27-08-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
[modo broma]
Poco a poco, no quieras correr tanto, todavía eres muy joven y antes tienes que aprender muchas cosas
[/modo broma]
Responder Con Cita
  #4  
Antiguo 02-09-2015
JuanOrtega JuanOrtega is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 130
Poder: 13
JuanOrtega Va por buen camino
gracias por responder escafandra.

despues de mucho buscar lo mas parecido que encontre fue esto :

Código Delphi [-]
uses
  ImageHlp;

procedure LoadedDLLExportsFunc(aFileName: string; aList: tStrings);
type
  PDWORDArray = ^TDWORDArray;
  TDWORDArray = array[0..0] of DWORD;
var
  imageinfo: LoadedImage;
  pExportDirectory: PImageExportDirectory;
  dirsize: Cardinal;
  pDummy: PImageSectionHeader;
  i: Cardinal;
  pNameRVAs: PDWORDArray;
  Name: string;
begin
  imageinfo.MappedAddress := PChar(GetModuleHandle(@aFileName[1]));
  if Assigned(imageinfo.MappedAddress) then
  try
    imageinfo.FileHeader := ImageNtHeader(imageinfo.MappedAddress);
    pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
      True, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
    if (pExportDirectory <> nil) then
    begin
      try
        pNameRVAs := PDWORDArray(PChar(imageinfo.MappedAddress) + DWORD(pExportDirectory^.AddressOfNames));
      except
        aList.Add('ERROR: #' + IntToStr(GetLastError));
      end;
      for i := 0 to pExportDirectory^.NumberOfNames - 1 do
        aList.Add(PChar(imageinfo.MappedAddress) + pNameRVAs^[i]);
    end;
  finally
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadedDLLExportsFunc('ntdll.dll', Listbox1.Items);
end;

lo eh probado en Windows Seven 64 bits y no funciona con ninguna dll , ¿ alguien le funciona este codigo ?
Responder Con Cita
  #5  
Antiguo 07-09-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
En Windows 10 si funciona, no lo he probado en Win7. Ese código es muy similar al de ExportVisor

Código PHP:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   
Memo1->Clear();
   
HMODULE hModule LoadLibrary(ComboBox1->Text.c_str());
   if(!
hModule)
     
hModule GetModuleHandle(ComboBox1->Text.c_str());
   if(!
hModule){
     
Memo1->Text "Can't open module"
     return;
   }
   
DWORD ImageBase;
   
PIMAGE_EXPORT_DIRECTORY IED ImageExportDirectory(hModule);
   
charModuleName = (char*)(IED->Name + (DWORD)hModule); 
   
Label1->Caption "Exported data (.edata): " String(ModuleName);
   
Label3->Caption IntToStr((int)IED->NumberOfNames) + " Functions and variables";
   
Update();
   
char** Names = (char**)(IED->AddressOfNames + (DWORD)hModule);
   
DWORDEntryPoints = (DWORD*)(IED->AddressOfFunctions + (DWORD)hModule);
   
WORD*  Index = (WORD*)(IED->AddressOfNameOrdinals + (DWORD)hModule);

   
// Listar las funciones exportadas:
   
ImageBase = (DWORD)hModule;
   if(
ComboBox1->Text == "ntoskrnl.exe" ||
      
ComboBox1->Text == "ntkrnlpa.exe" ||
      
ComboBox1->Text == "ntkrnlmp.exe" ||
      
ComboBox1->Text == "hal.dll") {
        
ImageBase GetKernelBase();
        
Label5->Caption "Kernel Base: 0x" IntToHex((int)ImageBase8);
   }else
     
Label5->Caption "hModule: 0x" IntToHex((int)hModule8);

   for(
int n=0n<IED->NumberOfNamesn++){
      if(
Index[n]>=IED->NumberOfFunctions) continue;
      
charName Names[n] + (DWORD)hModule;
      if(
CheckBox1->Checked)
        
Memo1->Lines->Add("0x" IntToHex((int)EntryPoints[Index[n]], 8) + ": " String(Name));
      else
        
Memo1->Lines->Add("0x" IntToHex((int)(EntryPoints[Index[n]]+ ImageBase), 8) + ": " String(Name));
      
Application->ProcessMessages();
   }

   
FreeLibrary(hModule);

Funciona en Win10. Algunas dll que aporta este código pertenecen al Kernel de WinXP y no existen en siguientes versiones.

Es preferible no cargar un módulo sino analizar el fichero a lo bruto, como lo hace IEDataVisor, aunque es mucho más complejo.


Saludos.

Última edición por escafandra fecha: 07-09-2015 a las 01:25:46.
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
Las Apis de WinXP IZO API de Windows 1 21-02-2007 22:04:53
Extraer el codigo de la aplicacion a traves del ejecutable Acanol Varios 3 13-05-2006 20:34:43
apis jfontane API de Windows 1 26-08-2003 03:01:16
ayuda APIs CoLo-GTi Varios 1 05-08-2003 10:03:08
APIs del BDE Marina Conexión con bases de datos 0 27-05-2003 00:45:24


La franja horaria es GMT +2. Ahora son las 12:19:16.


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