|
112
|
Programación / Programación C/C++ / [C] Funcion Split
|
en: 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++) { } 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'; } return retorno; }
Sa1uDoS EDITO: Ahora se libera la memoria reservada con malloc.
|
|
|
115
|
Programación / Programación C/C++ / Re: Es posible hacer esto sin arreglos?
|
en: 23 Marzo 2013, 12:48 pm
|
Si he entendido bien el problema no es que no pueda hacerlo con arrays, es que aun no los han dado.
Como que no es posible sin arrays? No es eficiente ni limpio, pero posible es. #include <stdio.h> int main() { int num; char num0=0, num1=0, num2=0, num3=0, num4=0, num5=0, num6=0, num7=0, num8=0, num9=0, i; puts("Introduce 10 numeros\n"); for(i=0;i<10;i++) { switch(num) { case 0: num0++; break; case 1: num1++; break; case 2: num2++; break; case 3: num3++; break; case 4: num4++; break; case 5: num5++; break; case 6: num6++; break; case 7: num7++; break; case 8: num8++; break; case 9: num9++; break; } } if(num0>0) { printf("El 0 se repite %i veces\n", num0 ); } if(num1>0) { printf("El 1 se repite %i veces\n", num1 ); } if(num2>0) { printf("El 2 se repite %i veces\n", num2 ); } if(num3>0) { printf("El 3 se repite %i veces\n", num3 ); } if(num4>0) { printf("El 4 se repite %i veces\n", num4 ); } if(num5>0) { printf("El 5 se repite %i veces\n", num5 ); } if(num6>0) { printf("El 6 se repite %i veces\n", num6 ); } if(num7>0) { printf("El 7 se repite %i veces\n", num7 ); } if(num8>0) { printf("El 8 se repite %i veces\n", num8 ); } if(num9>0) { printf("El 9 se repite %i veces\n", num9 ); } return 0; }
Otro modo mas eficiente seria algo como: #include <stdio.h> #include <string.h> int main() { int num, i; char repes[10]; puts("Introduce 10 numeros\n"); for(i=0;i<10;i++) { repes[num]++; } for(i=0;i<10;i++) { if(repes[i]>0) { printf("Numero %i repetido %i veces\n", i , repes [i ]); } } return 0; }
Aunque pueda mejorarse . Sa1uDoS
|
|
|
116
|
Programación / Ingeniería Inversa / Re: [Keygenme] Aspid
|
en: 21 Marzo 2013, 16:40 pm
|
Bueno, como nadie mas se anima posteo el codigo. Tuve que retocar la PE Section y cifrar la funcion felicita(). Para compilar fasm funcion.asm gcc crackme.c funcion.obj -o crackme.exe
format coff public _asm_comp _asm_comp: push ebp mov ebp, esp xor eax, eax ;Limpiamos los registros xor ecx, ecx mov ebx, dword[esp+8] ;Movemos a ebx la direccion de felicita mov ebx, dword[ebx] mov edx, dword[esp+12] ;Movemos a edx la pass bucle: xor dword[edx+ecx], ebx ;desciframos felicita add ecx, 4 ;Sumamos al contador un DWORD cmp ecx, 0x18 ;Comparamos el contador con 24 jne bucle ;Si no es igual salta a bucle cmp word[edx+5], 0xC718 ;Comparamos la firma (edx+5) para ver si la clave fue correcta je exit ;Si es igual salimos (eax=0) inc eax ;Incrementamos eax exit: leave ret
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int comp(char *cadena); void felicita(); int asm_comp(void *buff, void *func); int main() { unsigned int ID =rand()%(9999-1000)+1000, i ; char buffer[100]; unsigned int pass; scanf("%8x%s", &pass , buffer ); if(comp(buffer)==1) { return 1; } for(i=2;i<strlen(buffer);i++) { ID-=buffer[0]+buffer[i]; } if(ID==0) { if(asm_comp(&pass, felicita)==0) { felicita(); return 0; } return 1; } return 1; } int comp(char *cadena) { int i; for(i=0;i<strlen(cadena);i++) { if(!((cadena[i]>='0' && cadena[i]<='9') || (cadena[i]>='A' && cadena[i]<='F'))) { return 1; } } return 0; } void felicita() { }
Gracias a los que participaron! Que les parecio? Muy simple? Sa1uDoS P.D.: Se me complico un poco la semana, siento no haberlo publicado el Domingo.
|
|
|
118
|
Programación / Ingeniería Inversa / Re: [Keygenme] Aspid
|
en: 14 Marzo 2013, 18:53 pm
|
Espero que os haya gustado!
MCKSys Argentina Para entrar a la funcion de registrar deberias hacer una shellcode inyectarla, descifrar esa sección y cambiar la RET_Addr por la Addr de la funcion. Por privado significa por Mensaje Privado . Sa1uDoS
|
|
|
119
|
Programación / Ingeniería Inversa / [Keygenme] Aspid
|
en: 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. CrackmeEspero que os guste y no lo reventeis en menos de 10 min jaja. Hall of Fame- MCKSys Argentina
- tincopasan
Sa1uDoS
|
|
|
120
|
Programación / Programación General / Re: Video Ejecutable
|
en: 24 Febrero 2013, 10:48 am
|
Si quieres algo sencillo, el autorun ejecuta el .exe. El .exe tiene una ventana en la que se reproduce el video, cuando pulses cualquier tecla se abre por X segundos una ventana para escribir una contraseña.
Te recomiendo hacerlo en Visual Basic o algun lenguaje de alto nivel para que no te compliques mucho.
Sa1uDoS
|
|
|
|
|
|
|