Página 1 de 1
[Funcion] GetOwnPath
Publicado: 10 Mar 2013, 03:38
por orlando9427
Una alternativa a cualquier función, usando la PEB.
{
Autor: Orlando9427
Metodo: InOrderModuleLoad
}
procedure GetOwnPath(): String;
var PEB: Pointer;
begin
asm
push eax
mov eax, fs: $30
mov PEB, eax
pop eax
PEB = Pointer(Pointer(Integer(PEB) + $0C)^);
PEB = Pointer(Pointer(Integer(PEB) + $0C)^);
PEB = Pointer(Pointer(Integer(PEB) + $28)^);
Result = WideCharToString(PEB);
end;
Saludos!
Re: [Funcion] GetOwnPath
Publicado: 12 Mar 2013, 16:22
por Pink
Gracias por el código muy bueno.
Pudiste hacerlo así.
mov eax, fs:[eax+$30]
mov eax, [eax+$10]
mov eax, [eax+$3C]
mov PEB,eax
Re: [Funcion] GetOwnPath
Publicado: 12 Mar 2013, 19:16
por orlando9427
Lo intente hacer así pero no pude, ASM es muy complejo para mi .
El código quedaría así.
procedure GetOwnPath(): String;
var PEB: Pointer;
begin
asm
mov eax, fs:[eax+$30]
mov eax, [eax+$10]
mov eax, [eax+$3C]
mov PEB,eax
end;
Result = WideCharToString(PEB);
end;
Saludos!
Re: [Funcion] GetOwnPath
Publicado: 12 Mar 2013, 22:18
por Pink
Seguro se te hace fácil capo.
saludos
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 03:51
por Metal_Kingdom
orlando9427 escribió:
Lo intente hacer así pero no pude, ASM es muy complejo para mi .
El código quedaría así.
procedure GetOwnPath(): String;
var PEB: Pointer;
begin
asm
mov eax, fs:[eax+$30]
mov eax, [eax+$10]
mov eax, [eax+$3C]
mov PEB,eax
end;
Result = WideCharToString(PEB);
end;
Saludos!
function GetOwnPath(): PWideChar;
begin
asm
mov eax, fs:[eax+$30]
mov eax, [eax+$10]
mov eax, [eax+$3C]
mov Result,eax
end;
end;
Por qué así sí funciona y de tipo string no? pues ni idea, el caso es que se vuelve loco y explota.
Saludos
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 04:00
por orlando9427
Porque para poder usar una string tiene que ser inicializada con un tamaño y si solo devuelves el puntero para llenar una cadena adimensional Delphi se vuelve loco.
Saludos!
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 04:04
por Metal_Kingdom
Sí, pero en teoría debería funcionar como la pusiste:
funcion GetOwnPath(): String;
var PEB: Pointer;
begin
asm
mov eax, fs:[eax+$30]
mov eax, [eax+$10]
mov eax, [eax+$3C]
mov PEB,eax
end;
Result = WideCharToString(PEB);
end;
Pero no funciona ni con setlength.
Edito, claro, si devolvemos un pointer pues como que no..
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 04:08
por orlando9427
De hecho no, le faltan los ":" antes del "=" de Result... Que versión de Delphi usas?
En la 7 me va bien
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 04:12
por Metal_Kingdom
Fue un copy paste rápido de tu post :P, uso Delphi 7, a mí me funciona la que puse con resultado PWideChar, pero no la citada, y la primera para que me funcione he tenido que retocar varias cosas, el procedure [Function], los ':=' y el 'end;' al finalizar el asm.
function GetOwnPath(): String;
var PEB: Pointer;
begin
asm
push eax
mov eax, fs: $30
mov PEB, eax
pop eax
end;
PEB:= Pointer(Pointer(Integer(PEB) + $0C)^);
PEB:= Pointer(Pointer(Integer(PEB) + $0C)^);
PEB:= Pointer(Pointer(Integer(PEB) + $28)^);
Result:= WideCharToString(PEB);
end;
Saludos!
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 04:58
por orlando9427
Tienes razón pero no falla en la string falla en la rutina ASM a pesar de que es la misma no funciona cuando se devuelve una string y si cuando devuelve un puntero. Revisaré un poco haber que sucede.
Saludos!
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 05:07
por Metal_Kingdom
Supuestamente el uso de WideCharToString debería subsanarlo (hablo de la función que pusiste tras la de Pink), pero por alguna razón no lo hace, por algún sitio creo haber visto una solución un poco 'cerda' que recuerdo no encontrarle sentido pero funcionaba, si lo encuentro lo pongo.
Edito y pongo lo que se me ocurrió xD (funciona):
function GetOwnPath(): String;
var PEB: Pointer; s: string;
begin
asm
mov eax, fs:[eax+$30]
mov eax, [eax+$10]
mov eax, [eax+$3C]
mov PEB,eax
end;
s:= PWideChar(PEB);
Result:= s;
end;
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 13:35
por orlando9427
Por alguna razón así si funciona tambien me funciono sin la variable "s" usando Result. Tal vez tenga que ver algo con el stack de la función. Al parecer se han creado muchas variantes de la función xD
Re: [Funcion] GetOwnPath
Publicado: 13 Mar 2013, 15:14
por Pink
Hola. Así lo solucione para que no de error en el código asm. solo limpiamos el registro eax.
Function GetOwnPath():String;
var
PEB:Pointer;
begin
asm
xor eax,eax //Problema resuelto :P
mov eax, fs:[eax+$30]
mov eax, [eax+$10]
mov eax, [eax+$3C]
mov PEB,eax
end;
Result:= WideCharToString(PEB);
end;
Saludos compas.
Re: [Funcion] GetOwnPath
Publicado: 14 Mar 2013, 02:19
por Metal_Kingdom
De lujo Pink, eres la caña :cheers: