Ir para conteúdo

Hakuoo

Membros
  • Postagens

    11
  • Registro em

  • Última visita

  • Dias Ganhos

    6

Tudo que Hakuoo postou

  1. Olá, confrades, tudo certo? Espero que todo mundo esteja bem! Eu criei mais um desafio divertido para nossa comunidade, dessa vez com algumas características únicas. Bom antes de prosseguir tenho algumas advertências para quem for tentar: Use uma VM(Não use seu computador físico de maneira alguma)! Você pode se assustar com algumas técnicas empregadas(mas garanto não tem nada de malicioso). Como regras do nosso desafio: Se o unpack for feito(Criar um passo a passo de como você fez). Se a chave for encontrada(Postar como você chegou a essa conclusão) Você é livre para "bypassar" minhas técnicas empregadas, e se fizer, também faça um tutorial de como conseguiu. Não está familiarizado com os termos de challenges? Clique aqui para ler a explicação. Sobre o nosso desafio: "Protegido" com Rika's Packer 1.0(Hakuoo Packer) Visual C++ 2019 IA-32 Dica: Não tente fazer bruteforce, você pode conseguir se prestar bem atenção nas instruções. Senha para o arquivo: desafiomb Uso na linha de comando: CrackmeV3_challenge.exe senha Como mencionado o objetivo é para estudos aperfeiçoamento e aprendizado, todo mundo vai sair ganhando, o desafio é dado como ganho para a melhor resposta ou para quem fazer um unpack funcional, encontrar o OEP, corrigir a IAT, e encontrar a senha. Boa Sorte, diversão e Saudações ! CrackmeV3_challenge.zip
  2. Versão 2.0.0

    157 downloads

    Para usar com a melhor experiência possível: Extraia o arquivo Abra o arquivo index.html da pasta principal em um navegador(Não use o IE) Pronto para utilizar Informações importantes: O material está em chinês, use um tradutor para traduzir, e tenha um excelente aprendizado !
  3. Olá criador do desafio, Vamos a nossa analise: 1º Parte Quando encontramos o EntryPoint a parte que mais chama a atenção é a seguinte: mov dword ptr [esp+1Ch], 6A645B63h ; Char 1 mov dword ptr [esp+20h], 645F585Bh ; Char 2 mov dword ptr [esp+24h], 575F6857h ; Char 3 mov dword ptr [esp+28h], 63655924h ; Char 4 mov dword ptr [esp+2Ch], 685824h ; Char 5 Nesse caso temos alguns valores sendo movidos para algumas posições da memória indicadas por ESP +offset, e colados lá, isso é caracteristica de um array, ou da instrução strcpy. 2º Vamos organizar isso e tentar encaixar na instrução do strcpy, ficará da seguinte forma: int main(int argc, char** argv) { char buffer[20]; /* mov dword ptr [esp+1Ch], 6A645B63h ; Char 1 mov dword ptr [esp+20h], 645F585Bh ; Char 2 mov dword ptr [esp+24h], 575F6857h ; Char 3 mov dword ptr [esp+28h], 63655924h ; Char 4 mov dword ptr [esp+2Ch], 685824h ; Char 5 ESP[0] = 6A645B63h; ESP[1] = 645F585Bh; ESP[2] = 575F6857h; ESP[3] = 63655924h; ESP[4] = 685824h; Simplificando: strcpy(ESP, "c[dj[X_dWh_W$Yec$Xh") */ strcpy(buffer, "c[dj[X_dWh_W$Yec$Xh"); } Interessante temos um buffer sendo alimentado por uma string aparentemente ofuscada e convertida do hexadecimal para o ASCII. 3º Vamos entender mais um pouco de como é feito essa chamada lea eax, [esp+1Ch] ; copia o endereço de uma posição para EAX mov [esp], eax ; move o conteúdo do endereço pego para ESP call DecriptStr ; chama uma call para um função mov [esp], eax ; retorno da call ! Todas calls costumam retornam em EAX nosso peseudocódigo ficará da seguinte forma: DecriptStr([ESP]); Legal, temos um ponteiro de um char sendo movido para uma função ? sim. Veja a reescrita disso com as informações que já temos: int main(int argc, char** argv) { // Nova adição, para receber o retorno de EAX const char* escrever; char buffer[20]; /* mov dword ptr [esp+1Ch], 6A645B63h ; Char 1 mov dword ptr [esp+20h], 645F585Bh ; Char 2 mov dword ptr [esp+24h], 575F6857h ; Char 3 mov dword ptr [esp+28h], 63655924h ; Char 4 mov dword ptr [esp+2Ch], 685824h ; Char 5 ESP[0] = 6A645B63h; ESP[1] = 645F585Bh; ESP[2] = 575F6857h; ESP[3] = 63655924h; ESP[4] = 685824h; Simplificando: strcpy(ESP, "c[dj[X_dWh_W$Yec$Xh") */ strcpy(buffer, "c[dj[X_dWh_W$Yec$Xh"); // nova adição escrever = DecriptStr(buffer); // Simplificamos os detalhes, então a call é efetuada o retorno volta em EAX e volta a "referência" para um endereço. } 4º Nosso código está ficando bacana, vamos prestar mais atenção nos próximos detalhes abaixo disso: call _puts ; Chama a função puts para escrever nosso retorno mov eax, 0 ; Lembra da dica de retorno da função ? sim, nosso main também é uma subcall e ele vai retornar 0 Pseudocode: puts(escrever); return 0; 5º Vamos reescrever isso agora no código que já entendemos. int main(int argc, char** argv) { const char* escrever; char buffer[20]; /* mov dword ptr [esp+1Ch], 6A645B63h ; Char 1 mov dword ptr [esp+20h], 645F585Bh ; Char 2 mov dword ptr [esp+24h], 575F6857h ; Char 3 mov dword ptr [esp+28h], 63655924h ; Char 4 mov dword ptr [esp+2Ch], 685824h ; Char 5 ESP[0] = 6A645B63h; ESP[1] = 645F585Bh; ESP[2] = 575F6857h; ESP[3] = 63655924h; ESP[4] = 685824h; Simplificando: strcpy(ESP, "c[dj[X_dWh_W$Yec$Xh") */ strcpy(buffer, "c[dj[X_dWh_W$Yec$Xh"); escrever = DecriptStr(buffer); puts(escrever); return 0; } Dando continuidade com nossa reconstrução e agilizando o processo, analisei a função de DecriptStr e ficou da seguinte forma: char* DecriptStr(char *stringOfuscada){ char *armazenaLocal; armazenaLocal = stringOfuscada; while(*stringOfuscada) *stringOfuscada++ += 10; return armazenaLocal; } Esse é o algoritmo usado para ocultar as strings do Debugger, basicamente, é relativamente simples esconder alguma string do debbuger, por esse fato devemos também ficar atento no que acontece no algoritmo do mesmo verificar se temos argumentos suspeitos sendo passados. Conclusão: Esse tipo de algoritmo é muito comum em malwares como o bom e velho XOR, porem são muito utilizados em diversos software que você encontrar durante sua analise, fique atento a isso ! E para o fim temos o resultado: Obrigado pela sua Leitura, e espero que isso tenha sido útil para alguém ! Saudações a todos. CADE_Algoritimo.zip
  4. Olá criador do desafio, Eu reconstruí seu algoritmo mande o original para a gente comparar, isso vai me ajudar nos meus estudos ! O anexo do meu algoritmo reconstruído está aqui espero que seja útil para outros membros também, minha ideia era resolver seu desafio entender reescrever o algoritmo usado para criar a flag. Por favor faça mais Crack Me'S para a gente. Saudações. Keygen CrackMeX.zip
  5. Versão 1.0.0

    81 downloads

    Uma coleção de artigos compilados do extinto fórum UnPack China de 2007. Arquivo (.chm), conteúdo em chinês, use um tradutor para seguir os passos ensinados. Caso esteja em um ambiente maior que Windows 7: instale a seguinte ferramenta: https://www.microsoft.com/pt-br/p/chm-reader/9nblggh16pc4?activetab=pivot:overviewtab
×
×
  • Criar Novo...