首页
社区
课程
招聘
[原创]一个简单的crackme分析
发表于: 2008-12-1 20:36 8052

[原创]一个简单的crackme分析

2008-12-1 20:36
8052

翻电脑以前的目录,发现刚学crack时的一个crackme分析.
就不让它烂在电脑里了,重新跟了下,简单整理,拿出来晒晒,高手飘过.

peid查壳为upx.使用od dump出exe。

1、bp GetDlgItemTextA下断,中断2次,分别是获得name和regcode

004014F4    33F6            XOR ESI,ESI
004014F6    8975 0C         MOV DWORD PTR SS:[EBP+C],ESI
004014F9    8B3D 4C924000   MOV EDI,DWORD PTR DS:[40924C]
004014FF    3E:8B1D 7092400>MOV EBX,DWORD PTR DS:[409270]            ; <&USER32.GetDlgItemTextA>
00401506    8D8D 98FFFFFF   LEA ECX,DWORD PTR SS:[EBP-68]
0040150C    6A 32           PUSH 32
0040150E    51              PUSH ECX
0040150F    68 EC030000     PUSH 3EC
00401514    57              PUSH EDI
00401515    3E:FF13         CALL DWORD PTR DS:[EBX]
00401518    8945 0C         MOV DWORD PTR SS:[EBP+C],EAX
0040151B    8975 10         MOV DWORD PTR SS:[EBP+10],ESI
0040151E    8B15 4C924000   MOV EDX,DWORD PTR DS:[40924C]
00401524    3E:8B1D 7092400>MOV EBX,DWORD PTR DS:[409270]            ; <&USER32.GetDlgItemTextA>
...
0040153D    8945 10         MOV DWORD PTR SS:[EBP+10],EAX
00401540    8B55 0C         MOV EDX,DWORD PTR SS:[EBP+C]
00401543    83FA 03         CMP EDX,3
00401546    0F8E 3B010000   JLE unpacked.00401687
0040154C    837D 10 13      CMP DWORD PTR SS:[EBP+10],13
00401550    0F85 31010000   JNZ unpacked.00401687
if(namelen<3 ||regcodelen!=0x13) return false;
for (i=0;i<3;i++
    if(regcode[5*i]!='-') return false

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不晓得我能破解不  没信心!
2008-12-1 22:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
"peid查壳为upx.使用od dump出exe"  DUMP出来的EXE无法运行?
2008-12-1 22:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
都来到OEP处了  怎么还DUMP不了?

00406EDE     55                   push ebp
00406EDF     8BEC                 mov ebp,esp
00406EE1     6A FF                push -1
00406EE3     68 78814000          push Crackme2.00408178
00406EE8     68 92704000          push Crackme2.00407092                      ; jmp to MSVCRT._except_handler3
00406EED     64:A1 00000000       mov eax,dword ptr fs:[0]
00406EF3     50                   push eax
00406EF4     64:8925 00000000     mov dword ptr fs:[0],esp
00406EFB     83EC 68              sub esp,68
00406EFE     53                   push ebx
00406EFF     56                   push esi
2008-12-1 23:05
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
UPX脱不掉可真得好好补补了。

不过既然是算法分析,不用脱,穿着分析就行了,UPX又不反调试。
2008-12-1 23:28
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
这个程序倒是挺有创意,它把判断步骤分成好几步,而且只有在前一步正确了才能进入到下一步的验证当中。

不过从IDA的交叉引用中可以快速查找到它对关键函数指针的赋值,立即可以找到每一步的关键代码,不知道这算不算作弊
2008-12-2 00:24
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
分析得很到位,希望看到楼主更多的破文
2008-12-2 02:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我不看,我不看。。。。
2008-12-2 09:12
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
进入go!button处理部分0x4012b0。

我不知道这个是怎么跟出来的.
2008-12-3 00:31
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
10
通过DLGPROC(00401450),用IDA应可以看到。与register button处理部分很近吧。
或用按钮的消息断点。不记得了,你都试下看是否可以。
2008-12-3 08:48
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
11
今年特别流行狼头像,膜拜一个先
2008-12-3 12:06
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
通过按妞的消息断点,返回程序代码的时候断在 00401450处,结合IDA分析知道这是Dialog回调函数,发现里面有个跳表,

loc_4014E3:             ; jumptable 00401497 case 2
call    dword_409258
xor     eax, eax
pop     edi
pop     esi
pop     ebx
mov     esp, ebp
pop     ebp
retn    10h

好像只有这个和那个 GO button有关
在地址 409258处找到了相关函数首地址
2008-12-3 17:12
0
雪    币: 1596
活跃值: (25)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
13
我算出来的
柳州小林
18B4-13C4-1A64-14C4
------------------------------------------------------------------
本人水平有限请问个问题?正确的注册号是从这里算
004015BF    3E:FF11         CALL DWORD PTR DS:[ECX]                  ; 算出来的值为注册码放在椎栈SS:[EBP-34~2D]
跟进去就到了USER32的领空,锁定椎栈再跟进到这里
77D1A867    FF75 F8         PUSH DWORD PTR SS:[EBP-8]
77D1A86A    57              PUSH EDI
77D1A86B    FF75 10         PUSH DWORD PTR SS:[EBP+10]
77D1A86E    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
77D1A871    E8 A9E8FFFF     CALL USER32.77D1911F
77D1A876    83C1 30         ADD ECX,30
77D1A879    83F9 39         CMP ECX,39
77D1A87C    895D F0         MOV DWORD PTR SS:[EBP-10],EBX
77D1A87F    8945 0C         MOV DWORD PTR SS:[EBP+C],EAX
77D1A882    8955 10         MOV DWORD PTR SS:[EBP+10],EDX
77D1A885    77 7D           JA SHORT USER32.77D1A904
77D1A887    8B5D 08         MOV EBX,DWORD PTR SS:[EBP+8]
77D1A88A    FF45 08         INC DWORD PTR SS:[EBP+8]
77D1A88D    FF45 FC         INC DWORD PTR SS:[EBP-4]
77D1A890    880B            MOV BYTE PTR DS:[EBX],CL                 ; 这里是把正确的注册码放入椎栈
77D1A892    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
77D1A895    3B4D 14         CMP ECX,DWORD PTR SS:[EBP+14]
77D1A898    7D 04           JGE SHORT USER32.77D1A89E
77D1A89A    0BC2            OR EAX,EDX
77D1A89C  ^ 75 C9           JNZ SHORT USER32.77D1A867
代码太多,我也才学8088两三天,还请高手解释!谢谢了!
2008-12-26 10:41
0
雪    币: 261
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
学习一下,支持大大们!
2009-1-10 18:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了。
2009-1-12 10:18
0
游客
登录 | 注册 方可回帖
返回
//