逆向的步骤主要包含以下几点:
MD系列中有三种加密方式:MD5、MD4、MD2。
关于MD系列中重点讲解的内容就是MD5,不论是多长的字符串均能加密成32位或16位字符。MD5编码是由数字与字母组成,因此看到位数以及字母组成形式的字符可以迅速判断可能是MD5编码。
MD5编码具有不可逆的特点,明文可以被加密成密文,但是无法根据密文以及加密方式反推明文,极大的保证了安全性。但是目前有不少在线解密MD5的网站,它是怎么样做的呢?
其实很简单,它将常见的明文加密成MD5密文的形式,将所得结果保存起来,当需要查询的时候进行匹配即可。其实这种方法就类似于暴力破解。
个人经验之谈
关于MD5的加密,我说一下个人的经验一般来说它会在账号与密码登陆的时候动手脚。(对于一部分网站)
我们在输入密码的时候会采用123456,方便我们记忆。
为什么这样说呢?
因为123456所对应的16位和32位MD5字符串分别是:
49ba59abbe56e057 #16位
e10adc3949ba59abbe56e057f20f883e # 32位
这一点我们需要熟记,123456的16位密文是49开头,而32位123456的密文是e10开头。当在数据包中发现此类信息是即可判断。
另一点就是程序员一般都不会没事找事干。加密函数与加密参数都是放在同一个js文件中,如果实在是找不到也没有关系,可以考虑采用方法栈的跟踪进行查找。
aHR0cHM6Ly93d3cuc29odS5jb20v
本次网站主要是考虑是如何破解登陆上的MD5加密,和开始所写的内容相同,一定要按照逆向的步骤进行操作。
首先先进行抓包操作:
如上图所示,我输入的密码是123456,它也给我通过,只是点击登陆的时候会显示密码或账号错误。有些网站是不会通过123456这种密码的,那么如果不通过的话,就要考虑换一个复杂一点的即可。
大家来看一下,这是不是就是我们要查找的数据包呀?
很明显,当我们看到password的值时是否就能联想到刚刚所描述的加密方式的特点呢?相信各位同学都已经心中有数了吧!
form data里面的参数都是我们可以进行搜索的内容,比如说:userid、password、persistentCookie等等,或者是最上方的url里面的值也有可能是我们要进行全局搜索的内容哦。
为了节省时间,我们就直接对password进行全局搜索。
经过搜索之后,我们从图中可以发现,出现的结果还是蛮多的。但是大家有没有想过一个问题,那就是MD5加密的值是怎么样传递给password的呢?一般来说是不是对象.password = xxx这样的形式来传递的呢?因此搜索方式可以修改为password=:
在password的后面我没有加上空格,因为现在所搜索的内容是没有经过格式化的,如果格式化代码之后,那么在password的后面就必须要加上空格了。(这一点要注意)
从上图可以看出,所搜结果又被过滤掉了很多,只剩下其中一个了,这正合我意。
当进入这个js文件之后,再将password搜索一遍,可以看到password的结果有4个。
接下来便在此行打上断点,来跟踪加密函数。从上面的图中可以发现它是通过utils对象生成的加密参数。
打上断点之后,可以发现这个确实是我们需要查找的内容,经过上面的分析,接下来便要查找utils关键字。
经过搜索发现,在当前的js代码中确实是存在utils关键字,看上去也是一个对象,那这就刚刚好验证了我们刚才所描述的内容了。
在这里也分享一下我扣取js代码的经验:
可以先将JS代码全部复制下来到本地,因为在浏览器中括号无法将成对展现,但是在本地文件中是可以成对出现,方便扣取的时候,不会少了括号或者是代码而报错。
将utils代码扣去下来之后,便将其进行运行出结果即可。
至此,关于MD5的加密逆向就讲解到这里了。
更多精彩内容,期待下次再见!!!