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.
El App.path es relativo no creo que se almacene dentro del PE siempre cambiara deacuerdo donde se encuentre el archivo...
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
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
http://www.advancevb.com.ar/?p=140
Paraa cambiar la ruta de un exe en ejecución para la api GetModuleFileName es necesario remplazar la ruta en el PEB del proceso.
Cita de: cobein en 24 Julio 2009, 01:35 AM
http://www.advancevb.com.ar/?p=140
Jajaja, sabia que alguien lo habia hecho! Pense que fue Steve en Delphi :laugh:
+1 para ti :xD :xD
mm me havia olviado que Cobein ya havia echo esto.
Saludos