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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7
11  Programación / ASM / [?] Inicializar vector y trabajar con el en: 3 Julio 2014, 17:55 pm
Hola  ;D

Estoy intentando calcular la media de unos numeros para practicar un poco, pero tengo algunos fallos de concepto, he trabajado antes con ARM, pero las instrucciones en ASM son un poco diferente..

el codigo es este

Código
  1. include 'FASM\INCLUDE\WIN32AX.INC'
  2.  
  3. .data
  4. vector rd 8 ; Reservamos 8 bytes
  5.  
  6. .code
  7. start:
  8. mov eax, 0 ;Media
  9. mov ecx, 0 ;Contador
  10.  
  11. ;Inicializamos el vector
  12. mov [vector], 7
  13. mov [vector+1], 8
  14. mov [vector+2], 5
  15. mov [vector+3], 2
  16. mov [vector+4], 9
  17. mov [vector+5], 1
  18. mov [vector+6], 0
  19. mov [vector+7], 3
  20.  
  21. for:
  22. add eax, [vector] ;Aqui esta el error
  23. inc ecx
  24. cmp ecx, 8
  25. jne for
  26.  
  27.        ; Aqui divido para obtener la media
  28.  
  29. invoke ExitProcess, 0
  30.  
  31. .end start

Se que para los que sepan, es algo muy basico... hay alguna manera de inicializar el vector de una manera mas sencilla? y otra cosa, para ir sumando el valor del vector en un bucle com seria? Intentaba simular esto

Código
  1. for(int i=0;i<8;i++)
  2. {
  3.    eax += vector[i];
  4. }

No quiero codigos completos, solo una ayudita con las instrucciones  :rolleyes:

Saludos
12  Seguridad Informática / Análisis y Diseño de Malware / [?] Duda PE Crypter en: 1 Julio 2014, 00:53 am
Hello!   ;D

Estoy intentando entender la estructura PE para poder entender como se hacen los crypters y esas cosas, y me he quedado estancado en una parte, llevo dos dias buscando para no preguntar porque quizás es algo obvio...  :rolleyes:

Si yo quiero añadir una sección a un ejecutable, tengo que incrementar el NumberOfSections y el SizeOfImage, y luego añadir los datos de la nueva sección, lo estaba programando y tengo de momento esto


Código
  1. // ....
  2.    IMAGE_DOS_HEADER DOS_Header;
  3.    IMAGE_NT_HEADERS NT_Header;
  4.    IMAGE_SECTION_HEADER *SECTION_Header;
  5.  
  6.    FILE *Archivo = fopen("Test.exe", "rb");
  7.  
  8.    if(Archivo)
  9.    {
  10.  
  11.        CopyFile("Test.exe", "Backup.exe", TRUE);
  12.  
  13.        printf("Basic File Information\n\n");
  14.        printf("File Name: Test.exe\n");
  15.  
  16.        /* Obtenemos el tamaño del fichero */
  17.        fseek(Archivo,0, SEEK_END);
  18.        unsigned long Tamanyo = ftell(Archivo);
  19.        fseek(Archivo,0, SEEK_SET);
  20.  
  21.        printf("File Size: %lu (%lx)", Tamanyo, Tamanyo);
  22.  
  23.        /* Obtenemos la estructura DOS_HEADER */
  24.        fread(&DOS_Header, sizeof(IMAGE_DOS_HEADER), 1, Archivo);
  25.  
  26.        /* Saltamos hasta la posicion donde empieza NT_HEADER, esa posicion se almacena en e_lfanew */
  27.        fseek(Archivo, DOS_Header.e_lfanew, SEEK_SET);
  28.        fread(&NT_Header, sizeof(IMAGE_NT_HEADERS), 1, Archivo);
  29.  
  30.        NT_Header.FileHeader.NumberOfSections += 1;
  31.        //NT_Header.OptionalHeader.SizeOfImage +=;
  32.  
  33.  
  34.        /* Reservamos memoria para las secciones */
  35.        SECTION_Header = (IMAGE_SECTION_HEADER*)malloc(NT_Header.FileHeader.NumberOfSections*sizeof(IMAGE_SECTION_HEADER));
  36.  
  37.        /* Guardamos las secciones */
  38.        for(unsigned int i=0;i<NT_Header.FileHeader.NumberOfSections-1;i++)
  39.        {
  40.            fread(&SECTION_Header[i], sizeof(IMAGE_SECTION_HEADER), 1, Archivo);
  41.        }
  42.  
  43. // ....
  44.  
  45.        free(SECTION_Header);
  46.  
  47. // ....

Entonces lo que había pensado era hacer esto:

Código
  1. // ....
  2.    IMAGE_DOS_HEADER DOS_Header;
  3.    IMAGE_NT_HEADERS NT_Header;
  4.    IMAGE_SECTION_HEADER *SECTION_Header;
  5.  
  6.    FILE *Archivo = fopen("Test.exe", "rb+");
  7.  
  8.    if(Archivo)
  9.    {
  10.  
  11.        CopyFile("Test.exe", "Backup.exe", TRUE);
  12.  
  13.        /* Obtenemos el tamaño del fichero */
  14.        fseek(Archivo,0, SEEK_END);
  15.        unsigned long Tamanyo = ftell(Archivo);
  16.        fseek(Archivo,0, SEEK_SET);
  17.  
  18.        /* Obtenemos la estructura DOS_HEADER */
  19.        fread(&DOS_Header, sizeof(IMAGE_DOS_HEADER), 1, Archivo);
  20.  
  21.        /* Saltamos hasta la posicion donde empieza NT_HEADER, esa posicion se almacena en e_lfanew */
  22.        fseek(Archivo, DOS_Header.e_lfanew, SEEK_SET);
  23.        fread(&NT_Header, sizeof(IMAGE_NT_HEADERS), 1, Archivo);
  24.  
  25.        NT_Header.FileHeader.NumberOfSections += 1;
  26.  
  27.        /* Reservamos memoria para las secciones (+1 para la nueva sección)*/
  28.        SECTION_Header = (IMAGE_SECTION_HEADER*)malloc((NT_Header.FileHeader.NumberOfSections)*sizeof(IMAGE_SECTION_HEADER));
  29.  
  30.        /* Guardamos las secciones */
  31.        for(int i=0;i<NT_Header.FileHeader.NumberOfSections-1;i++)
  32.        {
  33.            fread(&SECTION_Header[i], sizeof(IMAGE_SECTION_HEADER), 1, Archivo);
  34.        }
  35.  
  36.        DWORD Tamanyo_RawData = 0x10;
  37.        DWORD VirtualAddressEnd = SECTION_Header[NT_Header.FileHeader.NumberOfSections-2].VirtualAddress;
  38.  
  39.        /* Escribimos los datos de la nueva sección */
  40.  
  41.        BYTE NombreSeccion[8] = ".mecra";
  42.        memcpy(SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].Name, NombreSeccion, 8);
  43.  
  44.        SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].SizeOfRawData = Tamanyo_RawData;
  45.        SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].PointerToRawData = Tamanyo;
  46.        SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].Characteristics = 0xE0000020;
  47.        SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].VirtualAddress = VirtualAddressEnd+NT_Header.OptionalHeader.SectionAlignment;
  48.        SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].Misc.VirtualSize = Tamanyo_RawData;
  49.  
  50.        /* Incrementamos el SizeOfImage */
  51.        NT_Header.OptionalHeader.SizeOfImage += Tamanyo_RawData;
  52.  
  53.        /* Escribimos los datos en el archivo */
  54.  
  55.        //Nos situamos al inicio de la NT Header
  56.        fseek(Archivo, DOS_Header.e_lfanew, SEEK_SET);
  57.  
  58.        //Escribimos la cabecera
  59.        fwrite(&NT_Header, sizeof(IMAGE_NT_HEADERS), 1, Archivo);
  60.  
  61.        //Saltamos al Section Header
  62.        fseek(Archivo, DOS_Header.e_lfanew + sizeof(IMAGE_NT_HEADERS), SEEK_SET);
  63.  
  64.        //Escribimos los datos y la cagamos porque nos cargamos lo que sigue al insertar la sección asi ^^
  65.        for(int i=0;i<NT_Header.FileHeader.NumberOfSections;i++)
  66.        {
  67.            fwrite(&SECTION_Header[i], sizeof(IMAGE_SECTION_HEADER), 1, Archivo);
  68.        }
  69.  
  70. // ....
  71.  
  72.        free(SECTION_Header);
  73.  
  74. // ....
  75.  

Los que sepan del tema ya sabrán donde estoy fallando, y yo me hago una ligera idea  :huh: :huh:

Según he estado leyendo, tiene que haber espacio para poder insertar la sección, cosa que no compruebo, pero donde está el contenido de cada sección? Justo despues de IMAGE_SECTION_HEADER?

Lo que habia pensado era guardar el contenido que hay justo después de la última sección, insertar la mia, insertar el contenido que he guardado, y modificar de cada sección el PointerToRawData sumando el tamaño de la cabecera de la nueva sección, para apuntar de nuevo donde empieza la sección :rolleyes:

Si no se hace así, a ver si alguien me puede dar una idea de como se hace.. Tengo los conceptos un poco liados  :-\




Dos cositas mas  :silbar:

He estado leyendo el código de [Zero] de como añadir una sección..

http://foro.elhacker.net/analisis_y_diseno_de_malware/srcc_anadir_una_seccion-t261801.0.html

Y veo que utiliza

Citar
PIMAGE_DOS_HEADER;
PIMAGE_NT_HEADERS;
PIMAGE_SECTION_HEADER;

En vez de utilizar esto
Citar
IMAGE_DOS_HEADER;
IMAGE_NT_HEADERS;
IMAGE_SECTION_HEADER;

Hay alguna diferencia? (Ventajas)

PIMAGE_DOS_HEADER sería un puntero a IMAGE_DOS_HEADER?  :huh:

Y ya por último...  :laugh:

He visto en un crypter que he encontrado por internet esta rutina para descifrar una sección


Código
  1. //Rutina encargada de descifrar la sección cifrada
  2. char uncryptroutine[] =       //21 bytes
  3.    "\xB8\x00\x10\x40\x00"  //B8 00104000  MOV EAX, 401000    Section Start  ||Este valor será modificado
  4.    "\x80\x30\xBB"          //8030 BB      XOR BYTE[EAX], BB  Key
  5.    "\x40"                  //40           INC EAX
  6.    "\x3D\x00\x45\x40\x00"  //3D 00454000  CMP EAX, 404500    Section End  ||Este valor será modificado
  7.    "\x75\xF5"              //75 F5        JNZ SHORT -11      (Complemento a dos de 11 = F5)
  8.    "\xB8\x00\x20\x40\x00"  //B8 00204000  MOV EAX, 402000    Pone en EAX el OEP || Este valor será modificado
  9.    "\xFF\xE0";             //FFE0         JMP EAX            Salta al OEP

Se supone que eso son instrucciones en ASM? :huh: :huh:

Saludos

13  Sistemas Operativos / GNU/Linux / [?] Saber Distribución por Comandos en: 17 Junio 2014, 14:18 pm
Hola  ;D

Bueno pues como bien dice el título, lo único que quiero saber es como puedo saber en que distribución estoy,  utilizando comandos :huh:

Me explico, cuando tu te vas al "acerca de" del sistema en el que estás, sale algo así,

En el caso de elementary OS):


Citar
Versión: 0.2 "Luna" ( 32-bit )
Built on: Ubuntu 12.04 ( "Precise" )

En Ubuntu 14.04:
Citar
Versión: Ubuntu 14.04 LTS


Alguien sabe algún comando para obtener esa información? Solo me interesa saber si estas en CenOS, Debian, Ubuntu, Red Hat, openSUSE, etc..  :huh: :huh:

Saludos  :silbar:

14  Programación / Programación C/C++ / [?] Tor y C/C++ en: 19 Mayo 2014, 20:20 pm
Hola, estoy intentando hacer una mini aplicación usando sockets, pero pasando a través de Tor, es decir, conectando la aplicación a tor, y luego utilizar sockets. :silbar:

El problema es que no encuentro nada de documentación sobre como utilizar tor desde C/C++, lo único que he encontrado es libtor, y al ser de 2012 no está muy actualizado, y me faltan archivos al compilar   :rolleyes:

https://github.com/libtor

Alguien sabe como puedo hacerlo?   (Alguna librería que pueda utilizar)  :huh: :huh:

Saludos
15  Programación / ASM / [?] ARM IDE en: 12 Abril 2014, 11:08 am
Hola  ;D

Estoy empezando con ARM y en la uni nos han dicho que podemos usar DevkitARM junto con el Programmers Notepad como IDE, pero es para Windows, y estoy en Linux..   :-\

Alguien sabe que IDE puedo usar en Linux junto con DevkitARM?  :huh:

Saludos
16  Programación / Java / [?] Conexión HTTP Post en: 1 Marzo 2014, 13:01 pm
Buenas, estoy intentando pasar un codigo VB6 a Java..

El código en VB6 es este

Código
  1. Dim objHttp As Object, strURL As String, strText As String
  2.  
  3. strURL = "Mi web/" & "conectado.php"
  4.  
  5. Set objHttp = CreateObject("MSXML2.ServerXMLHTTP")
  6.  
  7. objHttp.Open "POST", strURL, False
  8.  
  9. objHttp.setRequestHeader "User-Agent", "Mozilla/5.0"
  10.  
  11. objHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  12.  
  13. objHttp.Send ("Te he enviado un mensaje")
  14.  
  15. strText = objHttp.ResponseText

Y lo que tengo hecho en Java hasta el momento es esto

Código
  1. public static void sendPost() throws Exception
  2. {
  3. String url = "Mi web/" & "conectado.php";
  4. URL obj = new URL(url);
  5. HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
  6.  
  7. con.setRequestMethod("POST");
  8. con.setRequestProperty("User-Agent", "Mozilla/5.0");
  9.        con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  10.  
  11. }


(Tengo mas código de unas pruebas que he hecho pero no me funciona)

El problema es que no se como enviar datos y recibirlos del servidor desde Java..

A ver si me pueden echar una mano  :huh: :huh:

Saludos
17  Programación / Programación General / [VBS] Saber si eres administrador en: 23 Febrero 2014, 19:41 pm
Hola a todos,

Estoy intentando saber si eres administrador desde vbs, he publicado este post en Visual Basic, con unos trozos de código, pero quizas con vbs es más fácil, a ver si me pueden dar ideas...  :huh: :huh:

Visual Basic: http://foro.elhacker.net/programacion_visual_basic/saber_si_eres_administrador_vb6-t409096.0.html

Saludos
18  Programación / Programación Visual Basic / [?] Saber si eres Administrador vb6 en: 20 Febrero 2014, 12:08 pm
Buenas!  ;D

He estado buscando como saber si eres administrador o no con vb6, he encontrado estas dos funciones, y en Windows XP, funcionan perfectas, pero en Windows 8 siempre me devuelve false  :-[

(En Windows 7 y Windows Vista no lo he probado)


Código
  1. Option Explicit  
  2.  
  3. ' constantes  
  4. ''''''''''''''''''''''''''''''  
  5.  
  6. 'Constantes para usar con OpenSCManager  
  7. Private Const GENERIC_READ = &H80000000  
  8. Private Const GENERIC_WRITE = &H40000000  
  9. Private Const GENERIC_EXECUTE = &H20000000  
  10.  
  11. ' declaraciones Api  
  12. ''''''''''''''''''''''''''''''  
  13.  
  14. 'Función Api OpenSCManager  
  15. Private Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" ( _  
  16.    ByVal lpMachineName As String, _  
  17.    ByVal lpDatabaseName As String, _  
  18.    ByVal dwDesiredAccess As Long) As Long  
  19.  
  20. 'Función Api CloseServiceHandle  
  21. Private Declare Function CloseServiceHandle Lib "advapi32.dll" ( _  
  22.    ByVal hSCObject As Long) As Long  
  23.  
  24. Private Sub Form_Load()  
  25. Dim Admin As Long  
  26.  
  27.    Admin = OpenSCManager(vbNullString, _  
  28.                               vbNullString, _  
  29.                               GENERIC_READ Or GENERIC_WRITE Or GENERIC_EXECUTE)  
  30.  
  31.    'Si la función retorna 0 no es Administrador  
  32.    If Admin = 0 Then  
  33.        MsgBox "No es un Administrador", vbInformation  
  34.    Else  
  35.        CloseServiceHandle Admin  
  36.        MsgBox "Es un administrador", vbInformation  
  37.    End If  
  38.  
  39. End Sub

Código
  1. Option Explicit  
  2.  
  3.  
  4. 'Función Api IsNTAdmin  
  5. Private Declare Function IsNTAdmin Lib "advpack.dll" ( _  
  6.    ByVal dwReserved As Long, _  
  7.    ByRef lpdwReserved As Long) As Long  
  8.  
  9. Private Sub Form_Load()  
  10.    MsgBox "Administrador de este equipo: ? " & _  
  11.            CBool(IsNTAdmin(ByVal 0&, ByVal 0&)), vbInformation  
  12. End Sub

Se puede mirar de otra manera? Es decir, alguna clave en el registro o con alguna otra funcion?  :-\ :-\

Espero que puedan ayudarme  :(

Saludos
19  Programación / Programación C/C++ / [?] Error fgets (Solucionado) en: 19 Enero 2014, 14:56 pm
Hola, tengo un problema con fgets, estoy intentando separar un numero de 4 digitos, e introducir cada uno de ellos en una posicion del array  :silbar:

Para eso lo guardo en un array de caracteres y asi ya me guarda en cada posicion un numero, pero tal y como esta el codigo ahora solo guarda tres (lo he mirado con el debugger), cuando en teoria deberia guardar 4 (MAX)

Debería hacer esto:

Numero: 4578

Pos_1      Pos_2      Pos_3      Pos_4
  4             5             7            8

Pero hace esto:

Numero: 4578

Pos_1      Pos_2      Pos_3      Pos_4
   4             5             7            -48

Es decir, la ultima posicion del array la toma como 0, y al restar 48 (es lo mismo usar la funcion atoi), se queda en -48  :o

Código
  1. #include <stdio.h>
  2.  
  3. #define MAX 4
  4. #define TONUM 48
  5.  
  6. int main()
  7. {
  8. char Cadena[MAX];
  9. int Numero[MAX];
  10.  
  11.        printf("Introduce un numero de 4 digitos: ");
  12.        fgets(Cadena, MAX, stdin);
  13.        getchar();
  14.  
  15.        // Ahora convertimos la cadena a numerico
  16.  
  17.        for(int i=0;i<MAX;i++)
  18.        {
  19.            Numero[i] = Cadena[i] - TONUM;
  20.            printf("%d", Numero[i]);
  21.        }
  22.  
  23.        return 0;
  24. }

No se donde puedes estar el error, porque seguro que es muy tonto  :rolleyes:  :rolleyes:

Saludos

(El código es un recorte del grande, pero esa es la parte que falla, asi que quizas no va bien porque me he dejado algo  ;D )
20  Programación / Scripting / [?] Bash Script SSH en: 14 Diciembre 2013, 12:00 pm
Buenas, pues tengo un pequeño problemilla, estoy intentando ejecutar un comando en otro pc sin ser root vía SSH, con "sudo $Comando", pero no se como modificar el script  :rolleyes:

Código
  1. #!/bin/bash
  2. HOST="Aqui la IP"
  3. USER="Aqui el Usuario"
  4. PASS="Aqui la Contraseña del Usuario"
  5. CMD=$@
  6. VAR=$(expect -c "
  7. spawn ssh -o StrictHostKeyChecking=no $USER@$HOST sudo $CMD
  8. match_max 100000
  9. expect \"*?assword:*\"
  10. send -- \"$PASS\r\"
  11. send -- \"\r\"
  12. send -- \"$PASS\r\"
  13. send -- \"\r\"
  14. expect eof
  15. ")
  16. echo "==============="
  17. echo "$VAR"

La salida que da es:

Citar
?@Ubuntu:/home/?/Desktop$ ./System.sh "reboot"
===============
spawn ssh -o StrictHostKeyChecking=no Usuario@IP sudo reboot
Usuario@IP password:
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts

A ver si me pueden ayudar...  :huh: :huh:

PD: Para que funcione tenemos que tener expect instalado  :silbar:


Citar
apt-get install expect

Saludos
Páginas: 1 [2] 3 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines