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ó::Aplausos: 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: