Saudações a todos os usuários deste fórum. E hoje iniciarei uma série de artigos sobre reversão (pesquisa) de vários programas. E se você também gostou do artigo, verá os próximos muito em breve.
Nosso paciente de hoje é o Src Protector . Este é um programa para ofuscação (proteção) do código PHP . A principal funcionalidade do programa - torna o
código ilegível ( funções, variáveis, classes ) bem e mais alguns gadgets do desenvolvedor. Estaria tudo bem se o software fosse gratuito, porque cada um de nós adora uma bola, um brinde em termos populares.
Antes de começar, direi algumas palavras sobre limitações. Nesse caso, o próprio desenvolvedor nos conta sobre as limitações do programa.
Que é um shareware e se você acessar o site do desenvolvedor http://phpobfuscator.net/download.html e tentar fazer o download, será imediatamente confrontado com o fato de que o programa não é gratuito e tem limitações.
No modo de demonstração, o programa só pode ofuscar o código de 5 arquivos php por vez. Se você não tem um projeto grande, fica claro que a
versão demo é suficiente e você não precisa comprar nada. E se você tem um grande projeto, então compre , o slogan do desenvolvedor. :sorriso50:
Neste caso, conhecemos as limitações do programa, o que já simplifica o próprio processo, a princípio. Além disso, precisamos apenas de atenção e um pouco de conhecimento da estrutura de código na qual o programa está escrito.
Para continuar precisamos:
Determine em que nosso programa está escrito (Ambiente de Programação) e descubra se o programa está protegido por algum tipo de protetor, empacotador, obfuscator. O que acabaria por escolher - um depurador adequado para o trabalho.
Descubra o número de bits do programa, aplicativo (32 bits) ou (64 bits) . E dependendo disso, use o depurador para a profundidade de bits que precisamos.
Essas informações podem ser encontradas usando o utilitário ExeInfo PE . Em poucas palavras, é isso que possibilita a visualização de informações sobre um arquivo. Como usar este programa é muito simples. É necessário arrastar o arquivo investigado (paciente) para o formulário do programa e após isso, na janela do ExeInfo PE você receberá todas as informações .
No exemplo do nosso programa Src Protector . Instale o programa, vá até a pasta com o programa instalado e arraste o arquivo srcProtector.exe para o formulário ExeInfoPE . Depois disso, você verá informações
Nome do arquivo analisado: srcProtector.exe
Profundidade de bits: aplicativo do Windows de 32 bits (32 bits)
O arquivo está compactado e no que está escrito: No nosso caso, MS Visual C#
E o último ponto, fica como recomendação: use o Net Reflector 11 como depurador
Acho que aqui está tudo muito claro, o principal é ler tudo com atenção e não haverá problemas. Depois de coletar as informações necessárias, podemos começar a domar nosso paciente.
E como depurador, escolhi o programa DnSpy , pois para mim é uma coisa muito conveniente para montagens de rede de engenharia reversa. Você pode usar outras ferramentas para analisar e editar código. Mas, neste caso, mostro no exemplo do DnSpy.
Mas primeiro, simplesmente executaremos nosso paciente (o programa que está sendo analisado) e tentaremos carregar mais de 5 arquivos nele para ver como o programa se comporta ao vivo, por assim dizer . E agora recebemos essa mensagem e, como resultado, não importa quantos arquivos você carregue no programa, mais de 5 não funcionarão.
Vá em frente, veja o formulário de ativação do programa. Acesse a aba licença e veja que para ativar o programa você precisa inserir os dados de ativação - Caixa Postal e Chave (E-mail + Serial). Normalmente, isso pode indicar que o programa verifica os dados cadastrais em seu servidor . Mas você não deve se desesperar nessas situações e pensar que o software não está mais quebrado se o cheque vier do servidor. A maioria dos desenvolvedores ainda comete erros típicos de segurança, então vamos seguir em frente.
Vamos executar o DnSpy x32, pois descobrimos acima que nosso aplicativo é de 32 bits . Quando o depurador iniciar, a princípio será incomum para quem não trabalhou com ele, cheio de todos os tipos de abas e o que não está claro onde. Mas há uma primeira vez para tudo, então vamos continuar. É claro que para pessoas experientes minhas palavras soam muito simples. Mas para quem vê tudo primeiro, será muito útil e informativo ler o artigo. Agora vou mostrar tudo como se estivesse em meus dedos e contar com as palavras mais simples possíveis, para que não seja difícil descobrir.
Depois disso, arraste o arquivo de programa srcProtector.exe para o formulário DnSpy.
Normalmente, para analisar em que princípio funciona a ativação do programa, precisamos encontrar, ir para o ponto de entrada . O ponto de entrada é o endereço onde começa a execução do programa . Ou seja, o lançamento, inicialização de funções, procedimentos (em palavras simples) . Para fazer isso, clique com o botão direito do mouse em nosso arquivo no DnSpy e clique em ir para o ponto de entrada. A seguir, temos uma árvore com diferentes funções (vamos chamá-la ;)assim, para que fique claro o significado do que foi feito, mesmo para iniciantes ).
E agora vou mostrar um dos exemplos de encontrar as funções necessárias e vinculá-las. E também considere o princípio da pesquisa - verificação da licença. Na lista que se abre, notamos uma classe de licença interessante.
Ao clicar nele, vemos que os campos Email e Serial são utilizados na classe da licença, essa é a primeira pista, pois já sabemos que esses campos são utilizados para ativar o programa. E as strings public string email, public string serial e public stringcheck são apenas valores (relativamente falando).
E o que fazer a seguir em tal situação? Tudo é muito simples, vamos tentar registrar uma licença através da busca do DnSpy e ver quais funções utilizam esta linha.
Após a conclusão da pesquisa, teremos uma lista de funções .
Vejamos o primeiro LoadLicense e, depois disso, o restante das funções ( não estou apenas dizendo isso, olhando um pouco adiante ).
Bem, vou comentar um pouco sobre o que está acontecendo aqui, nesta função. E coisas muito simples acontecem aqui , eu diria, um exemplo de como não proteger seu programa . Bem, agora vou descrever o algoritmo de ações com mais detalhes e em ordem.
Desde o início, o arquivo de licença é verificado se (File.Exists("license")) existe.
Se não houver licença se (this.lic.verification == null) então, por padrão, o modo Demo é ativado .
Há também uma validação dos dados inseridos HTTPRequest httprequest = new HTTPRequest - através do site do desenvolvedor, como sugeri acima . O princípio de funcionamento é o seguinte - Os dados inseridos E-mail e Número de série são enviados para o servidor e se os dados estiverem corretos, está no site do desenvolvedor MOT e aqui PRESTE ATENÇÃO:
é-nos mostrado de forma aberta que o programa está ativado, se os seus dados estiverem corretos, a licença torna-se completa, sem restrições.
this.mode = "full";
this.liclbl.Text = "License activated";
Função completa para sua referência:
private void LoadLicense()
{
if (File.Exists("license"))
{
Stream stream = File.Open("license", FileMode.Open);
BinaryFormatter binaryFormatter = new BinaryFormatter();
this.lic = (license)binaryFormatter.Deserialize(stream);
stream.Close();
this.email.Text = this.lic.email;
this.serial.Text = this.lic.serial;
}
if (this.lic.verification == null)
{
this.mode = "demo";
this.liclbl.Text = "Demo mode";
}
else
{
try
{
HTTPRequest httprequest = new HTTPRequest("http://p-encoder.com/licensing.php", "POST", "email=" + this.email.Text + "&serial=" + this.serial.Text);
if (httprequest.GetResponse() == this.genLicenseVerification(this.email.Text, this.serial.Text))
{
this.lic.verification = this.genLicenseVerification(this.email.Text, this.serial.Text);
this.mode = "full";
this.liclbl.Text = "License activated";
}
else
{
System.Windows.Forms.MessageBox.Show("License verification failed! You have entered incorrect license information or your license has expired.");
this.lic.verification = null;
}
}
catch
{
System.Windows.Forms.MessageBox.Show("Your license cannot be verified, check your internet connection or firewall settings.");
}
}
}
E agora você pode torcer o código da função como quiser. E agora vou mostrar uma maneira de sair dessa situação. A maneira mais simples, pode-se chamar, intervenção mínima no código . ;)Ou seja, o que você acha que acontecerá se a verificação if (this.lic.verification == null) for editada para
que o programa pareça um peixe na água , mesmo que não passe na verificação online . E para isso editamos o parâmetro demo para completo e o modo de demonstração para Licença ativada . Para fazer isso, clique com o botão direito do mouse na função. E selecione Editar instruções IL.
E agora que nossa função mudou assim. Ou seja, na inicialização, mesmo que não haja chave de ativação , o programa já está ativado e já está roxo escuro para verificações do lado do servidor .
private void LoadLicense()
{
if (File.Exists("license"))
{
Stream stream = File.Open("license", FileMode.Open);
BinaryFormatter binaryFormatter = new BinaryFormatter();
this.lic = (license)binaryFormatter.Deserialize(stream);
stream.Close();
this.email.Text = this.lic.email;
this.serial.Text = this.lic.serial;
}
if (this.lic.verification == null)
{
this.mode = "full";
this.liclbl.Text = "License activated";
}
else
{
try
{
HTTPRequest httprequest = new HTTPRequest("http://p-encoder.com/licensing.php", "POST", "email=" + this.email.Text + "&serial=" + this.serial.Text);
if (httprequest.GetResponse() == this.genLicenseVerification(this.email.Text, this.serial.Text))
{
this.lic.verification = this.genLicenseVerification(this.email.Text, this.serial.Text);
this.mode = "full";
this.liclbl.Text = "License activated";
}
else
{
System.Windows.Forms.MessageBox.Show("License verification failed! You have entered incorrect license information or your license has expired.");
this.lic.verification = null;
}
}
catch
{
System.Windows.Forms.MessageBox.Show("Your license cannot be verified, check your internet connection or firewall settings.");
}
}
}
Agora vamos salvar o arquivo com nossas edições e ver o que conseguimos. Clique no item de menu Arquivo e salve tudo.
O que aconteceu conosco é que o programa já iniciou em um formulário ativado e não há mensagens ao carregar mais de 5 arquivos . E agora você pode até carregar 100 arquivos .
Está tudo bem, ótimo e pode ser deixado como está . Mas vamos trazer beleza, digamos assim . O que quero dizer é que, quando você executa o programa, após as alterações acima , não há dados nas informações da licença. O que não é muito bonito
Como sou o autor do artigo, deixe-me inserir os seguintes dados cadastrais: Por exemplo, onde a caixa de correio está Rachada por -EXE- XSS.IS e a chave é xss.is-xss.is-xss.is e aqui está a função de verificação (licença) via Internet você pode removê-la com segurança, cortá-la do código, porque não faz mais sentido . E no final com a enorme função de ativação que dei acima, temos tudo reduzido para 4 linhas . As duas primeiras linhas ativam a licença completa e as duas segundas linhas são os campos E-mail e Chave de ativação que são exibidos nas informações da licença, por beleza , digamos.
Salvamos as alterações novamente e obtemos o resultado, na inicialização o programa também é ativado. E as informações de licença exibem dados de ativação , no nosso caso, meus. Parece lindo, não há restrições .
E no próprio código do programa ( Se você pegá -lo), existem esses pedaços de código e ocorrem exatamente em dois lugares :
if (this.mode == "demo" && this.files.Items.Count + list.Count > 5)
{
this.files.Items.Clear();
int num = list.Count - 5;
if (num > 0)
{
list.RemoveRange(5, list.Count - 5);
}
else
{
list.Clear();
}
System.Windows.MessageBox.Show("Demo mode is limited to analyze and encode only maximum number of 5 files. Buy a license to process more files.");
Você entende o que diz? Tudo é muito simples aqui, se você alterar o número 5 para 50 ou 50.000, o programa poderá processar o máximo de arquivos.
Ou apenas remova essas verificações . O principal aqui é ligar a fantasia , e o exemplo que mostrei acima só te ensina a pensar logicamente.
Bem, agora deixe-me resumir.
Em geral, esses métodos de proteção de software não são chamados de proteção, mas simplesmente uma bela decoração de janela. Além disso, o desenvolvedor do software nem se preocupou em ofuscar o código. Mas isso não mudaria nada, pois tendo conhecimento, o tempo também não o salvará. Se você gostou do artigo, com certeza publicarei mais, compartilharei minha experiência. Bom humor para todos vocês!:frio:
Os arquivos estão anexados ao artigo (embora todas essas ferramentas estejam em fontes oficiais)
Temos uma captura de tela no arquivo: