Una pregunta sobre los ejecutables.

Iniciado por ^_^, 23 Julio 2009, 21:38 PM

0 Miembros y 2 Visitantes están viendo este tema.

^_^

Wenas, bueno no me recuerdo donde pero se que vi el Topic de un tema por internet que decia algo de cambiar el App.path o algo asi de los archivos ( .exe ) es posible que se pueda cambiar el app.path de algun exe para que lo de equivocado? y si es asi en que parte del PE el app.path esta guardado? ...

Gracias y espero su colaboracion.

Lupin

El App.path es relativo no creo que se almacene dentro del PE siempre cambiara deacuerdo donde se encuentre el archivo...   

LeandroA

hola esta funcion es de Karcrack que es una alternativa a app.path y GetModuleFileName quizas valiendote de este ejemplo puedas hacer la inversa, pero tampoco doy fe que si asi fuera, tomara app.path diferente. seguramente Karcrack va a leer este post y te va a dar una mejor respuesta.



Option Explicit
'---------------------------------------------------------------------------------------
' Module    : mGetMyPath
' Author    : Karcrack
' Now$      : 28/05/2009  22:01
' Used for? : Get our own path
' Reference : http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/PEB.html
'             http://www.nirsoft.net/kernel_struct/vista/RTL_USER_PROCESS_PARAMETERS.html
'
' Thanks.   : ctlon -> For the links
'             Cobein & SqUeEzEr -> For the mem job (http://hackhound.org/forum/index.php?topic=16203.0)
'
'---------------------------------------------------------------------------------------

'USER32
Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'MSVBVM60
Private Declare Sub GetMem1 Lib "msvbvm60.dll" (ByVal lAddress As Long, var As Byte)

'Function Credits: Cobein & SqUeEzEr
Private Function RtlGetString(lAddr As Long) As String
    Dim i       As Long
    Dim b       As Byte
   
    Do
        Call GetMem1(lAddr + i * 2, b)
        i = i + 1
        If b = 0 Then Exit Do
        RtlGetString = RtlGetString & Chr$(b)
    Loop
End Function

Public Function GetMyPath() As String
    Dim lAddr           As Long
    Dim bvCode()        As Byte
   
    ReDim bvCode(0 To 14)
    'asm (
    ' mov eax, [FS:0x30]
    ' mov eax, [DS:eax+0x10]
    ' mov eax, [DS:eax+0x3C]
    ' ret 16
    ');
    bvCode(0) = &H64:    bvCode(1) = &HA1:    bvCode(2) = &H30:    bvCode(3) = &H0:     bvCode(4) = &H0:    bvCode(5) = &H0:     bvCode(6) = &H8B:    bvCode(7) = &H40:    bvCode(8) = &H10:    bvCode(9) = &H8B:   bvCode(10) = &H40:    bvCode(11) = &H3C:   bvCode(12) = &HC2:    bvCode(13) = &H10:    bvCode(14) = &H0
   
    'Get the Addr of our path saved in the PEB
    lAddr = CallWindowProc(VarPtr(bvCode(0)), 0&, 0&, 0&, 0&)
   
    If lAddr > 0 Then
        'Return the DATA
        GetMyPath = RtlGetString(lAddr)
    End If
End Function


Karcrack

Como me conoces Leandro :xD ;)

Bueno, no entiendo muy bien a lo que te refieres, pero si lo que quieres es que una aplicacion al intentar obtener tu ruta obtenga una equivocada se puede hacer cambiando la informacion que hay en el PEB sobre tu ruta... (Si no me equivoco W$ la carga de ahi :rolleyes:)...

Ahora mismo no tengo ningun code funcional que haga eso, pero puedo intentar mañana hacerlo, ahora aqui en España es algo tarde :P

Creo que habria una restriccion con el tamaño de la ruta..... si fuera mayor a a la actual seria un rollo, abria que reservar memoria y puag.. no es buena idea...

Espero acordarme mañana de esto y prepararte un code :D

cobein

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

YST

Paraa cambiar la ruta de un exe en ejecución para la api GetModuleFileName es necesario remplazar la ruta en el PEB del proceso.


Yo le enseñe a Kayser a usar objetos en ASM

Karcrack


LeandroA

mm me havia olviado que Cobein ya havia echo esto.

Saludos