elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Temas
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 18
1  Seguridad Informática / Análisis y Diseño de Malware / pregunta sobre runPE en windows 10 basado en talleres antiguos del foro en: 27 Febrero 2018, 03:27 am
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

Citar
El 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
  1.    [BITS 32]                  
  2.  
  3.    jmp short cmd                
  4.  
  5.    init:
  6.       mov edx,7634e695h    
  7.       call edx                            
  8.       mov edx,76312acfh      
  9.       call edx
  10.       mov eax, 0x010739D
  11.       jmp  eax                    
  12.    cmd:
  13.       CALL init
  14.       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?

Citar
AddressOfEntryPoint:   0x00014031    (4 bytes)

quiero imaginar que abrio con ollydbg su codigo en asm, y 0x00014031 es la dirección de donde inicia

Citar
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

¿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
2  Programación / Programación C/C++ / problema con dll's en windows 8.1 pro y error en vinculación toupper en: 5 Marzo 2016, 19:26 pm
Hola

¿A alguno de ustedes les ha pasado que en windows 8.1 pro les marca que les faltan dll's?

Lo que pasa es que hice un programa en C, compila correctamente y todo, en windows 10 se ejecuta bien, pero cuando intenté usarlo en un windows 8.1 pro, me aparece que necesito las librerías ms-win-crt-*; descargo todas las que me pide y cuando lo ejecuto me dice que no se puede vincular toupper con el programa

intenté intalando las herramientas de VC++ que mencionan en windows update sobre windows 8.1, pero tampoco me arregló el problema

¿alguien sabe como podría hacerlo funcionar?
3  Seguridad Informática / Nivel Web / como puedo visualizar los datos de un sql completos?, y como guardarlo en un txt en: 19 Julio 2014, 23:01 pm
hola

como puedo visualizar los datos de un sql completos?, estuve haciendo pruebas con un php que hice pero me muestra solo una parte, por ejemplo

nombre, edad, horario entrada, horario salida, trabajo for key 'group_key'

en firefox asi me aparece....

juan penas de azares, 23, horario de en' for key 'group_key'

y quiero vizualizar todo... hay alguna forma de hacerlo?, o de que forma podria hacerlo mediante consola de comandos? o minimo en firefox

juan penas de azares, 23, horario de entrada 2 horas, horario de salida 21 horas, videojuegos for key 'group_key'

uso linux, por cierto, lo intente con wget pero me menciona que el link es demasiado largo, queria tomar el resultado y guardarlo en algun archivo de texto

salu2
4  Sistemas Operativos / Mac OS X / Exsite alguna version de MAC antigua para AMD o VritualBox? en: 16 Julio 2014, 00:38 am
existe alguna versión de MAC que pueda funcionar con una laptop AMD series G, de preferencia para VirtualBox ya que trae por defecto Intel?, aunque sea una versión vieja, solo la quiero para método de estudio, no para diseño gráfico o cosas demasiado pesadas
5  Programación / Programación C/C++ / como hacer la conversión de hexadecimales a UTF? en: 6 Marzo 2014, 21:06 pm
hola

bueno, por fin tendré un tiempo para seguir con un programa que estoy haciendo, quise pedir ayuda a algún maestro pero aunque me entendían, no tienen idea de como hacer algo que pedía... así que me tendré que apoyar nuevamente en la ayuda de este foro para continuar, espero no ser una molestia

bueno, anteriormente me quede con un código donde podía empezar a leer los datos de MFT que es la tabla donde se guarda la información de los archivos que se encuentran en una unidad

pero están codificados y necesito decodificarlos a UTF-8 o UTF-16, hace tiempo me hicieron entender que convertir código de VB a C no es muy recomendable (y es cierto), y la mayoría de ejemplos que encuentro son para VB.net o C#, y utilizan mucho una función llamada Encoding utf8 que ya lo hace automáticamente

y la mayoría de información que encontré fue en Wikipedia, la otra fue de ejemplos como mencione anteriormente, pero no se si no estoy buscando bien o casi no hay información

me podrían ayudar diciéndome de que manera debería buscar en google sobre conversion de hexadecimales a UTF? porque no creo que haya tan poca documentación sobre eso en C o alguien conoce ejemplos o si alguien sabe como hacerlo, me podrían explicar como es la conversión de hexadecimales a UTF-8 o 16

porque aquí esta la tabla con la información del primer archivo, en este caso, seria el nombre, fecha de creación, etc, etc...

$FileName

Código:
0x30 0x00 0x00 0x00 0x68 0x00 0x00 0x00
0x00 0x00 0x18 0x00 0x00 0x00 0x03 0x00 0x4A 0x00 0x00 0x00 0x18 0x00 0x01 0x00
0x05 0x00 0x00 0x00 0x00 0x00 0x05 0x00 0xC7 0xE6 0xC2 0x91 0x93 0x7B 0xCE 0x01
0xC7 0xE6 0xC2 0x91 0x93 0x7B 0xCE 0x01 0xC7 0xE6 0xC2 0x91 0x93 0x7B 0xCE 0x01
0xC7 0xE6 0xC2 0x91 0x93 0x7B 0xCE 0x01 0x00 0x40 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x04 0x03 0x24 0x00 0x4D 0x00 0x46 0x00 0x54 0x00 0x00 0x00 0x00 0x00 0x00 0x00

según wikipedia hay que modificar algunos bits pero no comprendí muy bien

encontré un programa forense para decodificar la fecha, pero no tiene código libre así que no logre saber como lo hace pero puedo asegurar que aquí esta la información necesaria

espero alguien sepa sobre esto y me pueda pasar algo de información

salu2
6  Programación / Programación C/C++ / no funciona ReadFile y overlapped en: 4 Febrero 2014, 00:48 am
hola

tengo un problema con Readfile

Código
  1. d1 = (DWORD*)&crbig;
  2. overlapped.Offset = d1[1];
  3. overlapped.OffsetHigh = d1[0];
  4.  
  5. ret = ReadFile(hDevice, buff, 1024, &numerobyte, &overlapped);
  6.  

tengo a crbig que es igual a 322122547

los coloco en overlapped low y high

offsethigh = 00000003
offset = 22122547;

supuestamente ReadFile deberia leer los datos de la unidad hDevice, en este caso 1024 bytes y deberia empezar a leer desde donde le digo a overlapped que lo haga

al inicio lo hago de esta manera ya que quiero leer el inicio de la unidad

Código
  1. ZeroMemory(&overlapped ,sizeof(OVERLAPPED));
  2.  
  3. hDevice = CreateFileW(zwpath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
  4.  
  5. if(hDevice != INVALID_HANDLE_VALUE){
  6.  
  7. ret = ReadFile(hDevice, buff, 1024, &numerobyte, &overlapped);
  8.  
  9. }
  10.  
si coloco un for de esta manera para saber que aparecio, me salen los bytes sin probemas en un printf

Código
  1. for (int n=0; n<sizeof(buff); n++)  
  2.    {  
  3.        printf("0x%02X ", buff[n]);  
  4.    }

pero despues es cuando modifico overlapped y uso por segunda vez ReadFile

Código
  1. d1 = (DWORD*)&crbig;
  2. overlapped.Offset = d1[1];
  3. overlapped.OffsetHigh = d1[0];
  4.  
  5. ret = ReadFile(hDevice, buff, 1024, &numerobyte, &overlapped);
  6.  

pero me siguen apareciendo los mismo bytes en el for(), ya intente antes de usar por segunda vez ReadFile, borrar el buffer usando memset e incluso usando un buffer diferente, pero me sigue mostrando lo mismo

y supuestamente como les mencione, deberia avanzar hacia donde overlapped dice, deberia leer los 1024 bytes de esa zona, y lo que deberia pasar es que el for me deberia mostrar otros bytes, pero no parece funcionar

alguien sabe o tiene alguna idea de porque no funciona?

salu2
7  Programación / .NET (C#, VB.NET, ASP) / podrian decirme si la conversion de VB.net a C lo hice bien? en: 1 Febrero 2014, 05:41 am
hola

Estoy tratado de pasar un codigo de VB.NET a C, pero hay unas cosas que no logro enteder, entre ellas una funcion llamada Bitconverter, me podrian ayudar analizando los codigos y decirme si lo estoy haciendo bien?

segun MSDN Bitconverter.ToInt sirve para avanzar a cierto offset y tomar bytes, por ejemplo

bitconverter.ToInt32(buffer, 11)

aqui supuestamente avanzaria al offset 0xB, toma 4 bytes desde el offset 0xB, los cambia a big-endian y lo devuelve en un array de bytes

tampoco se si estoy haciendo bien lo de BitConverter.GetBytes

Esto es lo que hay en la multiplicacion

MFTCluster * SectperCluster * BytesPerSect = 322122547

Código
  1. SetReadFileOffset(NO, MFTCluster * SectperCluster * BytesPerSect)
  2.  
  3. Private Sub SetReadFileOffset(ByRef NO As System.Threading.NativeOverlapped, ByRef curBig As Int64)
  4.        Dim lowoffset() As Byte = BitConverter.GetBytes(curBig)
  5.        Dim highoffset As Int32 = BitConverter.ToInt32(lowoffset, 0)
  6.        Dim high As Int32
  7.        Dim lastbytes(3) As Byte
  8.        Array.Copy(lowoffset, 4, lastbytes, 0, 4)
  9.        high = BitConverter.ToInt32(lastbytes, 0)
  10.        NO.OffsetLow = highoffset
  11.        NO.OffsetHigh = high
  12.    End Sub

Y este es el codigo que yo hice, endianhextodec lo hice para simular lo que haria Bitconverter.ToInt32


Código
  1. long endianhextodec(BYTE *buffers, int offs){
  2.  
  3.    BYTE tmp[1] = {0};
  4.  
  5.       if(offs == 0){
  6.  
  7.        tmp[0] = buffers[0];
  8.        tmp[1] = buffers[1];
  9.        tmp[2] = buffers[2];
  10.        tmp[3] = buffers[3];
  11.  
  12.        return tmp[3] << 24;
  13.    }
  14. }
  15.  
  16.  
  17. setreadfileoffset(overlapped, (sectperclusters * (bytespercluster * MFTCluster)));
  18.  
  19.  
  20. void setreadfileoffset(OVERLAPPED overlap, INT64 crbig ){
  21.  
  22. BYTE *lowoffset = (BYTE*)malloc(sizeof(crbig));
  23. INT32 higoffset = endianhextodec(lowoffset, 0);
  24. INT32 high;
  25. BYTE lastbytes[3];
  26.  
  27. for(int i = 0; i < 4; i++){
  28. for(int n = 4; n > 0; n--){
  29.  
  30. lastbytes[i] = lowoffset[n];
  31. }
  32. }
  33.  
  34. high = endianhextodec(lastbytes, 0);
  35. overlap.Offset = higoffset;
  36. overlap.OffsetHigh = high;
  37. }

espero puedan decirme si lo encuentran bien o estoy totalmente equivocado

salu2
8  Programación / Programación C/C++ / es posible concatenar un array byte? en: 31 Enero 2014, 06:33 am
hola

alguien sabe como podria o si es posible concatenar bytes de un mismo array, por ejemplo

BYTE *buffer[2] = {0x00, 0x02}

me gustaria poder concatenarla pero al reves para que quede asi... 0x200, porque necesito cambiar ese valor a decimal, que serian 512 y guardarlo en algun integer

lo intente con strcpy, strcat y memcpy pero no me funcionan porque el buffer es BYTE y aun haciendo cast (char) me tira error

alguien sabe alguna forma de lograr juntar los hexadecimales del array?, porque tambien necesito hacerlo con arrays mas grandes por ejemplo

buff = {0x00, 0x00, 0x02, 0x00, 0x00, 0x00}

y necesito que quede asi 0x20000 para poder convertirlo en decimal

aguna idea o ejemplo que me puedan dar porfavor.
9  Programación / Programación C/C++ / como encontrar offsets de MFT para cambiar los bytes en decimales? en: 30 Enero 2014, 09:12 am
hola

pues ya logre avanzar con un programa que estoy intentando hacer, despues de re-leer, hice un pequeño avance, pero tengo un problema a ver que opinan

segun MSDN hay dos maneras de analizar la unidad C, ya sea

"\\.\C:", "\\.\C:\" o "\\\\.\\PhysicalDrive0"

En visual basic algunos programadores hacen esto

"\\.\" & Mid(Drive, 1, 2)

donde Drive es "C:\"

supuestamente deberia quedar asi... "\\.\C:"... pero al colocarlo de esa forma en el programa ya no funciona, de igual forma en C tampoco funciona

en C la unica forma que me funciona es usando "\\\\.\\PhysicalDrive0", pero tengo la duda de si funcionara o no, supuestamente si me esta funcionando, porque recibo datos, pero no se si haya alguna diferencia o porque razon en VB solo funcione si utilizan Mid, por que si hay alguna, entonces el programa falla desde el principio pero no me he dado cuenta, y me gustaria saber que opinan o si podrian compilar mi codigo y decirme si a ustedes le funciona "\\.\C:" o si es normal y solo les funciono PhysicalDrive0, mas abajo colocare mi codigo

ahora tengo otro problema, necesito la informacion de los clusters, hay estructuras que puedo usar para saber esto pero no hay para algunas cosas que necesito, pero segun un codigo de VB que analice, se pueden conseguir 3 datos que necesito analizando los datos recibidos con ReadFile

Aqui dejo una tabla de los datos que mencionare


Offset    Size    Description
0x0000    3    Jump to the boot loader routine
0x0003    8    System Id: "NTFS    "
0x000B    2    Bytes per sector
0x000D    1    Sectors per cluster
0x000E    7    Unused
0x0015    1    Media descriptor (a)
0x0016    2    Unused
0x0018    2    Sectors per track
0x001A    2    Number of heads
0x001C    8    Unused
0x0024    4    Usually 80 00 80 00 (b)
0x0028    8    Number of sectors in the volume
0x0030    8    LCN of VCN 0 of the $MFT
0x0038    8    LCN of VCN 0 of the $MFTMirr
0x0040    4    Clusters per MFT Record (c)
0x0044    4    Clusters per Index Record (c)
0x0048    8    Volume serial number


los valores que necesito son el offset 0x0B 0x0D y 0x30

el codigo de VB usa una funcion llamaba bitconverter, que busca un offset y los valores los cambia a decimal

el offset Bytepersector lo puedo sacar con una estructura, tambien tengo entendido que en NTFS un cluster tiene 512 bytes, y eso son 8 sectores, y me faltaria encontrar LCN of VCN 0 of the $MFT

Supuestamente al leer los datos de la unidad, se puede saber eso unicamente llendo al offset y tomando los valores dependiendo del tamaño, y en la tabla esta el tamaño de cada offset

Pero mi problema es que no logro encontrar el offset para tomar el valor hexadecimal y convertirlo en decimal, aqui es donde tambien incluyo el problema anterior, no se si no los encuentro porque CreateFile no abre la unidad C: o es porque no estoy interpretando bien los datos

El resultado los compare con un codigo fuente de https://code.google.com/p/datarecover/ y obtengo el mismo resultado al ejecutar el programa, los dos me dan los mismo hexadecimales, aunque yo lo programe diferente

En VB me arroja este resultado Bitconverter donde busca los offset y convierte en decimal los bytes

512
8
786432

Pero leyendo los datos que me arroja buffer, no logro encontrar esa informacion

Me gustaria saber si alguien aqui podria ayudarme a encontrar la manera de saber donde se encuentran esos offset y como debo buscarlos para despues cambiar de hexadecimal a decimal

espero me puedan ayudar

salu2

Código
  1.  
  2. #include <Windows.h>
  3. #include <winioctl.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #define zwpath L"\\\\.\\PhysicalDrive0"
  8.  
  9. int main(int argc, char *argv[]){
  10.  
  11. HANDLE hDevice;
  12. OVERLAPPED overlapped;
  13. BYTE buff[1024] = {0};
  14. DWORD numerobyte = 0;
  15. UINT32 ret;
  16. ZeroMemory(&overlapped, sizeof(OVERLAPPED));
  17.  
  18. hDevice = CreateFileW(zwpath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
  19.  
  20. if(hDevice != INVALID_HANDLE_VALUE){
  21.  
  22. ret = ReadFile(hDevice, buff, 1024, &numerobyte, &overlapped);
  23.  
  24.  
  25. }else
  26. {
  27. return NULL;
  28. }
  29.  
  30. if(ret == 0){
  31.  
  32.  
  33. ret = WaitForSingleObject(hDevice,INFINITE );
  34.  
  35. switch (ret)
  36. {
  37. case WAIT_OBJECT_0:break;
  38. case WAIT_TIMEOUT:break;
  39. default:
  40. break;
  41. }
  42. }
  43. else
  44. {
  45. return NULL;
  46. }
  47.  
  48. CloseHandle(hDevice);
  49.  
  50.  
  51. for (int n=0; n<sizeof(buff); ++n)  
  52.    {  
  53.        printf("0x%02X ", buff[n]);  
  54.    }
  55.  
  56. }
10  Programación / Programación C/C++ / como pasar la funcion BitConverter de VB.NEt a C? en: 28 Enero 2014, 20:25 pm
hola

tengo un array byte donde guardo informacion guardada por ReadFile, por ejemplo

BYTE buffer[1024]

ReadFile(HFile, buffer, sizeof(buffer), 0);

en VB.net hay una funcion que te convierte bytes en enteros se llama Bitconverter.ToInt16, lo que supuestamente hace es buscar un offset y lo que haya en ese offset lo convierte en decimal

por ejemplo

offset = &HD

BitConverter.ToInt16(buffer, offset)

alli, hasta donde yo se, es que busca en el array BYTE buffer el offset o hexadecimal que en este caso seria 0x0D, y el contenido alli lo cambia a decimal

por ejemplo

primero busca en el array 0x0D, cuando lo encuentra hay un valor que es 0x08 y lo convierte a decimal que igual seria 8, pero puede cambiar el valor, podria ser 0xAF, 0x13, etc...

Entonces quisiera saber como podria leer el array BYTE para encontrar el offset y hacer la conversion de hexadecimal a decimal de lo que haya en cierto offset pero en codigo C

porque Bitconverter convierte dependiendo la base, por ejemplo Int16 convierte los dos primeros bytes, int32 convierte los 4 primeros bytes y int64 convierte los 8 primeros bytes

entonces si por ejemplo en el offset 0x0B hay un valor 0x0102, como encontraria el offset 0x0B para cambiar el valor 0x0102 de hexadecimal a decimal?

me podrian poner algun ejemplo porfavor
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines