探索黑客技术攻防,实战研究与安全创新

导航菜单

Cracker初级教程之MD5算法破解

MD5算法原理及使用

单向散列算法也称Hash(哈希)算法。是一种将任意长度的信息(如用户名、密码、文件等)压缩到某一固定长度(消息摘要)的函数,这一个过程是单向不可逆的.其最大特点也就在它不可逆上,同时,只要消息任意改变一位,最后产生的散列值都会不同

著名的Hash算法有MD5. SHAI等,MD5就是Ron Rivest设计的单向散列函数,MD是表示消息摘要(Messa ge Digest),它对输入的消息进行运算最后产生128位散列值。

MD5的应用范畴

MD5一般用于数字签名,消息的完整性检测,消息起源认证检测等。MD5被广泛用于加密和解密技术上,在很多操作系统中(或论坛验证系统、邮件严整系统等),用户的密码是以MD5值(或类似的其他算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,从而判断是否是合法登陆。同样,在软件的加密保护中也有很多软件采用了MD5算法。但由于MD5算法为不可逆算法,所以软件一般都只是使用MD5算法作为一个加密的中间步骤,比如对用户做一个MD5变换,结果在进行一个可逆的加密变换。这样一来,做注册机时也只要先用MD5变换进行,然后再用一个逆算法还原就能达到注册的目的了。

MD5判断,跟踪技巧及Crackme实例分析

1.MD5算法的判断

最好的判断方法是通过长期积累的经验来判断,也就是说感觉。比如,在进行MD5运算时都会初始化4个常数:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210,如果看到这些常数,就可以初步判断可能用到MD5算法,另一种方法是使用相关的工具,如图1所示使用PEID0.9插件来分析程序用到的密码算法。

2.Crack分析基本技巧

首先静态分析程序以寻找突破口,一般先查看帮助文档,或者通过工具分析程序基本结构,然后再动态分析,找到关键代码的时候用softice,OIIyDbg等工具来载人程序动态分析,了解程序处理过程,最后深入程序做进一步算法破解。

3.实例分析

本实例是一个用姓名和序列号保护的Crackme,用OllyDbg打开它,AIT+F1打开command line窗口,在其上输入bp GetDlgItemTextA设置断点,然后F9运行,输入用户名:lordor,注册码:654321,点击注册按钮,中断后,按Ctrl+F9返回程序领空。

在“00401C76 CALL crackme.00401AF0”处有一个call,这个call是做什么用的呢?观察其输入数及返回的值(即eax处的值),推算这个call就是用的MD5!我们再用工具来验证以下:

现在这句:00401C7 PUSH EAX,右击寄存器eax,选择:Follow In Dump,查看数据窗口,内容如下:

0012FB58 5D 5E 43 88 8E 43 00 ]*C U*C

OK,使用DAMN Hash Calculator工具来计算这串]*C U*C数据的MD5值,结果为:F11D1C0F58097AD480DB165692EF72E2,在和程序CALL crackme.004LAF0计算的结果比较,发现是一样的!至此,整个注册过程分析完成。