Ir ao conteúdo
  • Cadastre-se

Anonymous Programmer

Membro Pleno
  • Posts

    68
  • Cadastrado em

  • Última visita

posts postados por Anonymous Programmer

  1. Sim sql injection é uma coisa basica, é necessario o extremo cuidado na hora da programação do projeto, Sql Injection é o primeiro passo  que os hackers vão tentar, se seu amigo conseguio com facilidade, outro vai conseguir da mesma forma e essa nova pessoa pode não ser bem intencionada.

  2. Se você utiliza Windows e quer utilizar a parte grafica de uma olhada nesse link

    http://zetcode.com/gui/winapi/window/

    È bem diferente de se programar em console, não é simplesmente digitar um printf("Hello World") que vai sair um texto na tela. tem todo um procedimento e local para desenhar os objetos, Procure conteudo referente a Windows GUI, Windows GUI API que você vai começar entender como funciona! ai vai um hello world pra você

    #include <windows.h>
      
      int WINAPI WinMain(HINSTANCE hInst,HINSTANCE vPrev,LPSTR cmdline,int Showcmd){
      	MessageBox(null,"Hello World","Meu programa com GUI",MB_OK);
      	return;
      }

    isso é  o basico é claro, não fiz nada alem de chamar uma MessageBox, que ja desenha a janela por ela mesma, compila o codigo ai, da uma estudada qualquer duvida manda ai!

    • Obrigado 1
  3. Cara faz o seguinte compila isso aqui em C

     

    #include <windows.h>
      
    int WINAPI WinMain(HINSTANCE hInst,HINSTANCE vPrev,LPSTR cmdline,int ShowCMD){
    	MessageBox(NULL,cmdline,"Parametros",NULL);
    }

    execute o arquivo compilado da seguinte forma:  de ao arquivo compilado o mesmo nome do .exe do jogo

     

    ISSO È IMPORTANTE!!!!!!

    voce so pode fazer isso depois que o launcher ja checou todos os arquivos, e esta pronto para executar o game ai voce  transfere o arquivo compilado para pasta do game com mesmo nome do .exe do game 
    dessa forma você vai poder visualizar os parametros que o launcher passa para o executavel do game, se for algo basico basta receptir os parametros do MessageBox no cmd ai é so criar um arquivo .bat inicializando o .exe do jogo com os parametros corretos!

    Lembrando que voce tem que adicionar o  ".\GAME.exe Parametros da janela de texto "

    • Curtir 1
  4. @isrnick o unico defeito que pode ta ocorrendo nesse codigo que enviei tanto para gravar tanto para comparar as contas, é o tamanho dos vetores de login e senha que no codigo de @Xaws esta diferente.

    tanto para quem grava tanto para quem lé a quantidade de bytes deve ser igual

     

    realmente os valores de fwrite estão invertidos, compilei e funcionou normalmente então nem reparei fui saber agora que você alertou! kkkk valeu

    • Curtir 1
  5. @Xaws

    Eu recomendo utilizar o compilador pura GCC e utiliza o notepad++ como IDE, DevC++ é mt bugado, agora o problema esta no seguinte sua struct no total tem 60bytes no total login[30] + senha[30] = 60bytes, portanto a struct dentro do arquivo tem que estar exatamente do mesmo tamanho nem 1byte a menos nem um byte a mais, de qual forma você esta gravando o login e senha dentro do arquivo ? olha o codigo que fiz na louca so pra adicionar os usuarios no arquido .db

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct usuarios_infos{
    	char usuario[100];
    	char senha[100];
    };
    
    void main(){
    	struct usuarios_infos contas;
    	FILE * wFile;
    	wFile = fopen("usuarios.db","ab");
    	if(wFile == NULL){
    		printf("[F] Falha em abrir o arquivo. \n");
    		return;	
    	}
    	memset(&contas,0,sizeof(struct usuarios_infos));
    	printf("**** Inserir novos usuarios **** \n");
    	printf("Usuario: ");
    	scanf("%s",contas.usuario);
    	printf("Senha: ");
    	scanf("%s",contas.senha);
    	int bytes = fwrite(&contas,1,sizeof(struct usuarios_infos),wFile);
    	if(bytes == 0){
    		printf("[F] Falha em escrever os dados. \n");
    		return;	
    	}else{
    		printf("[Ok] Usuario gravado com sucesso. \n");	
    		fclose(wFile);
    	}
    }

     

    pra gravar as contas tem que ser dessa forma. lembrando sempre que a struct gravada tem que ser igual a struct lida

    • Curtir 1
  6. @Xaws

    o malloc serve pra reservar espaço de memoria para posteriormente receber os dados de fread, deu falha porque você tentou reservar memoria para uma um ponteiro do tipo FILE *, lembre que quando você utiliza a função arquivo = fopen("usuarios.db","rb"); você não esta carregando o arquivo dentro do seu programa, a função so esta te retornando um ponteiro de arquivo para depois ser carregado os bytes se desejado
    ,

    portanto você deve trocar em seu codigo esse logs = malloc(); e altrar para lista_de_contas = malloc(arq_tamanho);

     

    a divisão é feita para saber qual  a quantidade de contas presentes dentro do arquivo, para o while ter um fim, Ex:

    Usuario[100]; ocupa 100 espaços de memoria

    Senha[100]; ocupa + 100 espaços de memoria,

     

    ou seja cada conta vai utilizar 200 bytes do arquivo, 200 bytes vai ser igual o tamanho da struct das contas, portanto supondo que tenhamos 5 contas dentro do arquivo seria 5x200 = 1000 bytes, de cara quando você carrega o arquivo é esse valor que ele retorna como tamanho, você não tem o total de contas no mole, tem que fazer essa continha de Ex: 1000 bytes / 200 bytes que é a mesma coisa que arq_tam = arq_tam / sizeof(struct usuarios_infos);

     

    o ponteiro_contas serve para indicar o memcmp qual pedaço do bloco de bytes você quer comparar, se é a primeira conta segunda conta .... isso limita o memcmp para não sair comparando tudo que ve pela frente, ele compara 200 bytes depois os proximos +200bytes que sera 400bytes, e assim vai ate chegar o total de contas

  7. @Xaws o codigo da forma que falei fica assim:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct usuarios_infos{
    char usuario[100];
    char senha[100];
    };
    void main(){
    	struct usuarios_infos contas_tmp,conta_definida;
    	char * lista_de_contas,usuario[20]="\0",senha[20]="\0";
    	int ponteiro_contas=0,total_de_contas=0,total_de_bytes=0;
    	printf("****** Systema de Login ****** \n");
    	printf("Usuario: ");
    	scanf("%s",usuario);
    	printf("Senha: ");
    	scanf("%s",senha);
    	// coloca nossos dados dentro de conta_definida
    	memset(&conta_definida,0,sizeof(struct usuarios_infos));
    	memcpy(&conta_definida.usuario,&usuario,strlen(usuario));
    	memcpy(&conta_definida.senha,&senha,strlen(senha));
    	// --------------------------------------------
    	FILE * file_contas;
    	file_contas = fopen("usuarios.db","rb");
    	if(file_contas == NULL){
    		printf("[F] Falha ao criar o arquivo de dados. \n");
    		return;
    	}else{
    		// codigo para pegar o tamanho do arquivo
    		fseek(file_contas,0,SEEK_END);
    		total_de_bytes = ftell(file_contas);
    		rewind(file_contas);
    			// cria um array no ponteiro lista_de_contas exatamente com tamanho do arquivo
    			lista_de_contas = malloc(total_de_bytes);
    			if(lista_de_contas == NULL){
    				printf("[F] Não foi possivel liberar espaço. \n");
    				return;
    			}
    			// ---------------------------------------------------------------------------
    		// --------------------------------------
    		printf("[Ok] Arquivo carregado bytes: %d \n",total_de_bytes);
    	}
    	// Carrega todas as contas dentro do arquivo
    	if(fread(lista_de_contas,1,total_de_bytes,file_contas) == 0){
    		printf("[F] Falha na leitura das contas. \n");
    		return;
    	}else{
    		total_de_contas = total_de_bytes / sizeof(struct usuarios_infos);
    		printf("[Ok] Todas as %d contas foram carregadas. \n",total_de_contas);
    	}
    	// -----------------------------------------
    	// Compara a conta inserida no programa com todas presentes dentro do arquivo usuarios.db
    	while(1){
    		memset(&contas_tmp,0,sizeof(struct usuarios_infos));
    		memcpy(&contas_tmp,&lista_de_contas[ponteiro_contas],sizeof(struct usuarios_infos));
    		if(memcmp(&conta_definida,&contas_tmp,sizeof(struct usuarios_infos))==0){
    			// coloque uma função abaixo caso usuario longado
    			printf("Bem - Vindo: %s \n",contas_tmp.usuario);
    			// ---------------------------------------------
    			break;
    		}else{
    			//printf("Conta %d \nUsuario:%s\nSenha:%s \n",ponteiro_contas/sizeof(struct usuarios_infos),contas_tmp.usuario,contas_tmp.senha);
    		}
    		if(ponteiro_contas/sizeof(struct usuarios_infos) == total_de_contas-1){
    			printf("Usuario ou Senha Incorreto. \n");
    			break;
    		}
    		ponteiro_contas = ponteiro_contas + sizeof(struct usuarios_infos);
    	}
    	// --------------------------------------------------------------------------------------
    	fclose(file_contas);
    	free(lista_de_contas);
    }

    Da uma olhada, uma estudadinha, não copia kkkk .não vai pelo fácil, tente ler e ver como funciona deixei com muitos comentarios e o nome das variaveis estão bem claras. tente ai! mande seus resultados

    • Curtir 1
  8. Isso, essa é a ideia, só um detalhe na hora de utilizar o fread, voce carregou os bytes do arquivo dentro da struct contas, não deu erro porque você limitou a quantidade de bytes a ser lidos do tamanho da struct, o tamanho da struct suporta 1 usuário e 1 senha correto? ou seja você só vai conseguir carregar 1 conta, para verificar varias contas ao mesmo tempo crie uma variavel ex: ponteiro_de_contas=0; (ela deve começar com 0)

     

    ela apontando pra 0 você vai ler a primeira conta do arquivo, esse valor 0 + sizeof(usuarios_infos) já vai ser  aproxima conta da forma que te disse antes, 

    0 - primeira conta

    contas = contas + sizeof(usuarios_infos);

    1 - segunda conta

    contas = contas + sizeof(usuarios_infos);

    2 - segunda conta

     

    você fez tudo certo, agora é só adicionar uma while que percorra todas as contas e compare ao mesmo tempo, tipo

    while(true){

    // codigo para carregar todas as contas

    memcpy(&contas,ponteiro_de_contas,sizeof(contas)); // Aqui sim que você vai passar os dados para struct

    // -----------

    // codigo para verificar todas as contas a partir do ponteiro_de_contas

    memcmp(&contas,etc,sizeof(contas));

    // ----------------

    if(total_de_contas == sizeof(lista_de_contas)){

    break;

    }

    }

     

    Obs: para carregar todas contas de uma vez só você deve carrega-la dentro de um array pode ser declarada assim char lista[100000];

    ou

     

    char * lista;

    lista = malloc(100000);

     

    agora no lugar de carregar fread() em &contas você vai por sua lista, 

  9. 21 horas atrás, Xaws disse:


     Tentei dessa forma mais quando coloco qualquer coisa ele da como logado,tenho certeza que fiz tudo errado :tw_grimace:

    @Xaws

    Quase, seria mais ou menos assim, postarei em partes!

    // Declarando a struct

    struct usuarios_infos{

    char usuario[200];

    char senha[50];

    }

     

    // Carregando o arquivo,

    struct usuarios_infos usuarios_carregados;

     

    wFile = fopen("usuarios.db","wb");

    if(wFile == NULL){

    printf("ERRO no arquivo e tal. \n");

    }

     

    int bytes = fread(&lista_de_contas,1,sizeof(lista_de_contas),wFile); // retorna 0 se der errado

     

    apos ter carregado todos os usuarios dentro do arquivo iremos verificar quantas contas existem a partir do retorno de fread, que retorna exatamente a quantidade de bytes dentro do arquivo, ou seja dividindo esse valor pelo tamanho da struct teremos o total de contas,

     

    int total_de_contas = bytes / sizeof(usuarios_infos);

     

    dessa forma a primeira conta cadastrada fica no total_de_contas 0 a segunda é 0 + sizeof(usuarios_infos) que é o tamanho de uma conta,

     

    a partir dai é só comparar através da memcmp,

     

    exemplo:
    char usuario[200];

    char senha[50];

    scanf("%s",&usuario);

    scanf("%s",&senha);

    memcpy(&umastructtemporaria.usuario,&usuario,strlen(usuario)); // passa os dados para strucft

    memcpy(&umastructtemporaria.senha,&senha,strlen(senha)); // passa os dados para struct

    if(memcmp(&umastructtemporaria,&structdecontacarregada,sizeof(usuarios_infos)) == 0){

    printf("Usuario longado. \n");

    }else{

    printf("Usuario ou senha incorreto. \n");

    }

     

    Ai meu amigo basta você fazer um while que percorre todo seu arquivo de contas lembrando que cada conta sem encontra na seguinte posição,

    contas = 0;

    0 - primeira conta

    contas = contas + sizeof(usuarios_infos);

    1 - segunda conta

    contas = contas + sizeof(usuarios_infos);

    2 - segunda conta

     

    o while vai percorrer ate chegar no resultado do total de bytes carregados do arquivo dividido pelo sizeof(usuarios_infos);

     

    Qualquer duvida mande ai! seus resultados bons ou ruins também!

     

    • Curtir 2
  10. a melhor forma de fazer seria utilizando uma struct Ex:

    struct infos_contas{

         char login[256];

         char senha[50];

    }

     

    para gravar os dados no arquivo basta preencher as variaveis e gravalas no arquivo com fwrite;

    para ler depois os dados utilize a fread, que vai buscar todos dados da struct de uma vez so,

    para saber a quantidade de contas dentro do arquivo você vai dividir o tamanho da struct pela quantidade de bytes do arquivo, com a quantidade ja em mãos desenvolva uma while() que percorra todas as contas comparando ate achar a correta, se encontrar alguma correspondente  LONGA, se não mostra erro de login!

     

    Da forma que você esta fazendo acaba dificultando porque cada dado dentro do arquivo tem um ponteiro diferente(endereço), utilizando a struct voce so vai carrega-los 1 conta por vez e comparar,

    • Curtir 2
  11. EnumProcess, pelo que lembro, ela não retorna o nome do processo somente o PID. uma boa biblioteca que controla esse tipo de função é há PSAPI procure pela lista de funções dela no google que você vai conseguir realizar seu projeto! 

    • Curtir 2

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!