Me gustaria que me respondan varias dudas que tengo de este trozo de codigo ... Quiero crear mi primer shellcode para windows pero me he encontrado con una gran obstaculo al empezar y eso es encontrar la dirección de memoria de kernel32.dll. Hasta ahora he probado solo un shellcode que me funciono y es este:
Me parece que ya es muy conocida esta forma de encontrar kernel32:
Syntax NASM
xor dword edx, edx
mov byte dl, 0x30
mov dword edx, [fs:edx] => (1) A que direccion o a que estructura apunta fs ?? Siempre he visto que cambia de valor. Viendolo con Ollydbg.
mov dword edx, [edx + 0xc] => ? (2)
mov dword edx, [edx + 0x1c] => ? (3)
SEARCH_KERNEL:
mov eax, [edx + 0x8], eax => Busca la cadena KERNEL32.dll
mov esi, [edx + 0x20] =>
mov edx, [edx] |¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨|
cmp byte [esi], 0x33 => Espera encontrar el "3" de la cadena kernel 3 2.dll
jne SEARCH_KERNEL
.... Esta es la parte que no entiendo :::
Bueno una vez que lo encuentra la dirección de kernel32 se encuentra en el registro "eax"
(1)(2)(3) Mi primera duda es que dirección esta el "fs" ?? y luego hay alguna estructura en C que me diga el tamaño de cada dato que hay ahí (RESUMIENDO QUIERO QUE ME EXPLIQUEN QUE ESTA HACIENDO LAS 5 PRIMERAS LINEAS)... Me parece que hay mas formas de encontrar esa dirección ... Si podrían pasarme link donde pueda ver como obtener . Y bueno GRACIAS a los que se han dado la molestia de leer hasta aquí. (Disculpen mis faltas ortográficas T_T).
Me parece que ya es muy conocida esta forma de encontrar kernel32:
Syntax NASM
xor dword edx, edx
mov byte dl, 0x30
mov dword edx, [fs:edx] => (1) A que direccion o a que estructura apunta fs ?? Siempre he visto que cambia de valor. Viendolo con Ollydbg.
mov dword edx, [edx + 0xc] => ? (2)
mov dword edx, [edx + 0x1c] => ? (3)
SEARCH_KERNEL:
mov eax, [edx + 0x8], eax => Busca la cadena KERNEL32.dll
mov esi, [edx + 0x20] =>
mov edx, [edx] |¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨|
cmp byte [esi], 0x33 => Espera encontrar el "3" de la cadena kernel 3 2.dll
jne SEARCH_KERNEL
.... Esta es la parte que no entiendo :::
Bueno una vez que lo encuentra la dirección de kernel32 se encuentra en el registro "eax"
(1)(2)(3) Mi primera duda es que dirección esta el "fs" ?? y luego hay alguna estructura en C que me diga el tamaño de cada dato que hay ahí (RESUMIENDO QUIERO QUE ME EXPLIQUEN QUE ESTA HACIENDO LAS 5 PRIMERAS LINEAS)... Me parece que hay mas formas de encontrar esa dirección ... Si podrían pasarme link donde pueda ver como obtener . Y bueno GRACIAS a los que se han dado la molestia de leer hasta aquí. (Disculpen mis faltas ortográficas T_T).