首页
社区
课程
招聘
[原创]CrackMe2详细破解过程
发表于: 2012-5-13 15:23 2957

[原创]CrackMe2详细破解过程

2012-5-13 15:23
2957
本人水平很菜,第一次写破文,若有不对之处,还请各位指出。前几天在论坛里看到有个CrackMe0-9系列,也就去下载了下来练手。
现在做到第三个了,我把这一个的破解过程给大家分享一下,大神们就飘过吧!
打开后,界面如下:

随便输入后按确定,发现没有反应。
直接 用OD载入看看吧,先设个断点看看,Ctrl+G跟踪表达式“GetWindowTextA”,F2设断,

然后按F9跑起来,发现还没有弹出界面就断在了GetWindowTextA处了。不管它,再按次F9,出现界面 后,NAME栏随便写,下面的SERIAL要输入数字,要不然还没进入验证就退出 了。不信可以试试。这里我输入yingzi(长度是六位,后面会解释)  123456,点击确定后,出现断在了刚才的那个点,按Ctrl+F9,几次后停在下图所示:
往上翻,有第一个retn后面设一个断点,重新加载程序。可以看到这个程序没有明显的函数调用!重新加载后,按F9运行,直到出现界面,按上面的输入,来到断点处。然后按F8单步调试。到00401638这一步注意,后面是将一个地址送进EAX,然后将EAX压栈,而且看后面的CALL,很像一个函数的调用,那就在数据窗口中跟随这个地址吧。单步运行,过了CALL过后,发现刚才跟随的地址中的值变了,选中地址中的值,在数据窗口中跟随,刚才输入的字符串就出现 了。 同理,单步运行过下一个CALL,再看ESI中的数据, 数据按正常顺序就是1E240,换成十进制就是123456。到这可以猜想刚才那两个CALL就是GetWindowTextA函数。
继续按几次Crtl+F9,来到这个地方:
发现这是要返回,往上翻,在这个函数的开头处下个断点,并取消之前的断点。

重新加载程序。单击确定之后,程序会断在刚才设的点上。单步运行,一直到

发现调用了地址0018FEC0,并将其传入ECX中,进行一个函数调用。再往下走,过 了CALL之后,看寄存器的值,EAX=002D4920 ASCII “yingzi” ,证明下面要对输入的数进行处理。往下走,到一个循环 这个循环是依次将输入的NAME放入EDX所指向的地方,查看EDX知道是放在栈中。
004015A2  |.  8A4424 16     MOV AL,BYTE PTR SS:[ESP+16]
004015A6  |.  84C0          TEST AL,AL           测试第七个字符是否为空
004015A8  |.  75 50         JNZ SHORT CRECKME_.004015FA               所以NAME是6个字符
004015AA  |.  8A5424 15     MOV DL,BYTE PTR SS:[ESP+15]                     
004015AE  |.  84D2          TEST DL,DL           测试第六个字条是否为空
004015B0  |.  74 48         JE SHORT CRECKME_.004015FA
004015B2  |.  8B43 78       MOV EAX,DWORD PTR DS:[EBX+78]  拿出我们的KEY
004015B5  |.  3D A0860100   CMP EAX,186A0    测试是否大于186A0=100000(十进制)
004015BA  |.  7C 3E         JL SHORT CRECKME_.004015FA
004015BC  |.  0FBE7424 12   MOVSX ESI,BYTE PTR SS:[ESP+12]    “n”
004015C1  |.  0FBE4C24 11   MOVSX ECX,BYTE PTR SS:[ESP+11]     “i”
004015C6  |.  0FBE7C24 14   MOVSX EDI,BYTE PTR SS:[ESP+14]     “z”
004015CB  |.  03CE          ADD ECX,ESI        “ecx=i+n”
004015CD  |.  0FBE7424 10   MOVSX ESI,BYTE PTR SS:[ESP+10]        “y”
004015D2  |.  03CE          ADD ECX,ESI     ECX=ecx+y(前三个字母相加)
004015D4  |.  0FBE7424 13   MOVSX ESI,BYTE PTR SS:[ESP+13]        “g”
004015D9  |.  0FBED2        MOVSX EDX,DL
004015DC  |.  03F7          ADD ESI,EDI
004015DE  |.  03F2          ADD ESI,EDX      后三个字母相加
004015E0  |.  99            CDQ               
004015E1  |.  BF E8030000   MOV EDI,3E8    3E8=1000(十进制)
004015E6  |.  F7FF          IDIV EDI      我们的KEY(123456)/1000
004015E8  |.  3BC8          CMP ECX,EAX  比较商,等于前三个字母相加则进行下一步
004015EA  |.  75 0E         JNZ SHORT CRECKME_.004015FA
004015EC  |.  3BF2          CMP ESI,EDX 比较余数,等于后三个字母相加则进行下一步
004015EE  |.  75 0A         JNZ SHORT CRECKME_.004015FA
004015F0  |.  8B03          MOV EAX,DWORD PTR DS:[EBX]
004015F2  |.  8BCB          MOV ECX,EBX
004015F4  |.  FF90 54010000 CALL DWORD PTR DS:[EAX+154]
004015FA  |>  8B8C24 940000>MOV ECX,DWORD PTR SS:[ESP+94]
00401601  |.  E8 43040000   CALL CRECKME_.00401A49
00401606  |.  5F            POP EDI
00401607  |.  5E            POP ESI
00401608  |.  5B            POP EBX
00401609  |.  8BE5          MOV ESP,EBP
经过以上分析,其实注册的算法很简单,主要是如何找到算法在哪个地方进行。
针对yingzi的KEY如下:
y+i+n=150
150*3E8=52080=336000(十进制)
g+z+i=14A=330(十进制)
于是相加便得到注册KEY:336000+330=336330,单击确定出现这个界面,表示成功

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
2
贴图片太麻烦 了,请大家下载附件,看里面的WORD文档吧。
2012-5-13 15:27
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
3
做一次贴不容易 呀,希望版主加精此贴,我好早点转正!
2012-5-13 15:40
0
游客
登录 | 注册 方可回帖
返回
//