hola
Alguien de casualidad tendra el taller de ferchu en PDF?, es que las imagenes ya no funcionan, y no recuerdo como era la tercera parte del taller, que era sobre agregar codigo para que aparezca un messagebox
la parte que no recuerdo es donde dice que una forma de hacerlo es con un truco, que era restarle 0x28 a PE
E0 - 28 = 0xB8
pero en la imagen se mostraba donde eliminarlo y en que parte "CREO" se agregaba algo para que quedara acomodado, y no se que mas cosas se hacian
alguien me podria recordar como era esa parte, porque solo recuerdo que al final, se debia colocar los los opcodes de algun codigo en ASM para su execucion, pero no recuerdo la primera parte para acomodar PE y no mover Bound Import tables o algo así decía él
alguien recuerda eso, o tendrá el taller de ferchu con los ejemplos?
salu2
No sé, pero "infectar" en Notepad y hacer que muestre un msg box?
Inyecta esta shellcode (hello world):
C:
unsigned char data[140] = {
0x31, 0xF6, 0x56, 0x64, 0x8B, 0x76, 0x30, 0x8B, 0x76, 0x0C, 0x8B, 0x76, 0x1C, 0x8B, 0x6E, 0x08,
0x8B, 0x36, 0x8B, 0x5D, 0x3C, 0x8B, 0x5C, 0x1D, 0x78, 0x01, 0xEB, 0x8B, 0x4B, 0x18, 0x67, 0xE3,
0xEC, 0x8B, 0x7B, 0x20, 0x01, 0xEF, 0x8B, 0x7C, 0x8F, 0xFC, 0x01, 0xEF, 0x31, 0xC0, 0x99, 0x32,
0x17, 0x66, 0xC1, 0xCA, 0x01, 0xAE, 0x75, 0xF7, 0x66, 0x81, 0xFA, 0x2A, 0xB6, 0x74, 0x09, 0x66,
0x81, 0xFA, 0xAA, 0x1A, 0xE0, 0xDB, 0x75, 0xC5, 0x8B, 0x53, 0x24, 0x01, 0xEA, 0x0F, 0xB7, 0x14,
0x4A, 0x8B, 0x7B, 0x1C, 0x01, 0xEF, 0x03, 0x2C, 0x97, 0x85, 0xF6, 0x74, 0x15, 0x68, 0x33, 0x32,
0x20, 0x20, 0x68, 0x75, 0x73, 0x65, 0x72, 0x54, 0xFF, 0xD5, 0x95, 0x31, 0xF6, 0xE9, 0xA0, 0xFF,
0xFF, 0xFF, 0x56, 0x68, 0x72, 0x6C, 0x64, 0x21, 0x68, 0x6F, 0x20, 0x77, 0x6F, 0x68, 0x48, 0x65,
0x6C, 0x6C, 0x54, 0x87, 0x04, 0x24, 0x50, 0x50, 0x56, 0xFF, 0xD5, 0xCC
};
ASM:
data db 31h, 0F6h, 56h, 64h, 8Bh, 76h, 30h, 8Bh, 76h, 0Ch, 8Bh, 76h, 1Ch, 8Bh, 6Eh, 08h
db 8Bh, 36h, 8Bh, 5Dh, 3Ch, 8Bh, 5Ch, 1Dh, 78h, 01h, 0EBh, 8Bh, 4Bh, 18h, 67h, 0E3h
db 0ECh, 8Bh, 7Bh, 20h, 01h, 0EFh, 8Bh, 7Ch, 8Fh, 0FCh, 01h, 0EFh, 31h, 0C0h, 99h, 32h
db 17h, 66h, 0C1h, 0CAh, 01h, 0AEh, 75h, 0F7h, 66h, 81h, 0FAh, 2Ah, 0B6h, 74h, 09h, 66h
db 81h, 0FAh, 0AAh, 1Ah, 0E0h, 0DBh, 75h, 0C5h, 8Bh, 53h, 24h, 01h, 0EAh, 0Fh, 0B7h, 14h
db 4Ah, 8Bh, 7Bh, 1Ch, 01h, 0EFh, 03h, 2Ch, 97h, 85h, 0F6h, 74h, 15h, 68h, 33h, 32h
db 20h, 20h, 68h, 75h, 73h, 65h, 72h, 54h, 0FFh, 0D5h, 95h, 31h, 0F6h, 0E9h, 0A0h, 0FFh
db 0FFh, 0FFh, 56h, 68h, 72h, 6Ch, 64h, 21h, 68h, 6Fh, 20h, 77h, 6Fh, 68h, 48h, 65h
db 6Ch, 6Ch, 54h, 87h, 04h, 24h, 50h, 50h, 56h, 0FFh, 0D5h, 0CCh
Dis:
010F1901 31F6 XOR ESI,ESI
010F1903 56 PUSH ESI
010F1904 64:8B76 30 MOV ESI,DWORD PTR FS:[ESI+30]
010F1908 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
010F190B 8B76 1C MOV ESI,DWORD PTR DS:[ESI+1C]
010F190E 8B6E 08 MOV EBP,DWORD PTR DS:[ESI+8]
010F1911 8B36 MOV ESI,DWORD PTR DS:[ESI]
010F1913 8B5D 3C MOV EBX,DWORD PTR SS:[EBP+3C]
010F1916 8B5C1D 78 MOV EBX,DWORD PTR SS:[EBP+EBX+78]
010F191A 01EB ADD EBX,EBP
010F191C 8B4B 18 MOV ECX,DWORD PTR DS:[EBX+18]
010F191F 67:E3 EC JCXZ SHORT CommandC.010F190E
010F1922 8B7B 20 MOV EDI,DWORD PTR DS:[EBX+20]
010F1925 01EF ADD EDI,EBP
010F1927 8B7C8F FC MOV EDI,DWORD PTR DS:[EDI+ECX*4-4]
010F192B 01EF ADD EDI,EBP
010F192D 31C0 XOR EAX,EAX
010F192F 99 CDQ
010F1930 3217 XOR DL,BYTE PTR DS:[EDI]
010F1932 66:C1CA 01 ROR DX,1
010F1936 AE SCAS BYTE PTR ES:[EDI]
010F1937 ^ 75 F7 JNZ SHORT CommandC.010F1930
010F1939 66:81FA 2AB6 CMP DX,0B62A
010F193E 74 09 JE SHORT CommandC.010F1949
010F1940 66:81FA AA1A CMP DX,1AAA
010F1945 ^ E0 DB LOOPDNE SHORT CommandC.010F1922
010F1947 ^ 75 C5 JNZ SHORT CommandC.010F190E
010F1949 8B53 24 MOV EDX,DWORD PTR DS:[EBX+24]
010F194C 01EA ADD EDX,EBP
010F194E 0FB7144A MOVZX EDX,WORD PTR DS:[EDX+ECX*2]
010F1952 8B7B 1C MOV EDI,DWORD PTR DS:[EBX+1C]
010F1955 01EF ADD EDI,EBP
010F1957 032C97 ADD EBP,DWORD PTR DS:[EDI+EDX*4]
010F195A 85F6 TEST ESI,ESI
010F195C 74 15 JE SHORT CommandC.010F1973
010F195E 68 33322020 PUSH 20203233
010F1963 68 75736572 PUSH 72657375
010F1968 54 PUSH ESP
010F1969 FFD5 CALL EBP
010F196B 95 XCHG EAX,EBP
010F196C 31F6 XOR ESI,ESI
010F196E ^ E9 A0FFFFFF JMP CommandC.010F1913
010F1973 56 PUSH ESI
010F1974 68 726C6421 PUSH 21646C72
010F1979 68 6F20776F PUSH 6F77206F
010F197E 68 48656C6C PUSH 6C6C6548
010F1983 54 PUSH ESP
010F1984 870424 XCHG DWORD PTR SS:[ESP],EAX
010F1987 50 PUSH EAX
010F1988 50 PUSH EAX
010F1989 56 PUSH ESI
010F198A FFD5 CALL EBP
010F198C CC INT3
Al final crashearia porque tiene un INT3 podes poner un RET
http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2008_taller_de_formato_pe_by_ferchu-t208278.0.html
aquí esta explicado como hacerlo, pero las imágenes no las puedo ver, solo no recuerdo la parte donde modifica PE disminuyendo 0x28 para no alterar Bound Import y ejecutar un código
Yo obtengo el MsgBox mediante PEB a diferencia de él, que lo hace con las direcciones
bueno, no se sea necesario hacer lo que ferchu explica en su taller para ejecutar código en una nueva sección, por eso me gustaría saber eso
salu2
Cita de: Belial & Grimoire en 23 Junio 2013, 17:26 PM
http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2008_taller_de_formato_pe_by_ferchu-t208278.0.html
aquí esta explicado como hacerlo, pero las imágenes no las puedo ver, solo no recuerdo la parte donde modifica PE disminuyendo 0x28 para no alterar Bound Import y ejecutar un código
Yo obtengo el MsgBox mediante PEB a diferencia de él, que lo hace con las direcciones
bueno, no se sea necesario hacer lo que ferchu explica en su taller para ejecutar código en una nueva sección, por eso me gustaría saber eso
salu2
Yo simplemente agregaria una nueva sección copiara mis instrucciones a ella, Guardo el actual valor del punto de entrada del
PE y lo cambio para que apunta a mi sección ( En mis instrucciones debo como ultimo hacer un salto al viejo punto de entrada ).
Hola,
Lo único que hacía Ferchu era correr 0x28 bytes el inicio de la cabecera NT_HEADER, que comienza con la firma PE.
0x28 bytes porque eso es lo que ocupa una sección en el SECTION_HEADER.
Saludos.
hola
pero alguien sabe con que vuelve a llena esos 0x28 hexadecimales?, porque si borro 0x28 obviamente dejare incompleto el archivo, entonces creo el llenaba con algo esos 28 hexadecimales para volver a acomodar los offset en su lugar y dejar el archivo completo, y no recuerdo eso
si borro 28 hexadecimales, que necesito para llenar esos 28 hexadecimales que borre para dejar el archivo con la misma cantidad de hexadecimales?
porque en una imagen se alcanza a ver que borra los 28 hexadecimales, pero tambien se alcanza a ver que despues de los 28 hexadecimales de PE vuelve a acomodar los hexadecimales para que quede todo en su lugar
Lo que deberias hacer es, aprender a agregar una nueva sección a una imagen, sea como sea de la forma en la que se
explica en el manual, lo mejor y simple es como dije antes agregar la sección y cambiar en punto de entrada, mas cosas
podrian ser hechas despues.
Bajate la documentacion oficial acerca del formato actualizada http://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx
al menos lee la parte de las cabeceras del PE, el contenido de las secciones para esto no es necesario.
es que agregar secciones ya lo hice, solo me hace falta lograr ejecutar opcodes
miren esta imagen de ferchu, elimina 28 hexadecimales y se nota en la imagen, pero luego lo alinea, el problema es que esta muy chica la imagen y no alcanzo a ver con que alinea los demas hexadecimales, en la parte de abajo se ve una linea morada, donde se muestra que esta alienado
http://s1.subirimagenes.com/otros/368697modificado31.jpg
mi problema no es que quiera que me expliquen todo el formate PE, solo esa parte de los 28 hexadecimales, eso es todo
Cita de: Belial & Grimoire en 16 Julio 2013, 16:55 PM
es que agregar secciones ya lo hice, solo me hace falta lograr ejecutar opcodes
miren esta imagen de ferchu, elimina 28 hexadecimales y se nota en la imagen, pero luego lo alinea, el problema es que esta muy chica la imagen y no alcanzo a ver con que alinea los demas hexadecimales, en la parte de abajo se ve una linea morada, donde se muestra que esta alienado
http://s1.subirimagenes.com/otros/368697modificado31.jpg
mi problema no es que quiera que me expliquen todo el formate PE, solo esa parte de los 28 hexadecimales, eso es todo
Yo nisiquiera me tome el tiempo de mirar el manual de ferchu, pero lo que yo supongo es que quieres hacerlo de la forma correcta y si
lo es posible optima. Y si ya has podido agregar la sección solo cambias el punto de entrada y luego debes de redirigir al original.
Pueda que quieras mostrarnos el codigo que llevas lo voy a arreglar :D
lo estoy haciendo manualmente con un editor de hexadecimal, te agradeceria mucho si me puediras explicar esa parte de cambiar el punto de entrada y redirigirlo
te dejo el block de notas que modifique y el codigo hecho en nasm, me imagino que te servira mas el codigo que los opcodes
Estoy usando windows 7 32bits
http://www.mediafire.com/download/ej8gzpqbz9x88bj/notepad.exe
[BITS 32]
section .data
hola: db 'hola mundo',0
box: db 'user32.dll',0
ldlib: dd '0xFFFFFFFF'
ap: db 'MessageBoxA',0
bbox: dd '0xFFFFFFFF'
section .text
global _WinMain@16
extern _LoadLibraryA@4
extern _GetProcAddress@8
extern _ExitProcess@4
_WinMain@16:
xor eax, eax
push box
call _LoadLibraryA@4
mov [ldlib], eax
push ap
push dword [ldlib]
call _GetProcAddress@8
mov [bbox], eax
push 0
push hola
push hola
push 0
call dword [bbox]
push 0
call _ExitProcess@4
Pense que estabas codificandolo,
Primero el codigo en ensamblador es para generar una entera imagen PE, lo que necesitas es un tipo de shellcode, un codigo independiente,
sin cabeceras , y que pueda valerse sin la informacion de las cabeceras y directorios de una imagen PE. en tu codigo usas importaciones directas
del directorio lo que necesitas es obtener los puntero a la funciones escaneando la tabla de exportaciones del modulo, este articulo lo explica bien
http://blog.harmonysecurity.com/2009_06_01_archive.html
tambien vi algunos codigos aqui en el foro.
notepad con una nueva sección de tamano 0x300 y aligneado a 0x400 para que puedas verificar como funciona lo de la alineacion.
http://www.sendspace.com/file/g3ke1a
el campo AddressOfEntryPoint de una imagen PE, es el que indica donde se encuentra la primera instruccion del ejecutable, este es
una direccion virtual. yo he agregado unos NOPs luego un ret, lo que debes hacer es agregar tu codigo en tal punto.
Debido a que yo no se si esto es para aprender como funciona, para usarlo en malware ,etc. mas cosas pueden ser hechas, por ejemlo
si es para malware entonces debes de deriguir al original punto de entrada para que todo funcione bien, de esta manera primero se
ejecutara tu codigo luego se redireccionara al original punto y el programa se ejecutara normalmente.
Todo esto es explicado en el enlace al manual que deje, y es posible que quieras mirar el proposito de BaseOfCode de una imagen PE,
No lo se depende de lo que quieras.
Ademas, hay muchas maneras de hacer este tipo de cosas.
para malware agregar una sección de esta manera no es nada y muy sospechoso, yo prefiero alargar la sección de codigo,
no cambiar el punto de entrada, en lugar buscar por un conjunto de instrucciones que nos ayude a ocultar la infeccion, por
ejemplo un JMP directo o indirecto, CALL lo mismo que JMP, RET, o algun salto condicional que no sea corto y redireccionarlo a
nuestro codigo, luego restaurarlo.
pues ya logre solucionar esa parte, era borrar 28 hexadecimales pero no sobreescribir, sino insertar 28 hexadecimales para colocar la nueva sección asi todo vuelve a su lugar, tambien modifique el PE, antes era E0 - 28 = B8
tambien uso un codigo en asm de una shell
[BITS 32]
jmp short cmd
init:
mov edx,7634e695h
call edx
mov edx,76312acfh
call edx
cmd:
CALL init
db 'cmd',00h
al compilarlo me aparece la shell sin ningun problema cambiando las direcciones de WinExec y ExitProcess, suspuse que eso era lo que tenia que agregar en el block, asi que tambien modifique el numero del espacio en la sección, ya que habia puesto 17, y los opcodes son 26
despues de modificar eso, agregue los opcode sacados con ollydbg
CPU Disasm
Address Hex dump Command Comments
00401000 . /EB 0E JMP SHORT 00401010
00401002 $ |BA 95E63476 MOV EDX,7634E695
00401007 . |FFD2 CALL EDX
00401009 . |BA CF2A3176 MOV EDX,76312ACF
0040100E . |FFD2 CALL EDX
00401010 > \E8 EDFFFFFF CALL 00401002
00401015 . 636D 64 ARPL WORD PTR SS:[EBP+64],BP
00401018 . 00FF ADD BH,BH
EB0EBA95E63476FFD2BACF2A3176FFD2E8EDFFFFFF636D6400FF
pero al ejecutarlo, abre normalmente el block de notas pero no me aparece la shell
leyendo nuevamente el codigo de ferchu pone
codigo OPcodes
Cadena titulo "Soy el notepad y estoy infectado!!!\0"
Cadena msg "Infectado!!!\0"
call [siguiente instruccion] E8 00 00 00 00
pop eax 58
push 0 6A 00
sub eax, 0x12 2C 12
push eax 50
sub eax, 0x24 2C 24
push eax 50
push 0 6A 00
mov eax, 0x77D5050B B8 0B 05 D5 77 // B8 + direccion de MessageBoxA
call eax FF D0
mov eax, 0x010739D B8 9D 73 00 01 // B8 + entry point
jmp eax FF E0
asi que quise agregar B8 a las direcciones, pero tampoco se ejecuta la shell
EB0EBAB895E63476FFD2BAB8CF2A3176FFD2E8EDFFFFFF636D6400FF
EB0EBA-->B8<--95E63476FFD2BA-->B8<--CF2A3176FFD2E8EDFFFFFF636D6400FF
que podria estar pasando?