Un viejo pero efectivo truco para detectar la arquitectura de un sistema es usar los registros de segmento CS, un método que usaba también el malware Kronos:
En base a ésto, un cazador de bugs como Osanda Malith Jayathissa (@OsandaMalith) ha expuesto en su blog otras formas de obtener la arquitectura mediante los registros de segmento ES, GS y FS:
Usando ES
Usando GS
Usando TEB
También podemos usar TEB (Win32 Thread Information Block) + 0xc0 la cuál es ‘WOW32Reserved’.
Y lo mejor, Osanda nos regala también un pequeño programa en C con todas estas técnicas para detectar la arquitectura, tremendamente útil para shellcoding:
Fuente: Detecting Architecture in Windows
xor eax,eax
mov ax,cs
shr eax,5
En base a ésto, un cazador de bugs como Osanda Malith Jayathissa (@OsandaMalith) ha expuesto en su blog otras formas de obtener la arquitectura mediante los registros de segmento ES, GS y FS:
Usando ES
; Author : @OsandaMalith
main:
xor eax,eax
mov ax,es
ror ax, 0x3
and eax,0x1
test eax, eax
je thirtytwo
invoke MessageBox,0, 'You are Running 64-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
jmp exit
thirtytwo:
invoke MessageBox,0, 'You are Running 32-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
exit:
invoke ExitProcess, 0
Usando GS
; Author : @OsandaMalith
main:
xor eax, eax
mov eax, gs
test eax, eax
je thirtytwo
invoke MessageBox,0, 'You are Running 64-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
jmp exit
thirtytwo:
invoke MessageBox,0, 'You are Running 32-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
exit:
invoke ExitProcess, 0
.end main
Usando TEB
También podemos usar TEB (Win32 Thread Information Block) + 0xc0 la cuál es ‘WOW32Reserved’.
; Author : @OsandaMalith
main:
xor eax, eax
mov eax, [FS:0xc0]
test eax, eax
je thirtytwo
invoke MessageBox,0, 'You are Running 64-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
jmp exit
thirtytwo:
invoke MessageBox,0, 'You are Running 32-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
exit:
invoke ExitProcess, 0
.end main
Y lo mejor, Osanda nos regala también un pequeño programa en C con todas estas técnicas para detectar la arquitectura, tremendamente útil para shellcoding:
#include <Windows.h>
#include <wchar.h>
/*
* Author: Osanda Malith Jayathissa - @OsandaMalith
* Website: https://osandamalith.com
* Description: Few tricks that you can use to detect the architecture in Windows
* Link : http://osandamalith.com/2017/09/24/detecting-architecture-in-windows/
*/
BOOL detectArch_ES() {
#if defined(_MSC_VER)
_asm {
xor eax, eax
mov ax, es
ror ax, 0x3
and eax, 0x1
}
#elif defined(__GNUC__)
asm(
".intel_syntax noprefix;"
"xor eax, eax;"
"mov ax, es;"
"ror ax, 0x3;"
"and eax, 0x1;"
);
#endif
}
BOOL detectArch_GS() {
#if defined(_MSC_VER)
_asm {
xor eax, eax
mov ax, gs
}
#elif defined(__GNUC__)
asm(
".intel_syntax noprefix;"
"xor eax, eax;"
"mov ax, gs;"
);
#endif
}
BOOL detectArch_TEB() {
#if defined(_MSC_VER)
_asm {
xor eax, eax
mov eax, fs:[0xc0]
}
#elif defined(__GNUC__)
asm(
".intel_syntax noprefix;"
"xor eax, eax;"
"mov eax, fs:[0xc0];"
);
#endif
}
int main(int argc, char* argv[]) {
wprintf(
!detectArch_ES() ?
L"You are Running 32-bit\n" :
L"You are Running 64-bit\n"
);
wprintf(
!detectArch_GS() ?
L"You are Running 32-bit\n" :
L"You are Running 64-bit\n"
);
wprintf(
!detectArch_TEB() ?
L"You are Running 32-bit\n" :
L"You are Running 64-bit\n"
);
return 1337;
}
Fuente: Detecting Architecture in Windows
¡Gran aporte! Se me da fatal ASM. Lo único que fui capaz de hacer fue un "Hola Mundo" siguiendo un tutorial... Y no me quedó nada claro...
ResponderEliminar¿Taller de ASM en Hackplayers? ¡Apuntando alto!
Ummmm llevo tiempo pensando hacer algo desde 0... A ver si saco tiempo :)
Eliminarjaja seria genial un taller de asm en hackplayers, quisiera aprender y no he encontrado informacion muy clara quizas con mas informacion lo pueda aprender, por cierto gracias por su trabajo
Eliminar