一个密码学算法的crackme的分析_第1页
一个密码学算法的crackme的分析_第2页
一个密码学算法的crackme的分析_第3页
一个密码学算法的crackme的分析_第4页
一个密码学算法的crackme的分析_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一个密码学算法的crackme的分析 -文/KYO 这次写一篇关于软件运用了经典密码学算法的分析的文章。希望能给初学者带来进步。首先这个程序是happytown的第14个crackme,在看雪已经有人写了注册机,不过分析过程没有写,可能对初学者来说不太好看懂,我这里就做一次详细的分析吧。 首先运行下这个程序,随便填写一个用户名(kyo327)和密码()点击注册,没有任何提示。接着用PEID加载,从抓图可以看到该程序没有加壳,编程语言采用的是VC+,用PEID的插件KANAL分析出它所采用的密码算法有SHA1和RSA,这样我们心里至少先有个底。*这里插播个广告,黑友们请无视,只是为朋友的网站能被

2、搜索引擎收录,多加点流量。返利网,淘你喜欢,淘宝返利,淘宝返现购物。*准备工作做完后,用OD加载,用万能断点下断,程序断在这里。先粗略的用F8走一遍,发现一直走到这里,到了a处,跳转实现了,跳向了失败,这说明只要上面的eax 不等于0就能注册成功。再看这里程序是走到e5 经过了 RETN后才到了 test eax,eax的。上面有个字符串比较函数,我们知道如果两个字符串相等,返回值eax=0,否则返回非0值。在经过了neg eax, sbb eax,eax inc eax后,只有当eax=0才能通过验证。因此只要上面两个字符串相等就可以注册成功,现

3、在看来就只有这一处验证。当然如果把a处的 Je d改为jne d就可以暴了它了。不过我们还是分析算法为主。现在回到开始,一步步F8来到这里可以看到从c 到之间,是用输入的密码的长度做一个循环,来验证密码必须为0-9,a-f,A-F之间的字符,否则会跳向失败。我最开始输入的算是混过去了,呵呵。接着看:紧接着下面有一个call,右键点跟随,发现代码是这样的这里面有5个常数的赋值,分别是 h, EFCDAB89h, 98BADCFEh, h, C3D2E1F0h.这个是SHA1密码加密的标志,这里估计是SHA1的初始化。先不管f8过去。一直走到这里经过了call 后,dd esp+1a0可以看到一串

4、字符,根据上面代码我们知道这是对用户名kyo327做了sha1的加密。我现在通过zobox这个工具验证一下看看是否正确。可以看到kyo327通过 SHA1加密后是D81E2A1A72F5A4F570B0F05BAAA0CFFC5D2D6820,刚好和上面的字符串一样。那么可以肯定我们的猜想是正确的。*这里插播个广告,黑友们请无视,只是为朋友的网站能被搜索引擎收录,多加点流量。返利网,淘你喜欢,淘宝返利,淘宝返现购物。*接下来继续F8走来到这里,看下面这堆代码从b2到c这段代码作用是把上面用SHA1加密的字符数转换为16进制。送到esi,也就是ss:

5、esp+268处。然后下面一句 mov byte ptr ss:esp+278,0,这句代码用0刚好把转换成16进制的密文从中间截断了。那么此时ss:esp+268对应的字符串就变成了D81E2A1A72F5A4F5,对应的16进制就是:44 38 31 45 32 41 31 41 37 32 46 35 41 34 46 35。也就是取了加密后的前8位字符。至此SHA1的加密已经结束。现在看下面的代码。下面是RSA的加密。对于RSA,我先在这里说点基础知识,磨刀不误砍柴功嘛。RSA的整个算法可以描述如下:(1)选取两个大素数p和q(保密);(2)计算n=p*q(公开),r=(p-1(q-1

6、)(保密);(3)随机选取整数e(公开,加密密钥),使得gcd(e,r)=1;(4)计算d(保密,私人密钥),使得ed1(mod r),即d=e-1(mod r);(5)加密:c=me mod n;(6)解密:m=cd mod n.用RSA因为要用到大数的计算,所以它必须要引用miracl库的函数。而针对RSA需要用到这几个函数mirvar(iv),cinstr(x,s),powmod(x,y,z,w),big_to_bytes(max,x,ptr,justify),mirkill(x)mirvar(iv)的作用是初始化一个变量。它只有一个参数。例: x= mirvar(0); 这样就创建了一

7、个变量x=0。cinstr(x,s)的作用是字符串s所对应的整数赋值给大整数x。有两个参数。powmod(x,y,z,w)作用是w=xy mod z。big_to_bytes(max,x,ptr,justify)将一个大整数转x换成一个字节串 (ptr指向那个字节串)。mirkill(x)的作用是 消灭一个大整数并清空内存现在这几个函数作用都已经清楚了。可是在分析反汇编的代码时如何定位这些函数呢?当然ida是可以的,不过有些时候也定位不出来。有一个高人给出了手工定位的方法。我现在拿出来给大家分享。废话我不多说了,只讲主要的:“无论你用何种选项编译MIRACL,mov dword ptr esi

8、+eax*4+20h,xxh,这句代码都会出现在反编译的程序里。而我们就可以根据xxh,再来查表来定位MIRACL函数了。”现在我给出上面这4个函数的xxh:mirvar equ 17h,cinstr equ 4Eh,powmod equ 12h,big_to_bytes equ 8Dh。现在准备工作做完了,继续分析代码吧。往下看发现,call 连续用了4次,并且只有一个参数,参数值每次也都是0,这样我们就不得不怀疑是mirvar(iv)函数,不过还是跟随进去看看。 果然,代码中有一句,mov dword ptr ds:eax+ecx*4+20,17h。这样就可以对上号了,也可以确定是mirv

9、ar函数了。那么下面几句代码作用就是初始化四个变量,并都赋值为0。四个变量分别是esi,ebp,edi,ebx.然后看下面通过上面的方法,可以依次定位出,call 00403ab0为cinstr函数,call 为powmod函数,call 为big_to_bytes函数,call 为mirkill函数。首先第一个b处的cinstr函数把输入的密码(字符串)转化为一个大整数送到edi里面。注意这里查看返回结果应该是dd edi+c。因为这是存放了一个大数的原因,其中edi,edi+4,edi+8可能是三个参数。我猜测字符串有8位则edi=1, 符串有16位则edi=2依次类推,而edi+4代表指

10、向那个大整数的指针。Edi+8 可能是保留参数。接下来把字符串D504EBC98DF20A2F170CD1=n和10001=e转化为大整数。下面call ,这个call 的作用是必须使我输入的密码小于D504EBC98DF20A2F170CD1的大小,否则就跳向失败,当然这也是为了符合RSA算法的需要。紧接着就是powmod(x,y,z,w)和big_to_bytes(max,x,ptr,justify).那么ecx就是加密后的密文。可以这样表达,ecx= 10001 mod D504EBC98DF20A2F170CD1F8到a0处时,通过dd ecx可以得到字符串为:52DC2CDBA03C

11、0DF08AB76ED78D。下面就是收尾工作了。连续用4次mirkill函数,清空变量。最后有一个字符串比较函数。可以从抓图看到,是比较ss:esp+330与ss:esp+268这两个值的。我们知道ss:esp+268是开始分析的SHA1加密用户名后取密文的前8位D81E2A1A72F5A4F5,这是不变的。又因为D81E2A1A72F5A4F5此时是个字符串,转化为16进制为。所以只要RSA加密密码后等于就OK了。现在一切都很明朗了。现在只须解密它就可以得到注册码了。由上面解密公式m=cd mod n得知,m=.d mod D504EBC98DF20A2F170CD1.现在未知数只有d。现在 拿出工具RSA-TOOL来算N。可以得到d为64A5ECDB1EC08E51537F4F96B221A1。现在再用工具RASKIT解密 现在解出来密码是2EFC8735EDD33B306FAEA3485C6CD0B1。好了马上测试一下看是否能注册成功。 通过上图看来我们是通过注册了。知道了算法,写注册机也很简单。因为现在网上sha1,rsa的代码满天飞,随便下载一个然后结合起来就很容易写出注册机了。我向来比较懒,这个工作还是留给大家做吧:)*这里插播个广告,黑友们请无视,只是为朋友的网站能被搜索引擎收录,多加点流量。http:/www.t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论