Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - mr.blood

#1
Necesito información para sacar el código de alguna aplicación en este tipo de sistemas operativos. Más concretamente para depurar un binario de un PCC B&R. Sé que el entorno de programación utiliza gcc y gdb para la depuración. Los objetos generados son .o pero no he encontrado ningún tipo de información sobre los binarios de estos PCC (.br) y con un editor hexadecimal, en principio no se parecen a nada que haya visto en sistemas operativos convencionales.

Por lo que he leido estos sistemas operativos suelen compartir el espacio de memoria de modo que un task podría leer información del resto. Si alguien sabe algo sobre esto también me sería de ayuda.

Cualquier información que sirva para iniciarme en el funcionamiento, la programación y la depuración de binarios en este tipo de sistemas (tanto el VxWorks como la implementación del fabricante) sería muy agradecida y de mucha ayuda.

Gracias de antemano.

Sa1uDoS

EDIT: Si a alguien más le interesa el proyecto podría facilitarle binarios y un software básico, a modo de crackme para pruebas.
#2
Ingeniería Inversa / [KeygenMe] Matrix
24 Marzo 2015, 18:46 PM
Aquí os dejo un KeygenMe, espero que os guste. Está programado en C++ no sé que nivel de dificultad decir que tiene, para crackearlo será nivel 0, pero el reto es hacer un keygen :).

https://mega.co.nz/#!CBdAyZhS!nhpX7Mji2TzPJSk3JAGlSttlsxQFX-h_kVnSLa1r9Ag

SaluDoS
#3
Ingeniería Inversa / [InyectMe] Edge
16 Junio 2013, 20:08 PM
Hoy les dejo un InyectMe muy sencillito, para que los nuevos practiquen un poco ;).

Deben cambiar el "Cambiame" del MessageBox por su nick, así de sencillo. Cuando lo consigan me envían un MP con una captura y les agrego al Hall Of Fame.

[Edge] InyectMe.rar (486 B)
https://mega.co.nz/#!HZ0hmRDK!QDgKJHCprddUBsNUEYVjQ1WM2JphG5A_V84Mqzf2SjU




Hall of Fame

  • Tincopasan
  • Flamer

Sa1uDoS
#4
Ingeniería Inversa / [Crackme] Ilustrados
17 Abril 2013, 20:27 PM
Aqui les dejo un nuevo Crackme.

Dificultad: [3/10] ?
Objetivo: Encontrar el serial. Es un serial fijo ;).

[CRACKME] Ilustrados.exe (27 KB)

Hall of Fame

  • MCKSysArgentina
  • Flamer

Sa1uDoS
#5
Programación C/C++ / [C] Funcion Split
28 Marzo 2013, 14:46 PM
Espero que a alguien le sirva. Yo no he visto fallos, si los encontrais, comentadlos por favor.

#include <stdio.h>
#include <malloc.h>
#include <string.h>

int len_palabra(char *cadena, int inicio, char separador);
char **split(char *cadena, char separador);

int main()
{
char cadena[]="MrBlood.split.crea.funcion";
int i;
char **retorno=split(cadena, '.');
for(i=0;retorno[i]!=NULL;i++)
{
printf("%s\n", retorno[i]);
free(retorno[i]);
}
free(retorno);
return 0;
}

int len_palabra(char *cadena, int inicio, char separador)
{
int len=0, i=inicio;
while(cadena[i]!=separador&&cadena[i]!='\0')
{
len++;
i++;
}
return len;
}

char **split(char *cadena, char separador)
{
int num_palabras=1, len_cadena=strlen(cadena), i, j=1, *inicios;
for(i=0;i<len_cadena;i++)
{
if(cadena[i]==separador)
{
num_palabras++;
}
}
inicios=malloc(sizeof(int)*num_palabras);
inicios[0]=0;
for(i=1;i<len_cadena;i++)
{
if(cadena[i]==separador)
{
inicios[j]=i+1;
j++;
}
}
char **retorno=malloc(sizeof(char *)*num_palabras+1);
retorno[num_palabras]=NULL;
for(i=0;i<num_palabras;i++)
{
j=len_palabra(cadena, inicios[i], separador);
retorno[i]=(char *)malloc(sizeof(char)*j);
strncpy(retorno[i], &cadena[inicios[i]], j);
retorno[i][j]='\0';
}
free(inicios);
return retorno;
}


Sa1uDoS

EDITO: Ahora se libera la memoria reservada con malloc.
#6
Ingeniería Inversa / [Keygenme] Aspid
13 Marzo 2013, 15:04 PM
Bueno, aqui les traigo un Keygenme nuevo.

Dificultad: [3/10] Me parece a mi...
Compilador: GCC
Objetivo: Hacer un Keygen.

Los Keygen por privado por favor.

Crackme

Espero que os guste y no lo reventeis en menos de 10 min jaja.




Hall of Fame

  • MCKSys Argentina
  • tincopasan
Sa1uDoS
#7
Ingeniería Inversa / [KEYGENME] Litrico v2
9 Febrero 2013, 02:19 AM
Bueno, digamos que he cambiado un poco el algoritmo y he complicado un poco mas que veais el codigo :P.

Como siempre, los experimentados lo tendran en 10 min, tal vez a los mas nuevos les cueste algo mas ;).

Dificultad: [3/10]
Objetivo: Hacer un pequeño Keygen en cualquier lenguaje (acepto diagramas tambien)
Lenguaje: FASM
Packer: No

Cualquiera puede animarse, como os digo esta hecho en FASM, y sin GUI por lo que el codigo es clarisimo.

[KEYGENME] Litrico v2

Sa1uDoS

P.D.: Con el overflow de la version anterior ya no se puede cambiar el mensaje.
#8
Ingeniería Inversa / [Keygenme] Litrico
27 Enero 2013, 19:24 PM
Otro crackme.

Dificultad: [3/10] (Espero que asi sea jaja)
Lenguaje: FASM
Objetivo: Hacer un Keygen
Packer: No

[Crackme] Litrico

Espero que les guste. Para los mas desconfiados se que aqui tengo pocos mensajes, pero soy un usuario de fiar en otras comunidades. mr.blood

Sa1uDoS
#9
Por si a alguien le ayuda. Es mejorable, no tiene ningun control de errores era solo para mostrar la idea ;).

No se si esto va en esta sección o en la de Programacion en C. Creo que esta mas relacionado con esto.

hookiat.c
#include "hookiat.h"

void HookIAT(char *tohooklibrary, char *tohookfunc, void *newfunc)
{
DWORD image_base=GetModuleHandleA(0);
PIMAGE_DOS_HEADER DOS;
PIMAGE_NT_HEADERS NT;
PIMAGE_IMPORT_DESCRIPTOR IT;
PIMAGE_IMPORT_BY_NAME *IMPORTED_FUNCTIONS;
PIMAGE_THUNK_DATA Funcion;
DWORD *IMPORTED_DLL_NAME;
DWORD *IMPORTED_FUNCTION_NAME;
unsigned int i=0;

DOS=(PIMAGE_DOS_HEADER)image_base;
NT=(PIMAGE_NT_HEADERS)(DOS->e_lfanew + image_base);
IT=(PIMAGE_IMPORT_DESCRIPTOR)(NT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + image_base);
IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);

while( (IT->Name) != 0 )
{
IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
if(!strcmp((char *)IMPORTED_DLL_NAME, tohooklibrary))
{
break;
}
IT++;
}

IMPORTED_FUNCTIONS=(PIMAGE_IMPORT_BY_NAME *)(IT->Characteristics + image_base);

for(i=0;;i++)
{
IMPORTED_FUNCTION_NAME=(DWORD *)((*IMPORTED_FUNCTIONS)->Name + image_base);
if(((*IMPORTED_FUNCTIONS)!=0) && (!strcmp((char *)IMPORTED_FUNCTION_NAME, tohookfunc)))
{
break;
}
IMPORTED_FUNCTIONS++;
}

Funcion=(PIMAGE_THUNK_DATA)(IT->FirstThunk + image_base);
Funcion+=i;
ORIGINAL_FUNCTION=(void *)Funcion->u1.Function;
Funcion->u1.Function=(DWORD)newfunc;
}


hookiat.h
#include <string.h>
#include <windows.h>

void *ORIGINAL_FUNCTION;

void HookIAT(char *tohooklibrary, char *tohookfunc, void *newfunc);


Sa1uDoS
#10
Pues traigo un programa que busca X funcion en X libreria en su propia Import Address Table. No hay mucha explicacion. Esta bastante chapucero solo queria que pudieran ver un codigo sencillo que haga esto ya que yo no encontre nada estos dias.

#include <string.h>
#include <stdio.h>
#include <windows.h>

int main()
{
        const char libreria[]="KERNEL32.dll";
        const char funcion[]="ExitProcess";
        DWORD image_base=(DWORD)GetModuleHandleA(0);
        PIMAGE_DOS_HEADER DOS;
        PIMAGE_NT_HEADERS NT;
        PIMAGE_IMPORT_DESCRIPTOR IT;
        PIMAGE_IMPORT_BY_NAME *IMPORTED_FUNCTIONS;
        PIMAGE_THUNK_DATA Funcion;
        DWORD *IMPORTED_DLL_NAME;
        DWORD *IMPORTED_FUNCTION_NAME;
        unsigned int i=0;
       
        DOS=(PIMAGE_DOS_HEADER)image_base;
        NT=(PIMAGE_NT_HEADERS)(DOS->e_lfanew + image_base);
        IT=(PIMAGE_IMPORT_DESCRIPTOR)(NT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + image_base);
        IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
       
        while( (IT->Name) != 0 )
        {
                IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
                if(!strcmp((char *)IMPORTED_DLL_NAME, libreria))
                {
                        printf("%s\n", (char *)IMPORTED_DLL_NAME);
                        break;
                }
                IT++;
        }
       
        IMPORTED_FUNCTIONS=(PIMAGE_IMPORT_BY_NAME *)(IT->Characteristics + image_base);
       
        for(i=0;;i++)
        {
                IMPORTED_FUNCTION_NAME=(DWORD *)((*IMPORTED_FUNCTIONS)->Name + image_base);
                if(((*IMPORTED_FUNCTIONS)!=0) && (!strcmp((char *)IMPORTED_FUNCTION_NAME, funcion)))
                {
                        printf("\t%s\n", (char *)IMPORTED_FUNCTION_NAME);
                        break;
                }
                IMPORTED_FUNCTIONS++;
        }
       
        Funcion=(PIMAGE_THUNK_DATA)(IT->FirstThunk + image_base);
        Funcion+=i;
        printf("\t\tDireccion funcion: %p \t Addr en IT: %p\n", *Funcion, Funcion);
        getchar();
        return 0;
}


Sa1uDoS
#11
Bueno, sin mas, aqui dejo el codigo, ya lo mejorare ;). Es bastante rapido. Si alguien no entiende lo que hace que se lea HTTP al descubierto

#include <stdio.h>
#include <winsock.h>

int main()
{
WSADATA wsa;
SOCKET sock;
char peticion[]="GET / HTTP/1.0\r\n\r\n";
char buffer[1024];
    struct sockaddr_in dir;
struct hostent *host;
WSAStartup( MAKEWORD(1,1), &wsa);
sock=socket( AF_INET, SOCK_STREAM, 0);
host=gethostbyname( "localhost");
dir.sin_addr=*((struct in_addr *)host->h_addr);
dir.sin_family=AF_INET;
dir.sin_port=htons(80);
if(connect( sock, (struct sockaddr *)&dir, sizeof(struct sockaddr))==-1)
{
                puts("No Conectado");
                return 1;
    }
    send( sock, peticion, strlen(peticion),0);
    recv( sock, buffer, 1023, 0);
    puts(buffer);
  closesocket( sock);

return 0;
}


Sa1uDoS
#12
Bueno, este codigo no funciona para todas las web's, creo que es porque no envio las cabeceras ;). Pero me costo desarrollarlo y me gustaria que les sirva, porque no vi casi nada de info en Python la verdad ;).

Sin mas, el codigo:
Código (python) [Seleccionar]
import socket

url=raw_input('Introduce la URL completa (ej. foro.portalhacker.net/index.php)')
array=url.split('/')
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((array[0],80))
sock.send("GET /"+array[1]+" HTTP/1.0\n\n")
code=sock.recv(10000)
print code
sock.close()


Sa1uDoS ;).




Posteo una mutacion de tipo comando, no es exactamente para esto, sino que puedes enviar la peticion del tipo que quieras ;)

Código (python) [Seleccionar]
import socket, sys

if len(sys.argv)!=4 or sys.argv[1]=="-h":
print '''\nAyuda del Script:\n\n
Ejemplo de uso: '''+sys.argv[0]+''' GET foro.portalhacker.net /index.php\n\n
Formato  '''+sys.argv[0]+''' [METODO] [HOST] [RUTA_DEL_ARCHIVO]'''
sys.exit()

metodo=sys.argv[1]
host=sys.argv[2]
archivo=sys.argv[3]

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host,80))

sock.send(metodo+" "+archivo+" HTTP/1.0\r\nHOST:"
+host+"\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13\r\n\r\n")
code=sock.recv(10000)

sock.close()
print "\n"+code


Sa1uDoS