[CrackMe]160个CrackMe之001

吾爱破解专题汇总:【反汇编练习】160个CrackME索引目录1~160建议收藏备用

一、Serial/Name 之 暴力破解

1. 熟悉界面:很常规的一个界面,输入完账号密码之后会进行验证。

 2. ollbdg调试 - 如何下第一个断点

  1)问题1:因为这不像编程,编程时这里会存在一个main函数入口,但这个根本没有,所以如何下第一个程序断点来分析就非常重要。

    答案:利用函数调用栈来找到调用MessageBoxA的地址.这时肯定存在栈顺序,xxa->xxb->MessageBox->kernel32.dll!xx->xx,我们通过MessageBox作为一个浮标来确定好其他位置。

  2)问题2:但这里又存在另外一个问题,我们如何确定代码执行的位置(exe),是xxa、xxb还是xxc呢?

    答案:通过模块调用查看exe的起始地址,若在xxa、xxb、xxc中存在一个与之相近的值,则说明该call就是调用的。

  3)分析流程:

    1>在显示"sorry,The serial is incorect"窗口暂停,在olldbg中点击 "K" 按钮,查看函数call的顺序。

    

      很遗憾,并没有找到我们所期待的MessagBox函数,但别灰心,我们利用栈再继续分析。

    2>如图,栈拓展顺序由高向低,我们找栈内部的应该向下找。找到最下边的显示调用。

     

    3>在该点处下断点,然后继续执行,再弹出一次错误提示框,再这里断下。(这里为了分析栈更省力气,当然可以直接从4>开始找)

    

     4>olldbg中右下角栈,其中返回地址都以红色部分标记出来,找到与exe模块相似的地址,按回车(follow in dump)看其代码段。

    

    5>可以看到上面出现了我们熟悉的字符串(注意:虽然调用的还是exe函数,但是结果已经出了,所以运算绝对不可能出现在函数中!)

    

    至此,我们算是正确的下第一个断点了!

3.分析代码逻辑

  所谓分析逻辑,其实这里判断 if else 语句,反应在汇编中就是各种jmp,我们只需要找到算法关键的jmp即可。

  而这类关键jmp其实紧跟在结果输出语句中。

  

  仔细观察上述汇编结构,显然存在两点:

  1> jmp 语句跳过判断错误的,则上面那句明显是判断正确的。

  2> 两个都调用 bur.0042A170,这个函数明显是显示结果的。

  因此,基于上面分析,我们可以推断出其编写的是下列代码:

    if(正确)show(正确xxx);

    else show(错误xxx)

4. 找到算法call

   

    如上图,经过分析,我们发现其 0x42FB03c处,调用一个call之后紧接着jmp输出错误,很明显if(func()){show(错误)},则可以是算法验证函数 Acid_bur.004039FC

    这样,我们很容易使用"爆破法"来破解这个软件了。


Serial/Name 之 算法分析

  显然,单纯的找到调用,使用爆破法,有点太低级了,我们深入上次找到的这个 算法验证函数 Acid_bur.004039FC 来分析其算法,写出注册机。

   未完待续···

    

    

      

    

猜你喜欢

转载自www.cnblogs.com/onetrainee/p/11695823.html