Jump to content

bornman

Membros
  • Content Count

    45
  • Joined

  • Last visited

Everything posted by bornman

  1. Olá, estou aprendendo sobre injeção em processos e estou tentando criar um injetor de dll em C++, utilizando WriteProcessMemory e CreateRemoteThread, as funções não retornam erros porém a dll não é injetada. Segue o código: #include "pch.h" #include <iostream> #include "Injections.h" int main(int argc, char *argv[]) { const char *dllPath = "example.dll"; DWORD processId = getProcID(L"process.exe"); HANDLE procHandle = getProcHandle(processId); bool inj = injectDll(procHandle, dllPath); CloseHandle(procHandle); getchar(); return 0; } #include "pch.h" #include "Injections.h" #include <iostream> DWORD getProcID(const wchar_t* procName) { DWORD procId = 0; HANDLE hSnap = (CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)); if (hSnap != INVALID_HANDLE_VALUE) { PROCESSENTRY32 procEntry; procEntry.dwSize = sizeof(procEntry); if (Process32First(hSnap, &procEntry)) { do { if (!_wcsicmp(procEntry.szExeFile, procName)) { procId = procEntry.th32ProcessID; break; } } while (Process32Next(hSnap, &procEntry)); } } CloseHandle(hSnap); return procId; } HANDLE getProcHandle(DWORD pid) { HANDLE h = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid); if (h == NULL) { std::cout << "Can't get process handle!" << std::endl; exit(-1); } return h; } bool injectDll(HANDLE procHandle, const char *dllPath) { LPVOID loadPath = (LPVOID)VirtualAllocEx(procHandle, 0, strlen(dllPath)+1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); if (loadPath == NULL) { std::cout << "Can't allocate memory!" << std::endl; exit(-1); } int n = WriteProcessMemory(procHandle, loadPath, dllPath, strlen(dllPath)+1, NULL); if (n == 0) { std::cout << "Couldn't write memory!" << std::endl; } HANDLE thread = CreateRemoteThread(procHandle, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, loadPath, 0, NULL); if (thread != NULL) { std::cout << "Injection Sucessfull!" << std::endl; return true; } exit(-1); }
  2. Bom dia Tenho uma dúvida que não sei explicar muito bem, referente ao surgimento de objetos em um jogo. Por exemplo em um jogo 3D, quando aparece um carro na rua, como isso acontece na memória? Ou quando você mata um inimigo e ele dropa um item, se tratando de engenharia reversa, como é feito isso? Não sei se consegui explicar muito bem a minha dúvida, caso contrário tentarei arrumar um jeito de me expressar melhor.
  3. Se um programa pede uma chave logo no inicio, e alterarmos o OEP para depois dessa verificação, logo poderemos usar o programa sem nenhuma chave?
  4. Muito obrigado @Felipe.Silva Vou ler as referências.
  5. O termo Man In The Middle refere-se a um tipo de ataque porém pode esse ataque pode ocorrer de várias formas, certo ou errado? Um envenenamento da tabela ARP é um man in the middle? Se eu colocar a placa de rede em modo promiscuo, todo tráfego vai passar pelo meu computador, isso seria um man in the middle também?
  6. Leia a segunda dica que o @Fernando Mercês postou.
  7. Não conheço esse livro, porém recentemente comprei o Análise de Tráfego em Redes TCP/IP. Estou gostando bastante, da uma olhada pra ver se lhe interessa... O livro é bem escrito e de fácil entendimento.
  8. Vou tentar fazer por cd mesmo. @Felipe.Silva Recém foi instalado esse windows. Não baixo nada pirata e praticamente não baixo nada no geral.
  9. @Leandro Fróes Windows 10. No momento não tenho nenhum pendrive pra isso
  10. @sombrakey Não, as vezes recém liguei e ele trava, outras vezes posso deixar o dia todo ligado e não acontece nada.
  11. Olá pessoal, as vezes estão ocorrendo travamentos no meu computador e eu não faço ideia do motivo. Já removi as memórias RAM e limpei, porém o problema não foi resolvido. Notei que o cooler da placa de vídeo está girando em velocidade baixa ou nem gira, mas creio que esse não seja o motivo pois a temperatura fica baixa já que eu nem estou mais usando o computador para jogos. Alguém já passou por algo parecido ou tem ideia do que seja?
  12. @Felipe.Silva Bacana seu código, meu objetivo era de fazer como se fosse um ping porem recriado, mas pelo que vi é muito mais complexo. Achei um no GitHub, pra quem quiser dar uma olhada: Python Ping
  13. @gnoo As últimas tentativas que fiz foram com uma porta só. Rodei o seu código aqui e não detectou nenhum host ativo. Talvez eu esteja fazendo algo errado, ou o problema seja meu firewall.
  14. Entendi. Então creio que esse método de fazer um scanner de rede local não seja ideal. Quando eu estudar mais sobre o assunto tento de novo hehehe. Obrigado pela ajuda pessoal.
  15. Não arrumei nenhum erro. Agora, utilizando a porta 80, ele só consegue se conectar com o primeiro IP(no caso, o ip do modem). Não faço ideia de que porta devo usar no scan, a 80 está correta? Não sei se estou pensando de forma correta mas acredito que exista uma porta padrão para todos os computadores da mesma rede, certo?
  16. O IP estava certo, 192.168.15.x, agora ele só consegue se conectar com o IP do modem, os outros está dando timedout. Coloquei sock.settimeout(0.5), será que está muito baixo? Ou será que pode ter algo relacionado ao meu firewall?
  17. Opa, obrigado Leandro. Esse IP eu tinha colocado apenas no código aqui como exemplo hehehehe. Essa parte do 0 e 255 eu realmente não sabia, estou lendo um livro de redes mas ainda estou no começo. Vou tentar fazer utilizando threads pra ver se consigo realizar o scan de forma mais rápida.
  18. Estou baixando apenas os arquivos .rar, onde está a senha? Em algum pdf?
  19. Fala pessoal, estou tentando fazer um scanner de rede em Python utilizando sockets. No código a base está como um IP classe C, em que o loop muda apenas o último octeto, ex: 192.0.0.H e tenta se conectar a esse endereço usando algumas portas, quando a conexão for estabelecida então supõe-se que o endereço existe na rede. Desenvolvi apenas a primeira parte do código, o problema é que, na hora do print, estão aparecendo endereços que não existem na rede. Segue o código: import socket import subprocess subprocess.call("clear", shell=True) ports = [80,8080,25] for host in range(0,255): for port in ports: host = str(host) ip = "192.0.0."+host sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex((ip, port)) if (result == 0): print(ip,":",port) O que vocês acham? Mais pra frente pretendo usar threads e uma interface gráfica.
  20. Bacana, eu fiz uma parte dos tutoriais The Legend of Random, me pareceu ir mais afundo do que os da(o) Lena, porém posso estar enganado.
  21. Opa, funcionou. Obrigado! Existe um jeito de scannear portas de forma mais rápida com o python?
  22. Fala pessoal, peguei na internet uma base para um port scanner em Python porém aparentemente ele está "travando", tentei fazer com menos portas para testar se era eu que não estava esperando o tempo necessário mas não deu certo também. Segue o código: import socket import subprocess import sys from datetime import datetime subprocess.call('cls', shell=True) host = input("Enter the host to scan: ") hostipv4 = socket.gethostbyname(host) print("-"*60) print(" Please wait, scanning", hostipv4,"..." ) print("-"*60) t1 = datetime.now() try: for port in range(1, 1025): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex((hostipv4, port)) if (result == 0): print("Port {}: Open").format(port) sock.close except socket.gaierror: print("Hostname could not be resolver. Exiting...") sys.exit() except socket.error: print("Couldn't connect to server.") sys.exit() t2 = datetime.now() total = t2-t1 print("Total scan time: ", total)
  23. Obrigado novamente @Fernando Mercês, entendi o motivo do -1. Agora o programa está funcionando corretamente, segue o código: #include <iostream> #include <string.h> using namespace std; class Polindrome{ public: std::string word; bool static isPolindrome(std::string word){ for (int i = 0; i<word.size(); i++) { if (word.at(i) != word.at(word.size()-i-1)) { return false; } } return true; } }; int main() { Polindrome p; cout << "Digite uma palavra para ser verificada: "; cin >> p.word; if (Polindrome::isPolindrome(p.word)){ printf("Eh palindromo."); } else{ printf("Nao eh palindromo."); } }
  24. Obrigado @Fernando Mercês, consegui arrumar boa parte dos erros, o código ficou assim: #include <iostream> #include <string.h> using namespace std; class Polindrome{ public: std::string word; bool static isPolindrome(std::string word){ for (int i = 0; i<word.size(); i++) { if (word.at(i) != word.at(word.size()-i-1)) { return false; } else { return true; } } } }; int main() { Polindrome p; cout << "Digite uma palavra para ser verificada: "; cin >> p.word; if (Polindrome::isPolindrome(p.word)){ printf("Eh palindromo."); } else{ printf("Nao eh palindromo."); } } Não entendi o por que do -1 nessa parte: if (word.at(i) != word.at(word.size()-i-1)) , seria por causa do ultimo carácter que indica o fim da string(\0)? E o meu loop só está comparando a primeira letra com a última letra, então acredito que eu deva trocar no loop o return true por i++, correto? Porém como eu faço ele retornar true apenas quando ele terminar de comparar todas as letras?
×
×
  • Create New...