|
61
|
Programación / Programación C/C++ / [Solucionado] Parametros desde consola
|
en: 2 Enero 2015, 04:07 am
|
#include <stdio.h> #include <stdlib.h> int main() { char clave[6]; printf("Escriba su clave: "); scanf("%s",clave); if(strcmp(clave,"passbasico")==0) { system("echo sencillo a ejecutar"); printf("\n"); } else { printf("Clave no valida"); } return 0; }
Hola soy nuevo en C y quisiera hacer algo así pero que en vez de que sea desde el mismo programa se pueda poner un parámetro externo "-pass passbasico" desde una consola por ejemplo.
|
|
|
62
|
Programación / Programación C/C++ / Re: Codigo de fuente del GTA SA ¿Sera verdad?
|
en: 2 Enero 2015, 02:39 am
|
if ( !v7ed2d0(stream, 16, 0, 0) ) return 0; if ( v2 ) { CCollisionPlugin__SetModelInfo(&v12->__parent.__parent); CVehicleModelInfo__UseCommonVehicleTexDicationary(); } v11 = RpClumpStreamRead(stream); if ( v2 ) { CCollisionPlugin__SetModelInfo(0); restoreTextureFindCallback(); } if ( !v11 ) return 0; ((void (__thiscall *)(CVehicleModelInfo *, RpClump *))v12->__parent.__parent.__vmt[1]._m04)(v12, v11); if ( v3 == 508 ) v12->ucDoorCount = 2; return 1;
Desde cuándo existen los thiscalls en C++? Esto no es más que un dump de Hex-Rays Pero sirve eso?
|
|
|
64
|
Programación / Programación C/C++ / Re: Pasar de c++ a ensamblador
|
en: 31 Diciembre 2014, 22:35 pm
|
Buenas me encuentro con un proyecto que he realizado varios programas en c++ y estoy tratando de pasarlos a ensamblador. Utilizo netbeans para realizar el proyecto. Alguno sabe de algun programa o forma de poder pasarlos a ensamblador? He tratado de utilizar Debbuger pero o no encuentro programas, no se utilizarlos o salen cosas que no son ensamblador... Gracias y Feliz Año Nuevo
En C# tambien se puede https://www.youtube.com/watch?v=9SVjO5rMieMuna especie de ensamblador
|
|
|
66
|
Programación / Programación C/C++ / Re: [Ayuda] variable dentro de char
|
en: 24 Diciembre 2014, 21:20 pm
|
De modo urgente me tengo que poner a leer algo de C/C++, muy agradecido siempre con este foro y con todos los que me ayudan, de todas formas nunca pude setear el pass de forma "automatica". PD: Felices Fiestas! Comparto código resuelto: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int main() { FILE *fp; char filename[30]; //filename for source code // starting header of outputted file char header[300] = "/*\nBatch DOS command To C source Converter\nBy sam207 (samar_acharya[at]hotmail.com)\nhttp://www.sampctricks.blogspot.com\nhttp://nepali.netau.net\n*/\n"; //all the includes in output file char incs[200] = "#include <stdio.h>\n#include <conio.h>\n#include <stdlib.h>\n#include <windows.h>\nint WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,\nPSTR szCmdLine, int iCmdShow)\n{\n"; //end part of output file char end[50] = "\treturn 0;\n}"; //for command char cmd[150]; //para el resto, la clave char cmb[350]; printf("\t+----------------------------+\n"); printf("\t|BATCH TO C SOURCE CONVERTER |\n"); printf("\t|CODED BY SAMARDHWOJ ACHARYA |\n"); printf("\t+----------------------------+\n"); printf("\nEnter the filename(with .c extension): "); scanf("%s",filename); printf("\nContraseña: "); scanf("%s",cmb); fp = fopen(filename,"w"); if (fp==NULL) { printf("Some error occurred while opening file"); getch(); exit(1); } else { fprintf(fp,"%s%s",header,incs); fprintf(fp,"char clave[6];\n"); fprintf(fp,"printf(\"escriba su clave: \");\n"); fprintf(fp,"scanf(\"%%s\",clave);\n"); fprintf(fp,"if(strcmp(clave,\"%s\")==0)\n",cmb); fprintf(fp,"{\n"); printf("\nNow start entering DOS commands: \n"); printf("When finished, type 'end' for the end of commands\n"); printf("\nStart:\n\n"); gets(cmd); while (1) { gets(cmd); if (!strcmp(cmd,"end")) { break; //if end is typed, get out of loop } fprintf(fp,"\tsystem(\"%s\");\n",cmd); } fprintf(fp,"\tprintf(\"\\n\");\n"); fprintf(fp,"\t}\nelse\n{\n"); fprintf(fp,"\tprintf(\"Clave no valida\");\n}\n"); fprintf(fp,"\n%s",end); printf("\n\nFile successfully created"); printf("\nNow compile it with any C compiler"); printf("\nThanks for using this little app"); fclose(fp); } getch(); }
|
|
|
67
|
Programación / Programación C/C++ / Re: [Ayuda] variable dentro de char
|
en: 24 Diciembre 2014, 20:12 pm
|
Así: fprintf(fp,"\tchar *pass = \"%s\";\n", cmb); /* <-- observa el argumento %s */ fprintf(fp,"\tprintf(\"dame la clave: \");\n"); /* <-- no necesitas el argumento cmb */ fprintf(fp,"\tscanf(\"%%s\", pass);\n"); /* no es &pass, sino simplemente pass */ fprintf(fp, "\twhile ( getchar() != '\\n' );\n" ); /* <-- limpias búfer después de scanf() */ fprintf(fp,"\tif( strcmp( pass, \"%s\") ) exit(1); \n\n", cmb); /* si el pass no es igual a cmb, salir */
Hay un detalle con scanf(). Esta función requiere un argumento de tipo apuntador al tipo de dato declarado con %d, %s, etc. Si lees un entero, debes pasarle un apuntador a entero, por eso pones el "&". Pero en C las cadenas son técnicamente apuntadores a variables tipo char (el tema de apuntadores en C es delicado, y es algo que debes leer a profundidad cuando tengas tiempo), por eso no requieren "&". Se escribe: scanf(\"%s\", pass);
con "pass" y no "&pass". Por otra parte, el pass es de tipo cadena, lo correcto es declarar como "char *". Luego, a la hora de comparar el pass con el cmb se usa la función strcmp() que devuelve cero si las cadenas son IGUALES, y distinto de cero si son DIFERENTES. Aquí te mando el programa completo con las correcciones: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int main() { FILE *fp; char filename[31]; //filename for source code char creador[51]; /* <-- cadena para contener el nombre del creador */ char *cPtr; size_t i; // starting header of outputted file char header[300]; //all the includes in output file char incs[200] = "#include <stdio.h>\n#include <conio.h>\n#include <stdlib.h>\n#include <windows.h>\nint WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,\nPSTR szCmdLine, int iCmdShow)\n{\n\n"; //end part of output file char end[50] = "\treturn 0;\n}"; //for command char cmd[150]; //para el resto, la clave char cmb[350] = "abc566h7Tgfr"; printf("\t+----------------------------+\n"); printf("\t|BATCH TO C SOURCE CONVERTER |\n"); printf("\t|CODED BY SAMARDHWOJ ACHARYA |\n"); printf("\t+----------------------------+\n"); printf("Introduce el nombre del creador: "); scanf("%s", creador); while ( getchar() != '\n' ) /* limpia el caracter ENTER de la entrada estandar */ ; sprintf( header, "\nCodigo creado por %s\n", creador); /* <-- revisa aqui */ printf("\nEnter the filename(with .c extension): "); scanf("%s",filename); while ( getchar() != '\n' ) /* limpia el caracter ENTER de la entrada estandar */ ; fp = fopen(filename,"w"); if (fp==NULL) { printf("Some error occurred while opening file"); getchar(); exit(1); } else { fprintf(fp,"%s%s",header,incs); fprintf(fp,"\tchar *pass = \"%s\";\n", cmb); /* <-- observa el argumento %s */ fprintf(fp,"\tprintf(\"dame la clave: \");\n"); /* <-- no necesitas el argumento cmb */ fprintf(fp,"\tscanf(\"%%s\", pass);\n"); /* no es &pass, sino simplemente pass */ fprintf(fp, "\twhile ( getchar() != '\\n' );\n" ); /* <-- limpias búfer después de scanf() */ fprintf(fp,"\tif( strcmp( pass, \"%s\") ) exit(1); \n\n", cmb); /* si el pass no es igual a cmb, salir */ printf("\nNow start entering DOS commands: \n"); printf("When finished, type 'end' for the end of commands\n"); printf("\nStart:\n\n"); fgets( cmd, 150, stdin ); if ( ( cPtr = strchr( cmd, '\n' ) ) != NULL ) *cPtr = '\0'; while ( strcmp( cmd, "end" ) ) { fprintf(fp,"\tsystem(\"%s\");\n",cmd); fgets( cmd, 150, stdin ); if ( ( cPtr = strchr( cmd, '\n' ) ) != NULL ) *cPtr = '\0'; } fprintf(fp,"\tprintf(\"\\n\");"); fprintf(fp,"\n%s",end); printf("\n\nFile successfully created"); printf("\nNow compile it with any C compiler"); printf("\nThanks for using this little app"); fclose(fp); } getchar(); }
Yo probé para generar un script con los comandos "dir" y "cd .." que se active con la contraseña abc566h7Tgfr. He aquí uan vista de mi consola cuando estaba ejecutando el programa (en Linux) yoel@yoel-pc:~/Documentos/C/test$ ./test +----------------------------+ |BATCH TO C SOURCE CONVERTER | |CODED BY SAMARDHWOJ ACHARYA | +----------------------------+ Introduce el nombre del creador: yoel
Enter the filename(with .c extension): script.c
Now start entering DOS commands: When finished, type 'end' for the end of commands
Start:
dir cd.. end
File successfully created Now compile it with any C compiler Thanks for using this little app
y ve el fichero script.c que me generó: Codigo creado por yoel #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
char *pass = "abc566h7Tgfr"; printf("dame la clave: "); scanf("%s", pass); while ( getchar() != '\n' ); if( strcmp( pass, "abc566h7Tgfr") ) exit(1);
system("dir "); system("cd.."); printf("\n"); return 0; }
Si compilaras este source (para Windows), te daría un ejecutable que te pide contraseña y luego de validar ejecutaría en consola los comandos dir y cd ... Era ese el resultado que querías lograr ? Jajaja en realidad estaba haciendo unas herramientas para el repack, es mas que nada que para ocultar los procesos y que no tan explicito, le pongo algo que diga espere bien trucho y ya esta, también tenia pensado mas adelante algo que traduzca el código completo o parcial pero no hice esto ¿esperas q haga el resto? ¿me tenes fe jajaj? ahora voy a ver si le mando un "multiplataforma".
|
|
|
68
|
Programación / Programación C/C++ / Re: [Ayuda] variable dentro de char
|
en: 24 Diciembre 2014, 19:15 pm
|
************* CONTINUANDO EL TEMA ***************** Hay otros detalle dignos de mencionar. Si realmente te apasiona aprender programación C, sigue leyendo, de lo contrario no lo hagas porque te voy a aburrir Observa que modifiqué ligeramente la estrcutura de control del while() por una forma más práctica: while ( strcmp( cmd, "end" ) ) { fprintf(fp,"\tsystem(\"%s\");\n",cmd); gets(cmd ); printf( "cmd is: %s\n", cmd ); }
así, en vez de poner while(1), y luego poner una condición de parada con break dentro del bucle, pusimos la condición de parada como condición de ejecución del propio while, que es por cierto donde debe ir. Los puristas de la programación estructurada aconsejan recurrir lo menos posible a sentencias como break o continue, a menos que a cambio vayas a aobtener una sustancial mejora del rendimiento, que no es el caso. A propósito de gets(). Esta función se considera potencialmente peligrosa porque corre el riesgo de sobrepasar la longitud del array donde estás almacenando los caracteres leídos. Es mejor usar getline() de C++, o la misma fgets() de C. Esta última permite especificar la longitud máxima del arreglo leído. Ejemplo, si la longitud de cmd es 150 (lo cual significa que al descontar el nulo de terminación habrá espacio para 149 caracteres), entonces puedes usar fgets( cmd, 150, stdin );
con lo cual serán leídos no más de 149 caracteres de la entrada estándar (teclado). El problema con fgets() es que esta función sí pasa el ENTER al final de la cadena, lo que puede generar un efecto indeseado. Para eliminarlo puedes usar algo como: size_t i; fgets( cmd, 150, stdin ); for ( i = 0; cmd[i] != '\0'; i++ ) if ( cmd[i] == '\n' ) cmd[i] = '\0';
(el " size_t i" va una sola vez en el apartado de declaración de variables del main()). Otra manera sería char *cPtr; fgets( cmd, 150, stdin ); if ( ( cPtr = strchr( cmd, '\n' ) ) != NULL ) *cPtr = '\0';
que reemplaza la primera ocurrencia del carácter '\n' en cmd por el nulo de terminación '\0'. Muchas gracias, te agradezco.
|
|
|
69
|
Programación / Programación C/C++ / Re: [Ayuda] variable dentro de char
|
en: 24 Diciembre 2014, 18:51 pm
|
Yo habia hecho esto , basicamente oculta la consola y pide contraseña, estaba haciéndolo, esta a medias, ahora el resto no es lo que importa, simplemente ahora el problema es que no puedo escribir %s, %d, etc lo que sea en el fprintf porque sale la clave escrita y no el %s o %d: /********************************************* * Batch DOS To C Source Code Converter v.1.1 * * Coded by Samar Dhwoj Acharya aka $yph3r$am * * Website => http://sampctricks.blogspot.com * * E-mail meh at samar_acharya[at]hotmail.com * * Contact meh at +9779841150346 (NTC mobile) * * I know to code: PHP, PERL, C, JAVA, PYTHON, ASM * *********************************************/ /* Some Notes: -The program was created in real hurry in between end term exams -So the program lacks all buffer overflow protections and optimization form -The code can be modified but please don't change the credits for the file -If you come up with better idea of implementing it in C, please contact me -If you feel program is complete crap, do comment me personally or here -If you loved my coding, I feel really glad for that. -If you need to understand the coding(in fact, its just easy), contact me.. - Visit my site http://www.sampctricks.blogspot.com and my group site http://www.nepsecvulns.blogspot.com */ //include header files... #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int main() { FILE *fp; char filename[30]; //filename for source code // starting header of outputted file char header[300] = "/*\nBatch DOS command To C source Converter\nBy sam207 (samar_acharya[at]hotmail.com)\nhttp://www.sampctricks.blogspot.com\nhttp://nepali.netau.net\n*/\n"; //all the includes in output file char incs[200] = "#include <stdio.h>\n#include <conio.h>\n#include <stdlib.h>\n#include <windows.h>\nint WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,\nPSTR szCmdLine, int iCmdShow)\n{\n"; //end part of output file char end[50] = "\treturn 0;\n}"; //for command char cmd[150]; //para el resto, la clave char cmb[350]; printf("\t+----------------------------+\n"); printf("\t|BATCH TO C SOURCE CONVERTER |\n"); printf("\t|CODED BY SAMARDHWOJ ACHARYA |\n"); printf("\t+----------------------------+\n"); printf("\nEnter the filename(with .c extension): "); scanf("%s",filename); printf("\nContraseña: "); scanf("%s",cmb); fp = fopen(filename,"w"); if (fp==NULL) { printf("Some error occurred while opening file"); getch(); exit(1); } else { fprintf(fp,"%s%s",header,incs); fprintf(fp,"int pass;\n",cmb); fprintf(fp,"printf(\"dame la clave: \");\n",cmb); fprintf(fp,"scanf(\"%s\" ,&pass);\n",cmb); fprintf(fp,"if( pass== %s ){\n",cmb); printf("\nNow start entering DOS commands: \n"); printf("When finished, type 'end' for the end of commands\n"); printf("\nStart:\n\n"); gets(cmd); while (1) { gets(cmd); if (!strcmp(cmd,"end")) { break; //if end is typed, get out of loop } fprintf(fp,"\tsystem(\"%s\");\n",cmd); } fprintf(fp,"\tprintf(\"\\n\");\n"); fprintf(fp,"\t}else\n"); fprintf(fp,"\tprintf(\"Clave no valida\");"); fprintf(fp,"\n%s",end); printf("\n\nFile successfully created"); printf("\nNow compile it with any C compiler"); printf("\nThanks for using this little app"); fclose(fp); } getch(); }
Ejemplo del código resultante. /* Batch DOS command To C source Converter By sam207 (samar_acharya[at]hotmail.com) http://www.sampctricks.blogspot.com http://nepali.netau.net */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { int pass; printf("dame la clave: "); scanf("1234" ,&pass); if( pass== 1234 ){ system("echo hola"); printf("\n"); }else printf("Clave no valida"); return 0; } el error esta en que da: cuando tiene que dar:
|
|
|
|
|
|
|