学习crack-day03
  CoCRnVPHhERh 2023年11月02日 20 0

程序分析

  1. 是一个简单的输入用户、注册码的注册机 image-20221027223827438.png

    对输入用户名的长度有要求,至少为5。

image-20221027223919041.png

正常输入是没有明确的显示结果的。

  1. 32位

  2. 没有壳

  3. PE程序 image-20221027224023996.png

反汇编分析

这题是由反汇编编写的,在解题的时候既可以用OD去分析,也可以用IDA去分析,两者都很方便。

OD就是理清它的反汇编,着重注意它对输入字符串的操作;

IDA基本就是把算法用C++的方式给你显示出来了,可用很好的看到算法。

  • OD

    1. 爆破

      1. 进入之后直接对字符进行检索,我们可用明确有一个字符数小于5的错误提示信息,通过这个我们就可以找到程序执行处。image-20221027224600327.png
      2. 会发现这里还有个成功的提示信息,那我们更是可以去看成功处的信息。image-20221027224723379.png
      3. 在成功的提示信息前有一个跳转,顺着跳转箭头我们会发现它直接跳到程序结束处,且跳过了成功的提示信息展示,所以我们可以推测这里就是爆破点。尝试用nop填充或者直接用jmp跳转就能爆破了,非常简单。事实也确实如此。
    2. 算法分析

      1. image-20221027225144859.png

      2. 从开头开始,这里有两个GetDlgItemTextA函数,这是C++中的函数用来获取我们输入的用户名和注册码。

      3. 中间的message Box A是字符串过短时的错误提示信息。

      4. 在获取到用户名和密码之后,就是程序的算法判断是否成功了。可以注意到我们获取到的用户名和密码都存放在00403080和00403280里面的。然后它将其放入寄存器eax和ebx中来进行操作,esi中存放的是长度,放入了ecx。

      5. mov dl,byte ptr ds:[eax]  
        #取出eax中一个byte的值,即用户名的第一个字符
        sub dl,cl  
        #将取出的字符和当前字符长度相减
        cmp byte ptr ds:[ebx],dl  
        #相减后的字符和注册码的第一个字符进行比较
        jnz short AD_CM#2.00401174
        #如果不同,直接跳出
        inc eax
        #减一,把比较的字符减去,此时用户名长度减一
        inc ebx
        #密码减一
        loopd short AD_CM#2.00401154
        #loop循环根据ecx
        
  • IDA

image-20221028092930848.png

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
CoCRnVPHhERh
作者其他文章 更多
最新推荐 更多