欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

CrackMe分析3.11.12.28【第二关】

程序员文章站 2022-03-12 15:57:28
  【文章作者】: HcyRcer 【作者邮箱】: 421458119@qq.com 【作者主页】: http://hi.baidu.com/kao4n...

 

【文章作者】: HcyRcer

【作者邮箱】: 421458119@qq.com

【作者主页】: http://hi.baidu.com/kao4ni/home

【作者QQ号】: 421458119

【下载地址】: http://www.2cto.com/Article/201112/115448.html

【加壳方式】: 无

【编写语言】: Borland Delphi 4.0 - 5.0

【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

--------------------------------------------------------------------------------

【详细过程】

  CrackMe的第一关,已经被我们解决掉了!!这次继续干掉 第二关!!一共4关!不知道我能过到第几关!!

  第二关:难度系数3

 


CrackMe分析3.11.12.28【第二关】

 

  和第一关一样,DEDE查  SpeedButton2Click 0044C648 !!第一关既然是Button1Click !!第二关估计就是

  Button2Click 了!!

CrackMe分析3.11.12.28【第二关】

 

  OD 载入后CTRL + G 到达0044C648 后,下F2断点!! 此地址为Button1Click 按钮过程!!

  然后输入NAME:7个1

           COMPANY: 7个2

           serial:7个3

CrackMe分析3.11.12.28【第二关】 

 

点击【CHECK】,OD在0044C648 断下过程!!然后F8单步走,走到0044C66F   call CrackMe_.00403A74时,

 

  发现EAX 显示出了我们输入的NAME,7个1!! 此时程序开始进入 算法阶段!

CrackMe分析3.11.12.28【第二关】

 

全部 流程如下:

 

代码:

0044C648   /.  5>push ebp

0044C649   |.  8>mov ebp,esp

0044C64B   |.  8>add esp,-8

0044C64E   |.  5>push ebx

0044C64F   |.  5>push esi

0044C650   |.  3>xor ecx,ecx

0044C652   |.  8>mov dword ptr ss:[ebp-8],ecx

0044C655   |.  8>mov esi,eax

0044C657   |.  3>xor eax,eax

0044C659   |.  5>push ebp

0044C65A   |.  6>push CrackMe_.0044C783

0044C65F   |.  6>push dword ptr fs:[eax]

0044C662   |.  6>mov dword ptr fs:[eax],esp

0044C665   |.  3>xor eax,eax

0044C667   |.  8>mov dword ptr ss:[ebp-4],eax

0044C66A   |.  A>mov eax,dword ptr ds:[44F880]    //eax为NAME

0044C66F   |.  E>call CrackMe_.00403A74                 返回NAME位数 

0044C674   |.  8>cmp eax,6                                    

0044C677   |.  0>jle CrackMe_.0044C76D                 //NAME位数小于等于6则错

0044C67D   |.  A>mov eax,dword ptr ds:[44F880]

0044C682   |.  E>call CrackMe_.00403A74

0044C687   |.  8>cmp eax,14                             

0044C68A   |.  0>jge CrackMe_.0044C76D                NAME 位数大于等于14则错

0044C690   |.  A>mov eax,dword ptr ds:[44F880]  

0044C695   |.  E>call CrackMe_.00403A74

0044C69A   |.  8>test eax,eax                                  

0044C69C   |.  7>jle short CrackMe_.0044C6B5       如果没有输入NAME,则不进行                     NAME算法计算,而 跳到0044C6B5     进行COMPANY的 计算

0044C69E   |.  B>mov edx,1

0044C6A3   |>  8>/mov ecx,dword ptr ds:[44F880]

0044C6A9   |.  0>|movzx ecx,byte ptr ds:[ecx+edx-1]

0044C6AE   |.  0>|add dword ptr ss:[ebp-4],ecx

0044C6B1   |.  4>|inc edx

0044C6B2   |.  4>|dec eax

0044C6B3   |.^ 7>\jnz short CrackMe_.0044C6A3    以上为NAME的ASCII码值的 和,并把 和 保存到[ebp-4] 中

0044C6B5   |>  A>mov eax,dword ptr ds:[44F884]   取COMPANY 值

0044C6BA   |.  E>call CrackMe_.00403A74              取COMPANY 位数

0044C6BF   |.  8>cmp eax,2

0044C6C2   |.  7>jle short CrackMe_.0044C6DC  位数 小于等于2的话,则跳0044C6DC    

0044C6C4   |.  A>mov eax,dword ptr ds:[44F884]

0044C6C9   |.  E>call CrackMe_.00403A74

0044C6CE   |.  8>cmp eax,8

0044C6D1   |.  7>jge short CrackMe_.0044C6DC 位数 大于等于8的话,则跳0044C6DC

0044C6D3   |.  8>mov eax,dword ptr ss:[ebp-4]

0044C6D6   |.  6>imul eax,eax,2

0044C6D9   |.  8>mov dword ptr ss:[ebp-4],eax 位数在3-7个时,则[ebp-4] * = 2

0044C6DC   |>  6>push CrackMe_.0044C798    入栈字符串:"I Love Cracking and"

0044C6E1   |.  8>lea edx,dword ptr ss:[ebp-8]  缓冲区

0044C6E4   |.  8>mov eax,dword ptr ss:[ebp-4] 取[ebp-4]

0044C6E7   |. E>call CrackMe_.00407754 此函数为:wsprintf([ebp-8],"%d",[ebp-4])

0044C6EC   |.  F>push dword ptr ss:[ebp-8]  入栈 格式化后的字符串,我的为"686 "

0044C6EF   |.  6>push CrackMe_.0044C7B8  入栈 字符串Girls ;)

0044C6F4   |.  B>mov eax,CrackMe_.0044F88C

0044C6F9   |.  B>mov edx,3

0044C6FE   |.  E>call CrackMe_.00403B34 把刚才入栈的3个字符串 连起来为:

I Love Cracking and 364 Girls ;)   //长度20

0044C703   |.  3>xor eax,eax

0044C705   |.  8>mov dword ptr ss:[ebp-4],eax  //[ebp-4]=0

0044C708   |.  A>mov eax,dword ptr ds:[44F888] 取第三个serial的值7个3

0044C70D   |.  E>call CrackMe_.00403A74     取第三个serial的长度

0044C712   |.  8>mov ebx,eax                      把长度放到EBX中

0044C714   |.  A>mov eax,dword ptr ds:[44F88C] 取出字符串I Love Cracking and 364 Girls ;)

0044C719   |.  E>call CrackMe_.00403A74 计算长度 放到EAX

0044C71E   |.  3>cmp ebx,eax            比较serial 与I Love Cracki.....的长度是否相等

0044C720   |.  7>jnz short CrackMe_.0044C76D   不等则错

0044C722   |.  A>mov eax,dword ptr ds:[44F888] 取第三个serial的值7个3

0044C727   |.  E>call CrackMe_.00403A74

0044C72C   |.  8>test eax,eax

0044C72E   |.  7>jle short CrackMe_.0044C757  判断serial 的长度,为0 则跳

0044C730   |.  B>mov edx,1

0044C735   |>  8>/mov ecx,dword ptr ds:[44F888]

0044C73B   |.  0>|movzx ecx,byte ptr ds:[ecx+edx-1]

0044C740   |.  0>|add ecx,dword ptr ss:[ebp-4]

0044C743   |.  8>|mov ebx,dword ptr ds:[44F88C]

0044C749   |.  0>|movzx ebx,byte ptr ds:[ebx+edx-1]

0044C74E   |.  2>|sub ecx,ebx

0044C750   |.  8>|mov dword ptr ss:[ebp-4],ecx

0044C753   |.  4>|inc edx

0044C754   |.  4>|dec eax

0044C755   |.^ 7>\jnz short CrackMe_.0044C735 //从44C735到此为一个循环,循环把

输入的COMPANY 与20位的I Love Cracking and 364 Girls ;)  对应位想减!!

0044C757   |>  8>cmp dword ptr ss:[ebp-4],0

0044C75B   |.  7>jnz short CrackMe_.0044C76D  如果输入的COMPANY值不为

 I Love Cracking and 364 Girls ;)   则错误!! 为则正确!!!!!!!!!!!!

0044C75D   |.  8>mov eax,dword ptr ds:[esi+314]

0044C763   |.  B>mov edx,CrackMe_.0044C7CC               ;  You have found the correct Serial :)

0044C768   |.  E>call CrackMe_.00425854

0044C76D   |>  3>xor eax,eax

0044C76F   |.  5>pop edx

0044C770   |.  5>pop ecx

0044C771   |.  5>pop ecx

0044C772   |.  6>mov dword ptr fs:[eax],edx

0044C775   |.  6>push CrackMe_.0044C78A

0044C77A   |>  8>lea eax,dword ptr ss:[ebp-8]

0044C77D   |.  E>call CrackMe_.004037F8

0044C782   \.  C>retn

  【经验总结】:

注册分2种情况:

第一种。COMPANY的位数 小于等于2个  或 大于等于8时。

NAME:必须是7-13个,NAME的ASCII码 的 和 放到   @1 中

COMPANY:不进行判断

serial:为20为的I Love Cracking and @1 Girls ;)

 

第二种。COMPANY的位数 为3 - 7个时。

 NAME:必须是7-13个,NAME的ASCII码 的 和 放到   @1 中

COMPANY:@1 = @1 *2

serial:为20为的I Love Cracking and @1 Girls ;)

 

推出注册码:

第一种。

NAME:1234567               //ASC码和 为364

COMPANY:随便什么,但位数必须 小于等于2个  或 大于等于8

serial:I Love Cracking and 364 Girls ;)

第二种。

NAME:1234567               //ASC码和 为364

COMPANY:随便什么,但位数必须是   3-7个

serial:I Love Cracking and 728 Girls ;)         // 364 * 2 =728

 

--------------------------------------------------------------------------------

【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

 

                                                       2011年12月28日 13:41:38