CrackMe分析2.11.12.28【第一关】
【文章标题】: CrackMe分析2.11.12.28【第一关】
【文章作者】: HcyRcer
【作者邮箱】: 421458119@qq.com
【作者主页】: http://hi.baidu.com/kao4ni/home
【作者QQ号】: 421458119
【编写语言】: Borland Delphi 4.0 - 5.0
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
此 CrackMe 共有4 关!!!暂时只解决第一关,也就是最简单的!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PEID查壳:Borland Delphi 4.0 - 5.0
既然是 Delphil写的,那我们就按常理来, 用DEDE查 按钮过程!!
DEDE打开后,来到【过程】 看到 很多很多过程!!到底是哪个才是我们要找的 按钮过程呢?
看到了有个 SpeedButton1Click 0044C3A4 事件 !!里面有个 Button1字串 ,并且 我们看到 CrackMe 的第一个按钮!
估计就是他了 !把这个地址复制下来!!!
打开OD,运行程序后,CTRL + G 来到 0044C3A4 !!然后 F2 ! 对该地址下断!!
输入 12345 点击 Check后!! OD成功断在 0044C3A4 地址!!说明我们的 按钮过程找对了!!
单步然后 F8开始分析 按钮过程!跟踪了 十几次,
来到了 第二个跳转
0044C3D5 call CrackMe_.00403A74
0044C3DA cmp eax,0C
0044C3DD jnz CrackMe_.0044C536
发现跳转已经实现,我们当跳了之后!!发现程序就是提示错误 !!我们可以知道 此跳转 是判断 正确的!!
我们 就进入上面 那个判断正确的 CALL里看看 (0044C3D5 call CrackMe_.00403A74)!刚进入CALL时,
发现 右侧的 EAX寄存器显示的 正是我们输入的 12345
发现这个CALL 只有 短短4行!
~~~~~~~~~~~~~~~~~~~~~~~~~~0044C3D5 call CrackMe_.00403A74~~~~~~~~~~~~~~~~~~~~
00403A74 test eax,eax //EAX此时显示 12345
00403A76 je short CrackMe_.00403A7B 判断是否输入
00403A78 mov eax,dword ptr ds:[eax-4] //EAX被 赋值为 输入的个数(5个)
00403A7B retn
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
再返回到上面看,可以推断
然后看到下面 一大片 一模一样的东西 ,我们开始 F8 单步跟
0044C3D5 |. E>call CrackMe_.00403A74 //EAX被 赋值为 输入的个数(5个)
0044C3DA |. 8>cmp eax,0C //判断个数是否为12位
0044C3DD |. 0>jnz CrackMe_.0044C536
0044C3E3 |. 8>lea edx,dword ptr ss:[ebp-4] //开始1
0044C3E6 |. 8>mov eax,dword ptr ds:[ebx+2E8]
0044C3EC |. E>call CrackMe_.00425824
0044C3F1 |. 8>mov eax,dword ptr ss:[ebp-4]
0044C3F4 |. 8>cmp byte ptr ds:[eax],43
0044C3F7 |. 0>jnz CrackMe_.0044C524 //结束1
0044C3FD |. 8>lea edx,dword ptr ss:[ebp-8] //开始2
0044C400 |. 8>mov eax,dword ptr ds:[ebx+2E8]
0044C406 |. E>call CrackMe_.00425824
0044C40B |. 8>mov eax,dword ptr ss:[ebp-8]
0044C40E |. 8>cmp byte ptr ds:[eax+3],6F
0044C412 |. 0>jnz CrackMe_.0044C524 //结束2
0044C418 |. 8>lea edx,dword ptr ss:[ebp-C] //开始3
0044C41B |. 8>mov eax,dword ptr ds:[ebx+2E8]
0044C421 |. E>call CrackMe_.00425824
0044C426 |. 8>mov eax,dword ptr ss:[ebp-C]
0044C429 |. 8>cmp byte ptr ds:[eax+8],6F
0044C42D |. 0>jnz CrackMe_.0044C524 //结束3
............................等 很多
发现没到 类似 cmp byte ptr ds:[eax],43 !在OD右侧的寄存器中就会显示 EAX为我们输入的 12345! 而且
每当 CMP之后 !会跟着一个 jnz CrackMe_.0044C524 都跳向了同一个地址 0044C524
观察发现 0044C524 显示 WRONG PASSWORD!!!
我们可以知道 原来 由很多的 CMP .. 和 jnz CrackMe_.0044C524
组成了 判断码的部分!!! 这个cmp byte ptr ds:[eax+常数],常数
的意思是 判断指定位 是否为指定值!!!如下
0044C3D5 |. E>call CrackMe_.00403A74 //EAX被 赋值为 输入的个数(5个)
0044C3DA |. 8>cmp eax,0C //判断个数是否为12位
0044C3DD |. 0>jnz CrackMe_.0044C536
0044C3E3 |. 8>lea edx,dword ptr ss:[ebp-4]
0044C3E6 |. 8>mov eax,dword ptr ds:[ebx+2E8]
0044C3EC |. E>call CrackMe_.00425824
0044C3F1 |. 8>mov eax,dword ptr ss:[ebp-4]
0044C3F4 |. 8>cmp byte ptr ds:[eax],43 第一位是否为43
0044C3F7 |. 0>jnz CrackMe_.0044C524
0044C3FD |. 8>lea edx,dword ptr ss:[ebp-8]
0044C400 |. 8>mov eax,dword ptr ds:[ebx+2E8]
0044C406 |. E>call CrackMe_.00425824
0044C40B |. 8>mov eax,dword ptr ss:[ebp-8]
0044C40E |. 8>cmp byte ptr ds:[eax+3],6F 第4位是否为6F
0044C412 |. 0>jnz CrackMe_.0044C524
0044C418 |. 8>lea edx,dword ptr ss:[ebp-C]
0044C41B |. 8>mov eax,dword ptr ds:[ebx+2E8]
0044C421 |. E>call CrackMe_.00425824
0044C426 |. 8>mov eax,dword ptr ss:[ebp-C]
0044C429 |. 8>cmp byte ptr ds:[eax+8],6F 第9位是否为6F
0044C42D |. 0>jnz CrackMe_.0044C524
....
一直F8 跟,遇到跳就 不让它跳,直至成功!!
发现没什么算法!!!就是把输入的 每位与 常量比对!!
如下: 必须输入12位
12位 必须为
1 43 //第一位必须为43
2 6c //第二位必须为6C
3 6E //第三位必须....
4 6F
5 20
6 69
7 67
8 75
9 6F
10 6E
11 52
12 6E
~~~~~~~~~~
12位连起来 436C6E6F206967756F6E526E
我们把他到我 我做的 字符串转换软件如下:
发现ASCII码为:Clno iguonRn
我们打开软件 输入 Clno iguonRn !!点击注册,提示成功!!!
到此为止 !破解成功!!
--------------------------------------------------------------------------------
【经验总结】
没有算法!!
注册死码为 12位,必须是:Clno iguonRn
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2011年12月28日 9:22:01
下一篇: Python 计算每个月天数(代码教程)