Hola a todos anteriormente también publique cosas que después las termine resolviendo pero ahora necesito ayuda ya que me estanque y no puedo resolver esto , ..

Mis problemas son los siguientes necesito que mi Proyecto, lea un archivo dll lo mueva a temp y le haga LoadLibrary sugerencias de como podría hacerlo algun tutorial especifico alguna ayuda ?

Necesito que mi form -> Proyecto.exe al momento de abrirse estando la dll en la raíz del Proyecto es decir :

En la misma carpeta : Proyecto.exe , Midll.dll (Que la dll sea movida a temp) y se inyecte haciendo loadlibrary .
Pink escribió:Y porque no la cargas desde la raiz?


quieres inyectar la dll o solo cargarla?
Lo que me decis vos es hacer algo así ..
const

KE ='kernel32.dll';
LOAD ='LoadLibraryA';

procedure TForm1.FormCreate(Sender: TObject);
begin
//Aca declaro desde donde quiero hacer la Inyección en este caso C:
LoadLibrary(Pchar('C:/Mi dll.dll')); 

hHandle:= GetModuleHandle(KE);

ADDLOAD:= DWORD(GetProcAddress(hHandle,LOAD));
end;
end;
Pero eso no es lo que necesito ..

Mi idea es la siguiente ejemplo :

Imagen


en vB tengo un codigo que es asi y funciona bien ..
Try
            Kill(My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
            My.Computer.FileSystem.CopyFile(Application.StartupPath & "\Midll.dll", _
            My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
            X = LoadLibrary(My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
            Y = GetProcAddress(X, "MyDLLFunc1")
        Catch ex As Exception
            My.Computer.FileSystem.CopyFile(Application.StartupPath & "\Midll.dll", _
                        My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
            X = LoadLibrary(My.Computer.FileSystem.SpecialDirectories.Temp & "\Midll.dll")
            Y = GetProcAddress(X, "MyDLLFunc1")
        End Try
Pero no tengo idea de como hacer lo mismo en delphi , y lo necesito funcionando en delphi
Pero a lo que me refiero que entonces la escribas si o si en temporales y usas [Enlace externo eliminado para invitados]


o podrias usar tambien

[Enlace externo eliminado para invitados]
y listo.
Última edición por Pink el 24 Jun 2013, 18:21, editado 2 veces en total.
Imagen
Pink escribió:Pero a lo que me refiero que entonces la escribas si o si en temporales y usas
[Enlace externo eliminado para invitados]


y listo.
no aparece nada Content not found


SI el problema es que no se como inicializar el codigo para que la mueva a temp y haga el copyfile a temp y desde startuppath que es donde esta la dll con el proyecto la mueva e inyecte..
Sería algo como esto, puede tener algunos errores en las llamadas a las APIs lo hice de memoria.
En sTemp esta la ruta Temp terminada en '\', obtienes un handle de la libreria cargada. Tienes una variable tipo funcion donde debe de estar tu declaración de la funcion en la DLL. Un ejemplo:
Declaracion en la DLL.
function MyDLLFunc1 (Param1: PChar): Integer; stdcall;
Tu variable se declara así
var fpMyFunc: function (Param1: PChar): Integer; stdcall;
Obtienes el puntero a esa funcion y la guardas en la variable. Todo completo queda así.
var hMod: HMODULE;
   fpMiFunc: function (): Integer;
begin
hMod := LoadLibrary(PChar(sTemp + 'Mi Dll.dll'));
@fpMiFunc := GetProcAddress(hMod, 'MyDLLfunc1');
We do what we must, because, we can-> [www.youtube.com/watch?v=Y6ljFaKRTrI]
Pasa a saludar: NeoDark-Labs.BlogSpot.mx
<<<<Proyectos en curso>>>>
[+]Restauración de SSDT
[+]Driver v3 - Ocultar drivers
[+]Anti-rootkit
Yo creo que te refieres a esto:

CopyFile(PChar('midll.dll'), PChar(GetTempDir + 'midll.dll'), true);
SetCurrentDirectory (Pchar(GetTempDir));
//ya aqui puedes hacer el loadlibrary y cargara la que esta en temp




//funcion para el tempdir
function GetTempDir: string;
var
  Buffer: array[0..MAX_PATH] of Char;
begin
  GetTempPath(SizeOf(Buffer) - 1, Buffer);
  Result := StrPas(Buffer);
end;
saludos
Imagen
orlando9427 escribió:Sería algo como esto, puede tener algunos errores en las llamadas a las APIs lo hice de memoria.
En sTemp esta la ruta Temp terminada en '\', obtienes un handle de la libreria cargada. Tienes una variable tipo funcion donde debe de estar tu declaración de la funcion en la DLL. Un ejemplo:
Declaracion en la DLL.
function MyDLLFunc1 (Param1: PChar): Integer; stdcall;
Tu variable se declara así
var fpMyFunc: function (Param1: PChar): Integer; stdcall;
Obtienes el puntero a esa funcion y la guardas en la variable. Todo completo queda así.
var hMod: HMODULE;
   fpMiFunc: function (): Integer;
begin
hMod := LoadLibrary(PChar(sTemp + 'Mi Dll.dll'));
@fpMiFunc := GetProcAddress(hMod, 'MyDLLfunc1');
Voy a probar todo esto y te digo como funciona yo estaba utilizando algo como esto .. pero no lograba hacer que funcione veremos si funciona lo que me dejaste!!
procedure TForm2.FormCreate(Sender: TObject);
var
dir: string;
  TempPath: array[0..MAX_PATH - 1] of Char;
begin
  GetTempPath(MAX_PATH, TempPath);

  dir := GetCurrentDir;

  CopyFile(PChar('GetCurrentDir\Midll.dll'),PChar('TempPath\Midll.dll'),TRUE);

end;
Pink escribió:Yo creo que te refieres a esto:

CopyFile(PChar('midll.dll'), PChar(GetTempDir + 'midll.dll'), true);
SetCurrentDirectory (Pchar(GetTempDir));
//ya aqui puedes hacer el loadlibrary y cargara la que esta en temp




//funcion para el tempdir
function GetTempDir: string;
var
  Buffer: array[0..MAX_PATH] of Char;
begin
  GetTempPath(SizeOf(Buffer) - 1, Buffer);
  Result := StrPas(Buffer);
end;
saludos

Pink sabes que tengo un problema al declarar estas variables ..
Result := StrPas(Buffer);

CopyFile(PChar('Midll.dll'), PChar(GetTempDir + 'Midll.dll'), true);
Pink escribió:Usa cualquier otra con tal y obtengas el tempdir. es que uso el delphi 7 quizas tienes otro.
No no , yo también tengo Delphi 7 , y también XE2 , XE3 pero el problema son esas 2 lineas nada mas!!
Hola Pink gracias por la ayuda prestada mira en estos momentos no me da ningún error hice un nuevo proyecto pero sabes que tengo un problema .. al momento de verificar donde se encuentran las dlls como podría hacer en un ..
Edit1.Text := SetCurrentDirectory (Pchar(GetTempDir2)); 

Edit2.Text := PChar(GetTempDir2 + 'midll.dll'), true);
Necesito saber la manera correcta con la sintaxys bien escrita de como chequear la ruta de

StartPath o sea donde tengo la dll y necesito verificar la ruta de %temp% gettempdir
Si deseas revisar si un archivo existe usa la función FileExists.
function FileExists ( const FileName : string ) : Boolean;
Devuelve True si existe, False si no
We do what we must, because, we can-> [www.youtube.com/watch?v=Y6ljFaKRTrI]
Pasa a saludar: NeoDark-Labs.BlogSpot.mx
<<<<Proyectos en curso>>>>
[+]Restauración de SSDT
[+]Driver v3 - Ocultar drivers
[+]Anti-rootkit
Responder

Volver a “Delphi”