Ir ao conteúdo
  • Cadastre-se

holifaca

Membro Pleno
  • Posts

    21
  • Cadastrado em

  • Última visita

Tudo que holifaca postou

  1. .if: muito obrigado pela dica, a partir dela encontrei o que eu realmente queria fazer: usar a placa de som ao invés do PC speaker utilizando a biblioteca Alsalib. A ideia é criar uma musiquinha eletrônica na unha! hehe codigo rápido: obrigado pela sugestão, mas pelo que percebi as funções dessa biblioteca só tocam som se já tiver ele em formato de arquivo (.wav, mp3, .ogg). Eu quero fazer os sons via programação em C.
  2. Como faço pra sintetizar sons em diferentes notas (dó-ré-mí...) e frequências em C no Linux? Já fiz isso em Turbo Pascal no Windows em que havia uma funçao (se me lembro bem seu nome era Beep) que aceitava um valor do tipo real e, dependendo do número, a placa de som emitia um beep diferente.
  3. dwatashi, muito obrigado pela informação. Achei bem estranha a justificativa dada pelo desenvolvedor, que usou como pretexto a segurança do banco de dados local das "configurações remotas" e para forçar as suas atualizações", sendo que essa feature é totalmente dispensável para o uso do navegador. Estão empurrando goela abaixo esse spyware, pior ainda na versão ESR que é destinada a organizações e empresas.
  4. Oi pessoal, quero usar o Firefox 90esr, mas antes gostaria de desativar todas as conexões automáticas que ele abre quando rodamos o navegador. Já removi quase todas seguindo o artigo da Mozilla "Como parar as conexões automáticas do Firefox" (ver ref: 1). Infelizmente, ele continua contactando esse host bastante suspeito (apesar de não ter cara de um, parece se tratar de um spyware): firefox.settings.services.mozilla.com Utilizo o Wireshark e tcpdump no LInux para auditar as conexões automáticas e já tentei fazer o seguinte: about:config: services.settings.server = "" app.normandy.enabled = false messaging-system.rsexperimentloader.enabled = false browser.newtabpage.activity-stream.feeds.asrouterfeed = false Preferencias: Desativei tudo que abre conexões automáticas nessa tela. Arquivos omni.ja (ref: 2): Removi todas as referências que encontrei sobre aquele host dos arquivos de recurso "firefox/omni.ja" e "firefox/browser/omni.ja" (usei unzip + zip para recomprimir). Mesmo depois de todas essas alterações, o Firefox ainda insiste em contactar esse servidor sem o meu consentimento. Alguém tem ideia de como desativar essa conexão? # Referências: 1-https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections 2-https://wiki.archlinux.org/title/Firefox/Privacy#Editing_the_contents_of_omni.ja
  5. Teste o navegador Palemoon - http://linux.palemoon.org/ Ele usa a engine de uma versão antiga do Firefox que é bem leve mas atualizada para funcionar com sites atuais. Teste o Debian 7 com XFCE ou LXDE que é MUIITO leve, consome pouca memória e é rápido ao executar programas. Neste caso você estará por conta própria, pois eles não dão mais suporte pra essa versão. Se já tiveres boa experiência com Linux, vai fundo que não se arrependerá! Download Debian 7.11: https://cdimage.debian.org/mirror/cdimage/archive/7.11.0/
  6. Sim, essa função só funciona com programas alvos desenvolvidos em .NET e Win32 (funciona tanto em Windows de 32bits como em 64bits). Faça um teste com outros programas aí pra ver.
  7. A calculadora do Win10 é desenvolvida em UVP e é diferente da plataforma Win32. Que azar! A saída do jogo também inicia com ApplicationFrameHost.exe? Sabe dizer em qual linguagem ele foi feito?
  8. Teste o código abaixo e poste a saída completa: #include <tchar.h> #include <windows.h> #include <TlHelp32.h> #include <iostream> #include <Psapi.h> #include <wchar.h> using namespace std; uintptr_t GetModuleBaseAddress(DWORD procId, const wchar_t* modName) { uintptr_t modBaseAddr = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId); if (hSnap != INVALID_HANDLE_VALUE) { MODULEENTRY32W modEntry; modEntry.dwSize = sizeof(modEntry); if (Module32FirstW(hSnap, &modEntry)) { do { printf("szModule: %S\n", modEntry.szModule); if (!_wcsicmp(modEntry.szModule,modName)) { modBaseAddr = (uintptr_t)modEntry.modBaseAddr; break; } } while (Module32NextW(hSnap, &modEntry)); } else { cout<<"erro Module32FirstW(): "<<GetLastError()<<endl; } CloseHandle(hSnap); } else cout<<"erro CreateToolhelp32Snapshot(): "<<GetLastError()<<endl; return modBaseAddr; } int main(){ HWND GameHWND = FindWindow(0,"calculadora"); if (GameHWND == NULL) { cout<<"erro FindWindow(): "<<GetLastError()<<endl; return 1; } DWORD procId = 0; GetWindowThreadProcessId(GameHWND, &procId); std::cout<<"ProcID "<< procId << std::endl; //Getmodulebaseaddress uintptr_t moduleBase = GetModuleBaseAddress(procId, L"calc.exe"); std::cout<<"Modulebase "<< moduleBase<< std::endl; cin.ignore(); return 0; }
  9. O ID do processo também tá retornando 0? E quanto à pergunta 4) que fiz?
  10. Quase todos os serviços de Internet voltados para o público internacional e navegadores (IE, Firefox, Google Chrome, Safari) estão nas mãos do estado americano, que hoje usa-os para espionar VOCÊ! Comparado a eles a China é o mindinho do teu pé.
  11. 1-Rode o programa como administrador do sistema. 2-O ID do processo está retornando corretamente? 3-O teu programa funciona com a calculadora do Windows? Teste aí usando: "Calculadora" e L"calc.exe". 4-Esse jogo Mario é protegido por algum aplicativo tipo Gameguard, HShield, etc?
  12. você esqueceu de adicionar um W, verifica aí de novo. Se o erro continuar, poste seu novo código.
  13. Mesmo assim há ainda um problema de compatibilidade na codificação de caracteres no código dele. Perceba que ele chama FindWindow() passando uma string no formato Ansi (char*) e o código compila normalmente, o que indica que o compilador está tratando todas as chamadas APIs do Windows usando aquele charset. Já dentro da função GetModuleBaseAddress(), ele utiliza a estrutura modEntry sem especificar o charset, e aí o compilador trata ela como sendo Ansi, e quando chega na comparação das strings, que usa uma função Unicode, ele tenta converter a string char* em const wchar_t*, o que é errado! Para converter uma string tradicional do C em Unicode é necessário criar uma função para isso e não simplesmente usar um type casting.
  14. O problema é que a função _wcsicmp() está comparando duas strings de tipos diferentes: o argumento modName (que é do tipo wchar_t) e o campo szModule da estrutura modEntry, que o teu compilador está tratando como sendo do tipo char* (Ansi). Uma maneira de resolver isso é forçando a declaração da estrutura modEntry como sendo do tipo Unicode e chamando suas respectivas funções Unicode para a mesma. É só adicionar um W no fim de cada termo, assim: MODULEENTRY32W modEntry; Module32FirstW() Module32NextW()
  15. A função abaixo cria a declaração de um vetor do C em texto plano a partir de um arquivo binário qualquer que você pode copiar-colar no teu código, bastando mudar o nome do array. Para passar o vetor como argumento para a função loadMemory(), que talvez esteja esperando um ponteiro do tipo char*, faça: loadFromMemory((char*)nomeDoArray, sizeof(nomeDoArray)); você pode mudar o valor da constante MAXCOLS para outro numero se preferir. #include <stdio.h> #include <stdlib.h> #include <string.h> /* Input.: arquivo binario Output: const unsigned char nomeDoArray[]={ 0x00,0x11,0x22,0x33,0x44, 0x55,0x66,0x77,0x88,0x99 }; */ char* ArquivoParaVetorDeBytesC(const char *arqNome, char **dest) { const int MAXCOLS = 16; FILE *arq = fopen(arqNome,"rb"); fseek(arq, 0, SEEK_END); size_t arqTam = ftell(arq); rewind(arq); unsigned char b; char sByte[16]; int j = 0; size_t bufTam = arqTam * 16; char *buf = (char*)malloc(bufTam); memset(buf, 0, bufTam); // adiciona a declaracao do array strcat(buf, "const unsigned char nomeDoArray[]={\n"); while( fread(&b, sizeof(b), 1, arq) == 1 ) { if (j < MAXCOLS) { sprintf(sByte, "0x%02X,", b); strcat(buf, sByte); j++; } else { sprintf(sByte, "0x%02X,\n", b); strcat(buf, sByte); j = 0; } } strcat(buf, "\n};"); *dest = buf; return *dest; } int main() { char *buf = NULL; ArquivoParaVetorDeBytesC("imagem.png", &buf); printf("%s\n", buf); // Libera a memoria a memoria apontada por buf, que foi alocada dentro da funcao. free(buf); return 0; }
  16. Se os arquivos .vbs e .bat estiverem o sudiretório "run", como parece ser o caso, mude o diretório atual de execução para esse subdir usando a função chdir() e chame o vbs diretamente: #include <dirent.h> // cabeçalho necessário para chdir() chdir("run"); system("run.vbs");
  17. Uma forma de impedir que outras instâncias do programa sejam abertas é passando um parâmetro na linha de comando, assim: Dentro da função main(), verifique se o parâmetro "-evitar" foi encontrado na linha de comando (analise os argumentos argv e argc). Se encontrado, então não execute o programa novamente (não chame aqui a função de iniciar o processo, como system/CreateProcess/ShellExecute/WinExec). Senão, execute o programa passando o parâmetro "-evitar" na linha de comando (chame aqui a função que inicia o processo passando "-evitar"). Lembre-se de que quando o usuário inicia manualmente a primeira instância do programa, o parâmetro "-evitar" não será encontrado.
  18. Mesma coisa! você só vai precisar instalar e configurar um aplicativo de servidor proxy que rode no Windows em um dos Laptops.
  19. Supondo que você possua 2 provedores de Internet que forneçam 2 IPs diferentes, um para o seu celular e outro para o Laptop. Se você quer usar o Laptop conectado com o IP público do provedor para acessar um site usando o IP do provedor do teu celular, basta instalar e configurar um aplicativo de servidor proxy no celular. Assim, o celular ficará como um ser intermediário entre o Laptop e o servidor remoto, transferindo os pacotes para o site usando o IP do celular, ao invés do IP público do laptop. Procure na Internet por (proxy server app android), caso teu celular use o sistema operacional Android.
  20. Boa ideia implementar o código no gerador para detectar os offsets das vars automaticamente! Só precisa cuidar para que não haja duplicidade do padrão de busca dentro do arquivo a ser gerado, pois dependendo do conteúdo do arquivo ele pode conter várias ocorrências.
  21. Compile uma vez o programa que vai ser gerado (ex: novo.exe) contendo todas as funções disponíveis, porém desativadas inicialmente. O "novo.exe" deve possuir variáveis que dizem quais opções estarão ativadas/desativadas (ex: ativarMsgBox, ativarFuncaoX, algumValorInt, etc...). Essas vars estarão localizadas em determinados endereços estáticos dentro do arquivo gerado (esses endereços se chamam offsets) e você precisará descobrir esses endereços manualmente. Para descobrir o offset de cada variável, use um editor hexadecimal (HxD). A fim de facilitar essa busca, inicialize as variáveis do "novo.exe" com um valor hexadecimal que seja facilmente identificável (ex: private uint mostrarMsgBox = 0xAAAAAAAA, private uint ativarFuncaoX = 0xBBBBBBBB). Nesse caso as variáveis precisarão ser do tipo "unsigned int" ou "uint". Agora basta fazer a busca dentro do arquivo usando a ferramenta que você escolheu. Depois de compilar o novo.exe, você pode armazenar o arquivo dentro da seção de recursos do programa "gerador.exe" ou como um arquivo comum na mesma pasta do gerador, ou ainda como um array de bytes dentro de uma variável constante (caso o tamanho do programa a ser gerado não seja grande!). No programa gerador, o usuário irá marcar as opções que ele quer ativar/desativar. quando ele clicar no botão "Gerar", o gerador copia o conteúdo do "novo.exe" para um arquivo temporário ou para a memória (você decide!), e aplicará os devidos patches diretamente nesse conteúdo. Esses patches vão modificar os valores das variáveis conforme as opções do usuário. Se o usuário ativou "Mostrar msgbox", o gerador escreve o valor 1 para o offset da variável mostraMsgBox, caso contrário escreve o valor 0. Se for um valor não booleano é a mesma coisa. Essa técnica funciona em qualquer linguagem.

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!