Hola
Estaba tratando de recrear el runPE que The Swash hizo una vez, quería ver si todavia funcionaba en Windows 10 y al parecer si, agregue una sección y notepad sigue funcionando. Pero me quedé con la idea de como se ejecutaba código, así que buscando en el foro, retomaron varios talleres y hay uno de Ferchu donde explica una manera de ejecutar código mediante opcodes, pero hay algo que no entendí, yo sé que la mejor manera es con programación pero siempre se me ha hecho más interesante saber como funcionan las cosas manualmente.
Bueno, les explico.
el menciona que agrega un registro y modifica algunas cosas
Lo cual elimina 0x28 bytes de la zona donde no hay nada o solo garbage, despues agrega esos 0x28 bytes para agregar la nueva sección y no modificar el archivo, sino queda inservible, después agrega la nueva sección.
A SizeOfImageBase le agrega los 50 bytes de la sección o eso creo.
En el código de ASM solo le agrega un jmp a donde inicia la ejecución normal, por ejemplo... en el ejemplo de Ferchu, la ejecución es en el offset 0x9D730000 e ImageBase 0x00000001
Entonces yo lo que haría es algo así
lo que significa que es AddressOfEntryPoint + ImageBase = 0x010739D
Pero aqui viene mi duda, ¿no entiendo donde Ferchu consiguió este dato?, ¿de dondé sacó 0x00014031?
quiero imaginar que abrio con ollydbg su codigo en asm, y 0x00014031 es la dirección de donde inicia
¿Alguien sabe si 0x00014031 será la posición en memoria de "call [siguiente instruccion] E8 00 00 00 00"? o de donde saco 0x00014031?, a ver si alguien recuerda, y es que no puedo abrir cosas con ollydbg porque no me funciona aunque lo seguiré intentando, y casi no le entiendo a Windbg y con gdb pues no logro saber si funciona y no me gusta wine para cosas de windows.
Ya se que es un metodo muy viejo, y practicamente los AV ya lo detienen y etc... pero me dio por repasar esto tan antiguo y tratar de hacerlas funcionar en Windows 10, ya es lo unico que me falta para intentar con nasm, espero me puedan ayudar
Saludos
Estaba tratando de recrear el runPE que The Swash hizo una vez, quería ver si todavia funcionaba en Windows 10 y al parecer si, agregue una sección y notepad sigue funcionando. Pero me quedé con la idea de como se ejecutaba código, así que buscando en el foro, retomaron varios talleres y hay uno de Ferchu donde explica una manera de ejecutar código mediante opcodes, pero hay algo que no entendí, yo sé que la mejor manera es con programación pero siempre se me ha hecho más interesante saber como funcionan las cosas manualmente.
Bueno, les explico.
el menciona que agrega un registro y modifica algunas cosas
CitarEl metodo para agregar la sección es igual que en el capitulo anterior, pero con la diferencia que ahora en vez de desvincular la "Bound Import Table", lo que vamos a hacer es un truquito que consiste en bajar la cabecera PE 0x28 bytes, para tener lugar para definir nuestra sección sin pisar la tabla. Al bajar la cabecera pisamos datos que no son importantes. Luego solo modificamos en offset PE, y listo, agregamos la sección sin desvincular la tabla.
Los datos a modificar en la cabecera entonces son:
Nombre Valor Tamaño
offset PE: 0xE0 - 0x28 = 0xB8 (4 bytes)
NumberOfSections: 0x0004 (+1) (2 bytes)
AddressOfEntryPoint: 0x00014031 (4 bytes)
SizeOfImagebase: 0x00014050 (4 bytes)
Como notaran, ahora modificamos el OEP, con el de nuestro codigo (como ya tengo el codigo echo ya se que empiza en esa dire), y debemos anotar el OEP original del programa para hacer un salto luego de que nuestro codigo finalize, para que comienze el programa normalmente.
Lo cual elimina 0x28 bytes de la zona donde no hay nada o solo garbage, despues agrega esos 0x28 bytes para agregar la nueva sección y no modificar el archivo, sino queda inservible, después agrega la nueva sección.
A SizeOfImageBase le agrega los 50 bytes de la sección o eso creo.
En el código de ASM solo le agrega un jmp a donde inicia la ejecución normal, por ejemplo... en el ejemplo de Ferchu, la ejecución es en el offset 0x9D730000 e ImageBase 0x00000001
Entonces yo lo que haría es algo así
Código (asm) [Seleccionar]
[BITS 32]
jmp short cmd
init:
mov edx,7634e695h
call edx
mov edx,76312acfh
call edx
mov eax, 0x010739D
jmp eax
cmd:
CALL init
db 'cmd',00h
lo que significa que es AddressOfEntryPoint + ImageBase = 0x010739D
Pero aqui viene mi duda, ¿no entiendo donde Ferchu consiguió este dato?, ¿de dondé sacó 0x00014031?
CitarAddressOfEntryPoint: 0x00014031 (4 bytes)
quiero imaginar que abrio con ollydbg su codigo en asm, y 0x00014031 es la dirección de donde inicia
CitarCadena 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
¿Alguien sabe si 0x00014031 será la posición en memoria de "call [siguiente instruccion] E8 00 00 00 00"? o de donde saco 0x00014031?, a ver si alguien recuerda, y es que no puedo abrir cosas con ollydbg porque no me funciona aunque lo seguiré intentando, y casi no le entiendo a Windbg y con gdb pues no logro saber si funciona y no me gusta wine para cosas de windows.
Ya se que es un metodo muy viejo, y practicamente los AV ya lo detienen y etc... pero me dio por repasar esto tan antiguo y tratar de hacerlas funcionar en Windows 10, ya es lo unico que me falta para intentar con nasm, espero me puedan ayudar
Saludos