fofoca
janelas de aprendizagem recentemente começou a reverter, a escola ainda é superficial, de modo a Crackme160 prática de alvo, ao mesmo tempo, urge a sua aprendizagem pode agradar a si mesmos, o aprendizado é interminável, esperança de que eles não podem esquecer o coração cedo.
texto
previsão
O objetivo deste exercício é o primeiro de ácido burn.exe crackme. Primeiro, abra o programa diretamente, e ver quais são as metas atuais.
Primeiro executar os popups do programa, dar algumas informações informações de boas-vindas e autor, interface principal do programa aparecerá após clicar OK
Clique em ambos os lados do respectivo botão, o programa tem duas partes pode ser visto:
A primeira parte da série / Nome para digitar o Nome e Serial respectivamente, presumivelmente por criptografar o programa irá gerar em si Serial pela entrada Nome e, em seguida, entramos as cordas comparando série, a primeira tentativa de introduzir um valor aleatório alguns aqui, e clique checkit , obter um erro como segue:
Serial segunda porção necessidade de entrar em série, ou App estimativa gera uma série de cadeias de entrada comparação em série. Ainda tentar inserir um valor aqui, você recebe a seguinte mensagem de erro:
fenda
Previsão pode ser obtido pela presente momento os seguintes objectivos:
-
1. Ignorar pop neg no início do programa (e tão bem, este não é o objetivo principal)
-
seção 2.serial, clique no botão exibido corretamente verifique ele solicita.
-
3.serial / mostrar o botão correto quando clica solicitado verificá-lo parte do nome.
1. Ignorar pop neg
cadeia de procura (1) Método
Porque o programa não codificação de string, então você pode por certo - encontrar a corda correspondente> procurar for-> maneira toda referência cordas
conteúdo corda quando o programa começa, a exibição da pesquisa de cadeia pop pode ser visto como
Double-selecionar ou inserir para entrar no ponto da chamada, como mostrado abaixo, o endereço de memória da seqüência passada como um parâmetro
Na verdade, na chamada após entrar no pull down chamada MessageBoxA pode ver na figura, esta é a segunda forma de crack indo para ele.
Acima do solo, em um ponto de interrupção no F2 Chamada, F9 para executar lá, da área de pilha pode ser visto que o valor de retorno da chamada de função, a chamada pode alcançar o mesmo entrar.
Se você precisar pular pop, na chamada diretamente para matar, mas o equilíbrio pilha de notas e valores de retorno, existe um valor de retorno deve EAX, podemos substituir a chamada para MessageBox mov eax depois pressione OK, 1 , o espaço remanescente pode ser preenchido com um NOP.
(2) Pesquisa chamada de método interno
janelas geralmente são pop a chamada MessageBox janelas API, para que a chamada pode ser pesquisado, a fim de encontrar o ponto de popups de chamadas.
Direito à opção de desenho MessageBox selecionado, ou seja, um ponto de ruptura em todos os locais de atendimento. F9 e, em seguida, continuar a executar sobre os próximos passos e métodos (1) a mesma.
Método de pilha de controlo (3) Pausa
Sob nenhuma circunstância pontos de interrupção, executar o programa directamente OllyDbg, suspensão F11 do programa após a pop pop-, como mostrado abaixo
Neste momento, o programa principal é executado em loop de janelas, as esperas de loop para uma mensagem. Necessidade de desligar a área de pilha, porque messagebox para bloquear o programa e digite a mensagem sem suspendeu a pilha de chamadas função deve ser salvo, então virar para baixo a pilha de chamadas pode encontrar informações messagebox, como mostrado abaixo:
Após o passo do método e também consistente com (1).
parte 2.serial
Use qualquer um dos métodos acima para localizar o botão de posição checkit enter qualquer chamada corda messagebox como
Esta posição pode ser visto ao mesmo tempo, há um mal sucedida e rápida, virado para cima, atingido o ponto de ruptura na posição inicial quadro de pilha
push ebp
mov ebp, esp
operação de um único passo F8, enquanto se observa a informação de área de pilha pode ser analisado como se segue para Chinês comenta FIG. A partir desta análise a corda meta do programa Olá Cara!.
input programa a corda, para obter a correta sugerido como segue:
parte 3.serial / nome
O mesmo método para encontrar a chamada localização messagebox.
Da mesma forma se olhou para cima para encontrar a posição da comparação salto seqüência de código, como segue:
Aqui você pode ver o resultado alvo foi gerado e, portanto, precisa olhar para cima a gerar seqüência de código. região de interesse progressiva e funcionando e pilha de despejo pode ser analisada como região anotação conteúdo anotação chinês, ou seja, o programa irá ler o primeiro caractere da seqüência de entrada, em seguida, multiplicando a segunda entrada 29 é multiplicado como um parâmetro para uma função para gerar intermediário série segmento, e depois fazer a luta string. Uma análise mais aprofundada preciso entender que depois de introduzir a função de geração de uma série intermediário.
Na FIG chamada gerado no meio da série, encontrado próxima chamada nível, os parâmetros passados para a vista, encontrar o primeiro caracter do valor de entrada 0x29 * 2 * e "% d", o formato printf ligação da entrada, adivinhar entrada aqui feita a partir de cadeia hexadecimal da casa decimal e de saída, em seguida, de modo que o resultado seguinte conjectura experimental indica adivinhar correctamente
Aqui para fingir não saber a intenção de continuar a descer esta chamada nível de encontrar. Após um período de operação do carácter de processamento d% (% preâmbulo inclui leitura, processamento de ramos em um formato diferente para a entrada d ou similares de acordo com a x%), o segmento de código cálculo para o núcleo:
O segmento que é escrito em linguagem C como segue:
#include <cstdio>
#include <cstdint>
int main()
{
const uint8_t kEcx = 0xA;
char input_char = 0;
input_char = getchar();
uint32_t source;
source = input_char * 0x29 * 2;
uint32_t mod;
char result[16] = { 0 };
uint32_t i = sizeof(result) - 2;//留一个\0
do{
mod = source % kEcx;
source /= kEcx;
mod += '0'; //add dl,30
if (mod >= ':') //cmp dl,3A
{
mod += 7;
}
result[i--] = mod;
//putchar(mod);
} while (source);
i = 0;
while (result[i] == 0) ++i;
printf("%s\n", &result[i]);
return 0;
}
No procedimento acima descrito com base no aumento "CW" "-CRACKED" concatenação programa, RI para concluir o procedimento. A seguir, qualquer entrada, RI obtidos utilizando os resultados, como mostrado abaixo:
Neste ponto, toda a extremidade crackme.
palavras finais
Crackme para baixo toda a sensação ainda precisa de mais prática, necessidade de aprender muito, a esperança de ser capaz de ficar com ela depois, vai estabelecer uma base sólida de conhecimento e habilidade para dominar e, assim, aumentar a consciência dos outros aspectos do conhecimento, em suma, não se esqueça do coração cedo.