|
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
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
include 'FASM\INCLUDE\WIN32AX.INC' .data vector rd 8 ; Reservamos 8 bytes .code start: mov eax, 0 ;Media mov ecx, 0 ;Contador ;Inicializamos el vector mov [vector], 7 mov [vector+1], 8 mov [vector+2], 5 mov [vector+3], 2 mov [vector+4], 9 mov [vector+5], 1 mov [vector+6], 0 mov [vector+7], 3 for: add eax, [vector] ;Aqui esta el error inc ecx cmp ecx, 8 jne for ; Aqui divido para obtener la media invoke ExitProcess, 0 .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 estofor(int i=0;i<8;i++) { eax += vector[i]; }
No quiero codigos completos, solo una ayudita con las instrucciones
Saludos
|
|
|
12
|
Seguridad Informática / Análisis y Diseño de Malware / [?] Duda PE Crypter
|
en: 1 Julio 2014, 00:53 am
|
Hello!
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...
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// .... IMAGE_DOS_HEADER DOS_Header; IMAGE_NT_HEADERS NT_Header; IMAGE_SECTION_HEADER *SECTION_Header; FILE *Archivo = fopen("Test.exe", "rb"); if(Archivo) { CopyFile("Test.exe", "Backup.exe", TRUE); printf("Basic File Information\n\n"); printf("File Name: Test.exe\n"); /* Obtenemos el tamaño del fichero */ fseek(Archivo ,0, SEEK_END ); unsigned long Tamanyo = ftell(Archivo ); fseek(Archivo ,0, SEEK_SET ); printf("File Size: %lu (%lx)", Tamanyo , Tamanyo ); /* Obtenemos la estructura DOS_HEADER */ fread(&DOS_Header , sizeof(IMAGE_DOS_HEADER ), 1, Archivo ); /* Saltamos hasta la posicion donde empieza NT_HEADER, esa posicion se almacena en e_lfanew */ fseek(Archivo , DOS_Header. e_lfanew, SEEK_SET ); fread(&NT_Header , sizeof(IMAGE_NT_HEADERS ), 1, Archivo ); NT_Header.FileHeader.NumberOfSections += 1; //NT_Header.OptionalHeader.SizeOfImage +=; /* Reservamos memoria para las secciones */ SECTION_Header = (IMAGE_SECTION_HEADER *)malloc(NT_Header. FileHeader. NumberOfSections*sizeof(IMAGE_SECTION_HEADER )); /* Guardamos las secciones */ for(unsigned int i=0;i<NT_Header.FileHeader.NumberOfSections-1;i++) { fread(&SECTION_Header [i ], sizeof(IMAGE_SECTION_HEADER ), 1, Archivo ); } // .... // ....
Entonces lo que había pensado era hacer esto:// .... IMAGE_DOS_HEADER DOS_Header; IMAGE_NT_HEADERS NT_Header; IMAGE_SECTION_HEADER *SECTION_Header; FILE *Archivo = fopen("Test.exe", "rb+"); if(Archivo) { CopyFile("Test.exe", "Backup.exe", TRUE); /* Obtenemos el tamaño del fichero */ fseek(Archivo ,0, SEEK_END ); unsigned long Tamanyo = ftell(Archivo ); fseek(Archivo ,0, SEEK_SET ); /* Obtenemos la estructura DOS_HEADER */ fread(&DOS_Header , sizeof(IMAGE_DOS_HEADER ), 1, Archivo ); /* Saltamos hasta la posicion donde empieza NT_HEADER, esa posicion se almacena en e_lfanew */ fseek(Archivo , DOS_Header. e_lfanew, SEEK_SET ); fread(&NT_Header , sizeof(IMAGE_NT_HEADERS ), 1, Archivo ); NT_Header.FileHeader.NumberOfSections += 1; /* Reservamos memoria para las secciones (+1 para la nueva sección)*/ SECTION_Header = (IMAGE_SECTION_HEADER *)malloc((NT_Header. FileHeader. NumberOfSections)*sizeof(IMAGE_SECTION_HEADER )); /* Guardamos las secciones */ for(int i=0;i<NT_Header.FileHeader.NumberOfSections-1;i++) { fread(&SECTION_Header [i ], sizeof(IMAGE_SECTION_HEADER ), 1, Archivo ); } DWORD Tamanyo_RawData = 0x10; DWORD VirtualAddressEnd = SECTION_Header[NT_Header.FileHeader.NumberOfSections-2].VirtualAddress; /* Escribimos los datos de la nueva sección */ BYTE NombreSeccion[8] = ".mecra"; memcpy(SECTION_Header [NT_Header. FileHeader. NumberOfSections-1]. Name, NombreSeccion , 8); SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].SizeOfRawData = Tamanyo_RawData; SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].PointerToRawData = Tamanyo; SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].Characteristics = 0xE0000020; SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].VirtualAddress = VirtualAddressEnd+NT_Header.OptionalHeader.SectionAlignment; SECTION_Header[NT_Header.FileHeader.NumberOfSections-1].Misc.VirtualSize = Tamanyo_RawData; /* Incrementamos el SizeOfImage */ NT_Header.OptionalHeader.SizeOfImage += Tamanyo_RawData; /* Escribimos los datos en el archivo */ //Nos situamos al inicio de la NT Header fseek(Archivo , DOS_Header. e_lfanew, SEEK_SET ); //Escribimos la cabecera fwrite(&NT_Header , sizeof(IMAGE_NT_HEADERS ), 1, Archivo ); //Saltamos al Section Header fseek(Archivo , DOS_Header. e_lfanew + sizeof(IMAGE_NT_HEADERS ), SEEK_SET ); //Escribimos los datos y la cagamos porque nos cargamos lo que sigue al insertar la sección asi ^^ for(int i=0;i<NT_Header.FileHeader.NumberOfSections;i++) { fwrite(&SECTION_Header [i ], sizeof(IMAGE_SECTION_HEADER ), 1, Archivo ); } // .... // ....
Los que sepan del tema ya sabrán donde estoy fallando, y yo me hago una ligera idea
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
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
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 PIMAGE_DOS_HEADER; PIMAGE_NT_HEADERS; PIMAGE_SECTION_HEADER; En vez de utilizar estoIMAGE_DOS_HEADER; IMAGE_NT_HEADERS; IMAGE_SECTION_HEADER; Hay alguna diferencia? (Ventajas)
PIMAGE_DOS_HEADER sería un puntero a IMAGE_DOS_HEADER?
Y ya por último...
He visto en un crypter que he encontrado por internet esta rutina para descifrar una sección//Rutina encargada de descifrar la sección cifrada char uncryptroutine[] = //21 bytes "\xB8\x00\x10\x40\x00" //B8 00104000 MOV EAX, 401000 Section Start ||Este valor será modificado "\x80\x30\xBB" //8030 BB XOR BYTE[EAX], BB Key "\x40" //40 INC EAX "\x3D\x00\x45\x40\x00" //3D 00454000 CMP EAX, 404500 Section End ||Este valor será modificado "\x75\xF5" //75 F5 JNZ SHORT -11 (Complemento a dos de 11 = F5) "\xB8\x00\x20\x40\x00" //B8 00204000 MOV EAX, 402000 Pone en EAX el OEP || Este valor será modificado "\xFF\xE0"; //FFE0 JMP EAX Salta al OEP
Se supone que eso son instrucciones en ASM?
Saludos
|
|
|
13
|
Sistemas Operativos / GNU/Linux / [?] Saber Distribución por Comandos
|
en: 17 Junio 2014, 14:18 pm
|
Hola
Bueno pues como bien dice el título, lo único que quiero saber es como puedo saber en que distribución estoy, utilizando comandos
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):Versión: 0.2 "Luna" ( 32-bit ) Built on: Ubuntu 12.04 ( "Precise" ) En Ubuntu 14.04: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..
Saludos
|
|
|
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.
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
https://github.com/libtor
Alguien sabe como puedo hacerlo? (Alguna librería que pueda utilizar)
Saludos
|
|
|
15
|
Programación / ASM / [?] ARM IDE
|
en: 12 Abril 2014, 11:08 am
|
Hola
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?
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
Dim objHttp As Object, strURL As String, strText As String strURL = "Mi web/" & "conectado.php" Set objHttp = CreateObject("MSXML2.ServerXMLHTTP") objHttp.Open "POST", strURL, False objHttp.setRequestHeader "User-Agent", "Mozilla/5.0" objHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" objHttp.Send ("Te he enviado un mensaje") strText = objHttp.ResponseText
Y lo que tengo hecho en Java hasta el momento es estopublic static void sendPost () throws Exception { String url = "Mi web/" & "conectado.php"; HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("User-Agent", "Mozilla/5.0"); con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); }
(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
Saludos
|
|
|
18
|
Programación / Programación Visual Basic / [?] Saber si eres Administrador vb6
|
en: 20 Febrero 2014, 12:08 pm
|
Buenas!
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)Option Explicit ' constantes '''''''''''''''''''''''''''''' 'Constantes para usar con OpenSCManager Private Const GENERIC_READ = &H80000000 Private Const GENERIC_WRITE = &H40000000 Private Const GENERIC_EXECUTE = &H20000000 ' declaraciones Api '''''''''''''''''''''''''''''' 'Función Api OpenSCManager Private Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" ( _ ByVal lpMachineName As String, _ ByVal lpDatabaseName As String, _ ByVal dwDesiredAccess As Long) As Long 'Función Api CloseServiceHandle Private Declare Function CloseServiceHandle Lib "advapi32.dll" ( _ ByVal hSCObject As Long) As Long Private Sub Form_Load() Dim Admin As Long Admin = OpenSCManager(vbNullString, _ vbNullString, _ GENERIC_READ Or GENERIC_WRITE Or GENERIC_EXECUTE) 'Si la función retorna 0 no es Administrador If Admin = 0 Then MsgBox "No es un Administrador", vbInformation Else CloseServiceHandle Admin MsgBox "Es un administrador", vbInformation End If End Sub
Option Explicit 'Función Api IsNTAdmin Private Declare Function IsNTAdmin Lib "advpack.dll" ( _ ByVal dwReserved As Long, _ ByRef lpdwReserved As Long) As Long Private Sub Form_Load() MsgBox "Administrador de este equipo: ? " & _ CBool(IsNTAdmin(ByVal 0&, ByVal 0&)), vbInformation 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
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
#include <stdio.h> #define MAX 4 #define TONUM 48 int main() { char Cadena[MAX]; int Numero[MAX]; printf("Introduce un numero de 4 digitos: "); fgets(Cadena, MAX, stdin); getchar(); // Ahora convertimos la cadena a numerico for(int i=0;i<MAX;i++) { Numero[i] = Cadena[i] - TONUM; printf("%d", Numero[i]); } return 0; }
No se donde puedes estar el error, porque seguro que es muy tonto
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 )
|
|
|
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 #!/bin/bash HOST="Aqui la IP" USER="Aqui el Usuario" PASS="Aqui la Contraseña del Usuario" CMD=$@ VAR=$(expect -c " spawn ssh -o StrictHostKeyChecking=no $USER@$HOST sudo $CMD match_max 100000 expect \"*?assword:*\" send -- \"$PASS\r\" send -- \"\r\" send -- \"$PASS\r\" send -- \"\r\" expect eof ") echo "===============" echo "$VAR"
La salida que da es:?@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...
PD: Para que funcione tenemos que tener expect instalado apt-get install expect Saludos
|
|
|
|
|
|
|