Autor
|
Tema: RTL_USER_PROCESS_PARAMETERS (Leído 5,134 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
Hi! Tengo la estructura RTL_USER_PROCESS_PARAMETERS, de la cual quiero sacar la linea de comandos,, eso lo tengo, esta en CommandLine pero si quisiera sacar la cantidad de argumentos como podría hacerlo? Structure RTL_USER_PROCESS_PARAMETERS at 002D1528 Address Hex dump Decoded data Comments 002D1528 AC090000 DD 000009AC ; MaximumLength = 2476. 002D152C AC090000 DD 000009AC ; Length = 2476. 002D1530 01000000 DD 00000001 ; Flags = 1 002D1534 00000000 DD 00000000 ; DebugFlags = 0 002D1538 00000000 DD 00000000 ; ConsoleHandle = NULL 002D153C 00000000 DD 00000000 ; ConsoleFlags = 0 002D1540 00000000 DD 00000000 ; StdInputHandle = NULL 002D1544 00000000 DD 00000000 ; StdOutputHandle = NULL 002D1548 00000000 DD 00000000 ; StdErrorHandle = NULL 002D154C 3A00 DW 3A ; CurrentDir_Size = 58. 002D154E 0802 DW 208 ; CurrentDir_Maxsize = 520. 002D1550 C8202D00 DD 002D20C8 ; CurrentDir = "C:\Users\Central\Desktop\MRS\" 002D1554 0C000000 DD 0000000C ; CurrentDirectoryHandle = 0000000C 002D1558 FC03 DW 3FC ; DllPath_Size = 1020. 002D155A FE03 DW 3FE ; DllPath_Maxlen = 1022. 002D155C C8192D00 DD 002D19C8 ; DllPath = "C:\Users\Central\Desktop\MRS;;C:\Windows\system32;C:\Windows\system;C:\Windows;.;C:\Program Files\PC Connectivity Solution\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\AT" 002D1560 4800 DW 48 ; ImagePath_Size = 72. 002D1562 4A00 DW 4A ; ImagePath_Maxlen = 74. 002D1564 C61D2D00 DD 002D1DC6 ; ImagePath = "C:\Users\Central\Desktop\MRS\MRS.exe" 002D1568 5600 DW 56 ; CommandLine_Size = 86. 002D156A 5800 DW 58 ; CommandLine_Maxlen = 88. 002D156C 101E2D00 DD 002D1E10 ; CommandLine = ""C:\Users\Central\Desktop\MRS\MRS.exe" HOLA" 002D1570 10082D00 DD 002D0810 ; Environment = 002D0810 002D1574 00000000 DD 00000000 ; StartPosLeft = 0 002D1578 00000000 DD 00000000 ; StartPosTop = 0 002D157C 00000000 DD 00000000 ; Width = 0 002D1580 00000000 DD 00000000 ; Height = 0 002D1584 00000000 DD 00000000 ; CharWidth = 0 002D1588 00000000 DD 00000000 ; CharHeight = 0 002D158C 00000000 DD 00000000 ; ConsoleTextAttributes = 0 002D1590 81000000 DD 00000081 ; WindowFlags = 81 002D1594 0A000000 DD 0000000A ; ShowFlags = 0A 002D1598 4800 DW 48 ; Title_Size = 72. 002D159A 4A00 DW 4A ; Title_Maxlen = 74. 002D159C 681E2D00 DD 002D1E68 ; Title = "C:\Users\Central\Desktop\MRS\MRS.exe" 002D15A0 1E00 DW 1E ; DesktopName_Size = 30. 002D15A2 2000 DW 20 ; DesktopName_Maxlen = 32. 002D15A4 B21E2D00 DD 002D1EB2 ; DesktopName = "WinSta0\Default" 002D15A8 0000 DW 0 ; ShellInfo_Size = 0 002D15AA 0200 DW 2 ; ShellInfo_Maxlen = 2 002D15AC D21E2D00 DD 002D1ED2 ; ShellInfo = "" 002D15B0 0000 DW 0 ; RuntimeData_Size = 0 002D15B2 0000 DW 0 ; RuntimeData_Maxlen = 0 002D15B4 00000000 DD 00000000 ; RuntimeData = NULL
Como podrán ver, hay un argumento: "HOLA", la cadena es Unicode, así que no me sirve buscar '\0', aunque también esta CommandLine_Size y CommandLine_Maxlen, yo preciso saber si se recibió al menos un argumento.. Gracias! Saludos! PD: Ya que estamos, si alguien resuelve como sacar solo el argumento que tire el dato, aclaro por las dudas.. en el dump muestra "C0:0\0U0s0e0r0s0\0C0e0n0t0r0a0l0\0D0e0s0k0t0o0p0\0M0R0S0\0M0R0S0.0e0x0e0"0H0O0L0A" , por eso pido consejo..
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
Podes usar CommandLineToArgvW. Si es Unicode el fin de la cadena es un doble 0
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Bien! Eso funciono.. solo que me seria mucho mejor sin apis.. (no aclare de entrada, mal yo) Saludos!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
Bueno, tenes el codigo en assembly Lo unico que hace es trabajar con una ristra de bytes mas conocidos como cadenas PD. Ahi tenes un UNICODE_STRING, asi que usa siempre el campo de tamaño correspondiente, no tiene que ser una cadena terminada en 0 a la fuerza.
|
|
« Última modificación: 22 Julio 2014, 20:28 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Bueno, tenes el codigo en assembly Lo unico que hace es trabajar con una ristra de bytes mas conocidos como cadenas PD. Ahi tenes un UNICODE_STRING, asi que usa siempre el campo de tamaño correspondiente, no tiene que ser una cadena terminada en 0 a la fuerza. O sea... a manoplas Pero.. el campo CommandLine_Size = 86. No corresponde con la información, a menos que cuente todos los 0's entre letra y letra, ahí es mas parecido si.. Saludos! Gracias!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
¿Y que queres? O API o a mano, otra no queda Capaz alguien ya lo hizo, busca por ahi, alguna RTL ... El campo coincide exactamente, es el tamaño en BYTEs y en Unicode cada caracter ocupa dos BYTEs, son 43 caracteres y 86 bytes (no incluye 0 terminador).
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
¿Y que queres? O API o a mano, otra no queda Capaz alguien ya lo hizo, busca por ahi, alguna RTL ... Ok.. ok Pense que a lo mejor podía usar alguno de esos campos y llegar a la "cadena" argumento.. Solo el "HOLA" El campo coincide exactamente, es el tamaño en BYTEs y en Unicode cada caracter ocupa dos BYTEs, son 43 caracteres y 86 bytes (no incluye 0 terminador). Ha,,, por eso los 0's Gracias!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
Ok.. ok Pense que a lo mejor podía usar alguno de esos campos y llegar a la "cadena" argumento.. Solo el "HOLA" Tal vez podrias comparar con ImagePath ... igual podrian haber mas parametros ... asi que mejor usa la API o implementala
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Tal vez podrias comparar con ImagePath ... igual podrian haber mas parametros ... asi que mejor usa la API o implementala Justo,, justo entre para preguntar eso.. estaba viendo que con ImagePath, ImagePath_Size, CommandLine y CommandLine_Size se puede resolver todo.. unas restas y listo.. pero.. es confiable el metodo? Mas allá que el dia de mañana cambie el PEB.. Me refiero a si es 100% seguro en todas las pc's? Yo espero recibir un argumento o ninguno.. Saludos!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
Creo que por las vias normales el ejecutable siempre es el primer parametro (argv[0]) pero es posible llamar a CreateProcess y que no sea el caso ... igual podes comparar y si la linea de comandos no contiene a la imagen asumir que desde el primer caracter es argv[1] ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
|