Cita de: Homarih en 22 Mayo 2016, 21:31 PM
Me a tocado bailar con la coja...
Gracias a todos
Saludos
Comienza con algo básico luego con el tiempo lo podrás volver a intentar, saludos y nunca te rindas
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úCita de: Homarih en 22 Mayo 2016, 21:31 PM
Me a tocado bailar con la coja...
Gracias a todos
Saludos
Cita de: Homarih en 22 Mayo 2016, 12:40 PM
Gracias por el consejo,sigo empollando ...
Después de un buen repaso a todos los métodos para encontrar la OEP y cacharreando con Olly esta vez con la versión v 2.01 , fui tracendo con shif f9 y encontré esto en el log.
Themida es un packers no es así? Al pasar RDG me salia lo que os puse y con el PEID no me sale nada .
Le echare un ojo a esto (1532-Desempacando Themida (tuto 33) 2013 by Ivinson )a ver si me ayuda
Saludos
Cita de: WHK en 13 Mayo 2016, 02:34 AM
Hola, probablemente sea su router, cuando el proveedor de internet pone el router estos vienen bloqueados por defecto para que no salga ninguna ip hacia afuera, lo que debes hacer es revisar el router y dejar que ese pc pueda salir con el puerto 21.
saludos.
Cita de: class_OpenGL en 4 Mayo 2016, 20:23 PM
Es cierto. Se me olvidó mencionarlo. La basura se crearía cuando hay saltos de línea en archivos de texto, pues Windows usa salto de carro y salto de línea, mientras que otros sistemas operativos usan solo el salto de línea
Cita de: AlbertoBSD en 4 Mayo 2016, 19:08 PM
A ver implemente una forma de reescribir todo el archivo, me tome de la liberar de cambiar algunas cosas..#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include<sys/stat.h>
char **resultados;
char **lines;
char *nueva_linea;
int *map;
int count = 0;
char** str_split(char* a_str, const char a_delim){
char** result = 0;
size_t count = 0;
char* tmp = a_str;
char* last_comma = 0;
char delim[2];
delim[0] = a_delim;
delim[1] = 0;
while (*tmp)
{
if (a_delim == *tmp)
{
count++;
last_comma = tmp;
}
tmp++;
}
count += last_comma < (a_str + strlen(a_str) - 1);
count++;
result = malloc(sizeof(char*) * count);
if (result)
{
size_t idx = 0;
char* token = strtok(a_str, delim);
while (token)
{
assert(idx < count);
*(result + idx++) = strdup(token);
token = strtok(0, delim);
}
assert(idx == count - 1);
*(result + idx) = 0;
}
return result;
}
off_t fsize(char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
return -1;
}
void mostrarProducto(){
int i;
printf("%i coincidencias encontradas...\n\n", count);
for(i = 0; i < count; i++){
printf("%i) %s\n", i+1, resultados[i]);
}
printf("Por favor, seleccione una opcion: ");
}
void seleccionarProducto(){
int nuevo_stock,opcion;
char** resultado_split;
scanf("%i", &opcion);
printf("%s", resultados[opcion-1]);
resultado_split = str_split(resultados[opcion-1], '*');
printf("\nEl stock actual del producto es: %s\nPor favor introduzca el nuevo stock:",resultado_split[1]);
scanf("%i", &nuevo_stock);
nueva_linea = calloc(20+strlen(resultado_split[0]),1);
sprintf(nueva_linea,"%s*%i",resultado_split[0],nuevo_stock);
free(resultado_split[2]);
free(resultado_split[1]);
free(resultado_split);
printf("%s", nueva_linea); // ACAA!! nueva_linea es la que debe reemplazar a
free(lines[map[opcion-1]]);
lines[map[opcion-1]] = nueva_linea;
}
void buscarProducto(char * codProducto){
FILE * fp;
char *file_buff;
size_t len = 0;
int i = 0, j = 0;
len = fsize("bd");
file_buff = calloc(len+1,sizeof(char));
fp = fopen("bd", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
fread(file_buff,sizeof(char),len,fp);
fclose(fp);
lines = str_split(file_buff,'\n');
memset(file_buff,0,len);
free(file_buff);
while(lines[i] != NULL) {
printf("Examinando linea %i: %s\n",i,lines[i]);
if(strstr(lines[i],codProducto) != NULL) {
printf("Coinciendia %s encontrada en linea %i, copiando apuntador a resultado %i\n",codProducto,i,count);
resultados = realloc(resultados,sizeof(char*)*count+1);
map = realloc(map,sizeof(int)*count+1);
resultados[count] = lines[i];
map[count] = i;
count++;
}
i++;
}
if(count != 0){
mostrarProducto(count);
seleccionarProducto();
}else{
printf("No se ha encontrado el producto!");
}
j = 0;
fp = fopen("bd","w");
while(j < i) {
fprintf(fp,"%s\n",lines[j]);
free(lines[j]);
j++;
}
fclose(fp);
exit(EXIT_SUCCESS);
}
int main(){
buscarProducto("h65t");
exit(EXIT_SUCCESS);
}
Falla al momento de reescribir el campo seleccionado, todavía estoy depurando...
Cita de: class_OpenGL en 4 Mayo 2016, 18:39 PM
Creo que si el archivo es demasiado grande para la RAM, se podría hacer esto:
* Obtenemos la cadena del archivo desde la posición que quieras con longitud de la nueva cadena con, por ejemplo, fread.
* Reemplazamos desde la posición deseada con la cadena con, por ejemplo, fwrite.
* Obtenemos la siguiente cadena desde la posición original con un desplazamiento (offset) de la longitud de la cadena que has reemplazado antes. Es fácil pues la función seek permite poner desplazamientos.
* Reemplazamos la cadena que acabamos de leer con la cadena que obtuvimos antes del archivo con, por ejemplo, fread
* Hacemos esto hasta que hayamos llegado al final del archivo
Cita de: AlbertoBSD en 4 Mayo 2016, 18:05 PM
Una vez que encuentras tu y editas en memoria lo mas rápido seria volver a escribir todo el archivo, no es lo mas eficiente, si lo que vas a escribir tiene el mismo tamaño que el anterior podrías colocarte en la posición adecuada mediante seek y escribir con fprintf o fwrite segun creas conveniente.
Ahorita te ayudo con la funcion que lo haga.
Citarabcd*1\n
efgh*12\n
Citarabcd*30n
efgh*12\n
e97fxosm1h65taazis3p7mktirczgnciie3zk94cwyhwytdsnh*81
aac3liukb2nk4czkgyw90xfmyc6x*96
3b0ziwq1tsgozcrac85o*31
lbn2i7bpvsw6zr6zp75yxfzbpn3nukx8z9en545*1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char resultados[200][300];
char nueva_linea[300];
int opcion;
// fuente: http://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c
char** str_split(char* a_str, const char a_delim){
char** result = 0;
size_t count = 0;
char* tmp = a_str;
char* last_comma = 0;
char delim[2];
delim[0] = a_delim;
delim[1] = 0;
/* Count how many elements will be extracted. */
while (*tmp)
{
if (a_delim == *tmp)
{
count++;
last_comma = tmp;
}
tmp++;
}
/* Add space for trailing token. */
count += last_comma < (a_str + strlen(a_str) - 1);
/* Add space for terminating null string so caller
knows where the list of returned strings ends. */
count++;
result = malloc(sizeof(char*) * count);
if (result)
{
size_t idx = 0;
char* token = strtok(a_str, delim);
while (token)
{
assert(idx < count);
*(result + idx++) = strdup(token);
token = strtok(0, delim);
}
assert(idx == count - 1);
*(result + idx) = 0;
}
return result;
}
void seleccionarProducto(){
int nuevo_stock;
char nuevo_stock_char[3];
char** resultado_split;
scanf("%i", &opcion);
printf("%s", resultados[opcion-1]);
resultado_split = str_split(resultados[opcion-1], '*');
printf("\nEl stock actual del producto es: %sPor favor introduzca el nuevo stock:", resultado_split[1]);
scanf("%i", &nuevo_stock);
sprintf(nuevo_stock_char, "%d", nuevo_stock); // transforma el nuevo_stock (int) a nuevo_stock_char (char)
strcpy(nueva_linea, resultado_split[0]);
strcat(nueva_linea, "*");
strcat(nueva_linea, nuevo_stock_char);
free(resultado_split); // libera memoria, pues ya no es necesario split.
printf("%s", nueva_linea); // ACAA!! nueva_linea es la que debe reemplazar a resultados[opcion-1] dentro de BD
}
void mostrarProducto(int count){
int i;
printf("%i coincidencias encontradas...\n\n", count);
for(i = 0; i < count; i++){
printf("%i) %s\n", i+1, resultados[i]);
}
printf("Por favor, seleccione una opcion: ");
}
void buscarProducto(char * codProducto){
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
int count = 0;
fp = fopen("bd", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
while((read = getline(&line, &len, fp)) != -1){
if(strstr(line, codProducto) != NULL){
strcpy(resultados[count], line);
count++;
if(count > 199) // evita overflow
break;
}
}
if(count != 0){
mostrarProducto(count);
seleccionarProducto();
}else{
printf("No se ha encontrado el producto!");
}
fclose(fp);
if(line)
free(line);
//if(count != 0){
// printf("ahora edito");
//}
exit(EXIT_SUCCESS);
}
int main(){
buscarProducto("atud");
exit(EXIT_SUCCESS);
}