/* * Keygen for the second crackme by vhly[FR] * * Keygen by bredsaal, 2007 * */ import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.security.MessageDigest; import java.util.zip.CRC32; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; public class Keygen extends JFrame implements ActionListener { private static JLabel label1 = new JLabel("Name"); private static JLabel label2 = new JLabel("S/N"); private static JTextField nameField = new JTextField(); private static JTextField digest = new JTextField(); private static JButton generate = new JButton("Generate"); static private int[][] n = new int[][] { {5,40,15}, {165,2}, {10} }; public Keygen() { super("Bredsaal's keygen!"); Container container = getContentPane(); container.setLayout(null); label1.setBounds(n[0][0], n[0][0], n[0][1], n[0][1]/n[1][1]); nameField.setBounds(n[0][0]*n[2][0], n[0][0], n[1][0], n[0][1]/n[1][1]); label2.setBounds(n[0][0], (n[1][0]-n[0][2])/n[0][0], (n[1][1]*n[0][2])+(n[1][1]*n[0][0]), n[1][1]*n[1][1]*n[0][0]); digest.setBounds(n[0][0]*n[0][1]-n[1][0]+n[0][2], n[0][2]*n[1][1], n[2][0]*n[0][2]-n[0][0]*n[0][2]+ ( n[1][1]+n[0][1]/n[2][0] )*n[0][2], n[0][0]+n[0][2]); generate.setBounds(n[2][0]/n[1][1], n[0][2]*n[0][1]/(n[0][0]*n[1][1]), n[1][1]*n[1][0]-n[1][1]*n[0][2]-n[0][0]*n[2][0]-n[0][1], n[0][1]-n[2][0]); generate.addActionListener(this); container.add(label1); container.add(nameField); container.add(label2); container.add(digest); container.add(generate); setDefaultCloseOperation(n[0][2]/n[0][0]); setSize(n[1][1]*n[2][0]*n[0][0]*n[1][1]+n[1][1]*n[0][2]+n[0][0], n[1][0]-n[0][1]+n[0][0]); setLocation(n[0][0]*n[0][1], n[0][0]*n[1][1]*n[2][0]); setVisible(true); } public final void actionPerformed(ActionEvent actionevent) { String name = nameField.getText(); if (name != null && name.length() > (n[0][0]-n[1][1])) { byte[] is = null; try { MessageDigest messagedigest = MessageDigest.getInstance("MD5"); messagedigest.update(("vhly[FR]"+name).getBytes()); is = messagedigest.digest(); } catch (Exception exception) { } CRC32 crc32 = new CRC32(); crc32.update(is); digest.setText(Long.toString(crc32.getValue(),n[0][1]-n[1][1]*n[1][1])); } else { JOptionPane.showMessageDialog(this, "Your name is to short!"); } } public static final void main(String[] strings) { new Keygen(); } }