首页
社区
课程
招聘
[旧帖] [原创]密码算法的识别(求邀请码) 0.00雪花
发表于: 2012-9-29 16:43 1827

[旧帖] [原创]密码算法的识别(求邀请码) 0.00雪花

2012-9-29 16:43
1827
本人最近对密码比较感兴趣,所以想到可不可以自己写程序来自动的识别密码算法。说做就做,首先拿简单的算法开刀,分别是SHA-1,MD5和AES.这里我一共选取了13款软件进行分析,并得到了分析结果。

[*]SHA-1的识别
SHA-1是一种主流的散列加密算法,其设计是基于和MD4相同的原理,并且模仿了该算法。消息分组和填充方式与MD5相同。
类似于MD5,SHA-1也使用了一系列的常数K(0),K(1),…,K(79)。以十六进制形式表示如下:

SHA-1产生160位的消息摘要,在对消息进行处理之前,初始化散列值H先用5个32位双字初始化,这5个双字以十六进制形式表示如下:

在分析算法时,常数及都可以被用来识别SHA-1算法。其中,常数是最为主要的特征,比较明显;常数也可以用来识别,但是由于散列算法中常常会用到这几个常数,所以特征性也就下降了,可以将它作为辅助识别特征。
在实际的算法编写过程中,SHA-1常常被划分来3个部分来完成,分别是:
sha1_init
sha1_process
sha1_done
所以,在实际查找密码算法时也应该从这三个部分入手。sha1_init和sha1_process算法的特征都是非常明显的。其中,初始化函数sha1_init中存在常数H,这是一个简单的赋值的过程,利用mov指令实现,一般是将这几个常数直接移到一个数组中。但是由于多数的hash算法中都有可能用到这几个初始化函数,所以不能作为识别的主要特征,我们可以将它作为一个辅助特征。

SHA-1算法最主要的特征就是常数K,这4个常数会在算法中调用20次,完成一次加运算,所以在这里是存在一定的变数的。sha1_process一般有两种,一种是小代码模式,一种是大代码模式,这两种模式造成了代码的不同:大代码模式表现为一个整体,整个代码呈长条状,所以每个常数出现20次,大多数的软件都使用了这种算法;小代码模式形成的代码表现为4个循环,所以每个常数出现一次,同时一般利用jnz形成一个20轮的循环,这几个软件中只有福星阅读器采用了此方法。每一次循环的代码大致如下:

根据代码的不同,整个序列长度从10到20不等,但是有4个移位运算是少不了的,这点可以帮助我们准确的确定是否是SHA-1。另外,对于这4个常数做的是一个加运算,所以在实际中既可以用add指令实现,也可以利用lea指令实现;同时在使用lea指令时,会出现减常数相应的补码的情况,在实际识别的过程中要注意。

sha1_done一般是一个简单的数据导出的过程,没有什么明显的特征,这里不过多的讨论。

[*]MD5的识别
MD5算法对输入的任意长度的消息进行运算,产生一个128位的消息摘要。
与SHA-1类似,MD5使用了4个初始化变量:

在算法主体部分,以512位分组为单位处理消息,这里用到4个辅助函数,每个都是以3个32位双字作为输入,输出一个32位双字。在这里用到了64个加法常数,等于4294967296乘以abs(sin(i))所得结果的整数部分。
与SHA-1类似,同样可以利用初始化常数和64个正弦值作为特征,其中64个正弦值是主要特征,初始化函数可以作为辅助特征。
在实际算法编写过程中,MD5也常常被划分为3个部分来实现:
Md5_init
Md5_process
Md5_done
和SHA-1类似,Md5_init是一个简单的赋值的过程,利用mov指令实现,可以作为识别的辅助特征。

MD5算法的主要特征应该是64个常量正弦值来确定是否是MD5算法,我们可以选用其中的一些作为特征。与SHA-1类似,Md5_process同样有两种模式,大代码模式形成的代码呈长条状;小代码模式形成的代码是4个循环,这种情况下会存在一个64正弦值的数组,在这些软件中没有利用小代码模式的算法。


相邻两个正弦值之间的距离不超过10,还有一个移位操作也可以辅助我们定位。与SHA-1类似,对于这个加法也同样有两种实现方式,在实际识别时要注意。

[*]AES的识别
AES算法,高级加密标准,是一种对称加密算法。
AES最标致的特征是它的S盒,因此我们可以利用S盒的调用关系来发现和识别AES的主体函数,进而发现密钥初始化函数等。这里有一个主要的问题就是由于IDA分析能力有限,所以对于字节和32位分析能力不足,这对S盒的识别产生一定的影响;如果在文件中直接查找S盒部分可以直接找到,但是没有办法进一步操作。所以在实际操作时,我们需要细化对S盒的查找细节,力求准确而快速的判定S盒。还有一种情况是没有S盒的,例如rar.exe,在这种情况下S盒是动态生成的,所以有一个动态生成S盒的函数sub_40DE50。在这个函数中,整个函数呈阶梯状,一级连着一级,整个函数指令用到了大量的mov byte_44A074[eax], dl类似的指令。
在AES主体部分,整个过程呈长条状,主要的特点是用到了大量的异或运算,例如

如果可以采用正则表达式等模糊匹配方法进行匹配的话,可能可以通过这个特点来确认。

PS:7-zip软件的密码算法在7z.dll中,给查找带来了不少的麻烦;
Keepass采用了静态链接的方法,所以给算法的查找带来了很大的麻烦;在hash方面,他采用了sha2算法,所以没有sha-1以及md5.
Winrar中存在AES算法,但是由于没有S盒,所以静态查找存在不少的困难,暂时还没有找到很明显的特征。

我就简单分析到这里,刚刚开始做这方面的工作,比较菜鸟,希望各位大牛不吝赐教。不是正式会员非常不方便啊,没办法与各位大牛进行讨论。哪位大牛看得起小弟,赐予邀请码一枚,本人感激不尽。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 67
活跃值: (75)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
给自己壮个胆,求大牛给邀请码啊!!!
2012-9-29 16:45
0
雪    币: 64
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
我把CC386特徵碼弄出來了
http://bbs.pediy.com/showthread.php?t=156560
連個關注也沒有……
2012-9-29 17:09
0
雪    币: 67
活跃值: (75)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=walkingsk;1105245]我把CC386特徵碼弄出來了
http://bbs.pediy.com/showthread.php?t=156560
連個關注也沒有……[/QUOTE]

关注你一个!
2012-9-29 17:14
0
游客
登录 | 注册 方可回帖
返回
//