Ir para conteúdo

KeyGen em VB.NET/C#


Luciano

Posts Recomendados

Olá galera!

Estou tentando criar um KeyGen para o Crackme em anexo, mas estou esbarrando com limitações do tamanho das variáveis numéricas. Quando o nome escolhido para gerar a chave é muito grande, causa estouro.  Como sou novo em programação, não sei se é falta de conhecimento ou limitação das linguagens de programação que utilizo. Será que alguém aqui no forum poderia fazer a gentileza de criar uma keygen simples em VB.Net ou C# para este crack e disponibilizar o código fonte para eu poder analisar como foi feito.

Desde já agradeço.

 

Esta é a parte do código que faz a verificação a chave:

004011F6 8D35 84624000 lea esi,dword ptr ds:[406284]  
004011FC 33C9 xor ecx,ecx  
004011FE 0FBE06 movsx eax,byte ptr ds:[esi]  
00401201 8BD8 mov ebx,eax  
00401203 2BF2 sub esi,edx  
00401205 C1E0 04 shl eax,4  
00401208 C1EB 05 shr ebx,5  
0040120B 33C3 xor eax,ebx  
0040120D 83C0 26 add eax,26  
00401210 33C1 xor eax,ecx  
00401212 03C8 add ecx,eax  
00401214 46 inc esi  
00401215 803E 00 cmp byte ptr ds:[esi],0  
00401218 75 E4 jne crackme2.4011FE  
0040121A B8 EF0D0C00 mov eax,C0DEF  
0040121F 2BC1 sub eax,ecx  
00401221 0FAFC0 imul eax,eax  
00401224 50 push eax  
00401225 51 push ecx  
00401226 68 E1604000 push crackme2.4060E1 4060E1:"CM2-%lX-%lX"
0040122B 68 B6624000 push crackme2.4062B6  
00401230 E8 9B010000 call <JMP.&wsprintfA>  

crackme2.exe

Link para o comentário
Compartilhar em outros sites

Depois de quase 2 dias, consegui fazer o Keygen.

Todo o problema estava em fazer cálculo do endereço 00401221(imul eax,eax)com valores altos, pois quanto maior a quantidade de caracteres do nome, maior o valor. Quando o nome era pequeno, funcionava normalmente, caso contrário ocorria erros de estouro.

Segue  as tentativas e soluções:

  • Usei variáveis numéricas do tipo Integer. Funcionava com nomes menores.
  • Substituí as variáveis para o tipo Long. Funcionava com nomes até 22 caracteres, mas o resultado do cálculo para "imul eax,eax", retornava valor ligeiramente diferente.
  • Descobri que para calcular o "imul eax,eax", estava usando "eax=eax^2" (eax elevado a 2), visto que em matemática equivale multiplicar um numero por ele mesmo, mas este cálculo retorna sempre um valor do tipo Double, que causava a diferença. Alterei para "eax=eax*eax", que retorna o valor do tipo dos operandos, neste caso do tipo Long .
  • Para ultrapassar a barreira dos 22 caracteres, pois mais que isso causava estouro, substituí as variáveis para o tipo BigInteger(System.Numerics do .Net Framework 4). Limite agora é 49, acima a key gerada não funciona(já está de bom tamanho?).
  • Ultrapassada a barreira dos 22 caracteres, a função "Hex(eax)" passou a dar erro, pois ultrapassava o limite da função quanto o valor de eax era alto.
  • Para substituir a função Hex, depois de googlear, descobri a função  ToString("X"). Agora tudo funcionando??.

 

Abaixo o código-fonte em VB.Net:

Imports System.Numerics

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TxtKey.Text = Keygen(TxtName.Text)
    End Sub


    Private Function Keygen(Name As String) As String
        Dim EAX, EBX, ECX As BigInteger

        EAX = 0 : EBX = 0 : ECX = 0

        For Each C As Char In Name
            EAX = Asc(C)
            EBX = EAX
            EAX = EAX << 4
            EBX = EBX >> 5
            EAX = EAX Xor EBX
            EAX = EAX + &H26
            EAX = EAX Xor ECX
            ECX = ECX + EAX
        Next

        EAX = &HC0DEF
        EAX = EAX - ECX
        EAX = EAX * EAX 
        Keygen = "CM2-" & Hexa(ECX) & "-" & Hexa(EAX)
    End Function


    Private Function Hexa(Valor As BigInteger) As String
        Hexa = Valor.ToString("X")
        If Hexa.Length > 8 Then Hexa = Hexa.Substring(Hexa.Length - 8, 8)
    End Function

End Class
     
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...