首页
社区
课程
招聘
[原创]riijj Crackme (1) 的详解
发表于: 2004-11-26 11:57 218412

[原创]riijj Crackme (1) 的详解

2004-11-26 11:57
218412
收藏
免费 7
支持
分享
最新回复 (267)
雪    币: 224
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
101
因为从这里开始起步入门的,没想到回帖时系统提示441天了
时间真快。感谢作者!!
2006-2-9 15:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
102
我也刚学破解,照楼主说得做了
输入 "bp MessageBoxA"
然后点Register, 程序没有停下来
直接出现对话框"Registration fail"
这是怎么回事呢?
2006-2-20 02:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
103
刚刚学习,照楼主说得做了,在命令栏中输入 "bp MessageBoxA"
然后点Register, 出现对话框"Registration fail",注册失败
这是怎么回事呢?
2006-3-15 16:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
104
输入这行后,当程序使用 MessageBoxA ,程序便会断下

现在,我们把程序正常运行 (按 F9),输入一个名字,我在里输入了 riijj ,在序号那行输入了  AAAABBBBCCCC

按下 "Register" ,这时候程序遇到断点,停在以下地方

77E16544 > 55               PUSH EBP   <---停在这里
77E16545   8BEC             MOV EBP,ESP
77E16547   51               PUSH ECX
我不是停在那耶-.-....
我用的是看雪上的新的OllyICE
我停在..
77D504EA...
77D504EA >  8BFF            mov     edi, edi
77D504EC    55              push    ebp
77D504ED    8BEC            mov     ebp, esp
77D504EF    833D BC04D777 0>cmp     dword ptr [77D704BC], 0
77D504F6    74 24           je      short 77D5051C
77D504F8    64:A1 18000000  mov     eax, fs:[18]
77D504FE    6A 00           push    0
77D50500    FF70 24         push    dword ptr [eax+24]
77D50503    68 240BD777     push    77D70B24
77D50508    FF15 C812D177   call    [<&KERNEL32.InterlockedCompareEx>; kernel32.InterlockedCompareExchange
77D5050E    85C0            test    eax, eax
77D50510    75 0A           jnz     short 77D5051C
77D50512    C705 200BD777 0>mov     dword ptr [77D70B20], 1
77D5051C    6A 00           push    0
77D5051E    FF75 14         push    dword ptr [ebp+14]
77D50521    FF75 10         push    dword ptr [ebp+10]
77D50524    FF75 0C         push    dword ptr [ebp+C]
77D50527    FF75 08         push    dword ptr [ebp+8]
77D5052A    E8 2D000000     call    MessageBoxExA
77D5052F    5D              pop     ebp
77D50530    C2 1000         retn    10
而且没有出现regist fail!
注册机直接当掉

2006-3-15 21:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
105
刚刚学习,照楼主说得做了,在命令栏中输入 "bp MessageBoxA"
然后点Register, 出现对话框"Registration fail",注册失败,程序没反应,
到这步该怎样做?试了N次了。
2006-3-16 18:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
106
我是初学者,好多地方不明白,每一个步骤能否详细点?
2006-3-16 18:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
107
我刚刚学习,照楼主说得做了输入 "bp MessageBoxA"按F9,
然后点Register,有时就直接出现对话框"Registration fail"
这是怎么回事呢?
2006-3-21 21:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
108
I get~  3Q LZ

Reg name:wino

Reg key: HMNF
2006-3-23 11:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
109
我在门外探头看,不明白,伤心,还是先得学汇编啊,好可怜.
2006-3-24 11:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
110
我觉得只要把test eax,eax改为xor eax,eax就可以啦
2006-3-25 03:13
0
雪    币: 205
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
111
顶一下 顶一下
2006-3-27 00:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
112
我今年刚刚接触加密和解密,就能看到这么好的帖子,和这么好的论坛。。谢谢大家!!
2006-4-3 11:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
113
我按照你所说得用olly debug调实但刚开始就找不到plugins下的commandline ,只看到了一个commandbar 。对不起,请不要县我凡,我是新手,希望各位能够帮助我。
2006-4-4 11:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
114
按上面说的找到了,但是返回creakme时去找不到77E16569 (retn)那一行,请教各位大虾该怎么板呀。
2006-4-5 10:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
115
77E18098 >  55              push    ebp
77E18099    8BEC            mov     ebp, esp
77E1809B    51              push    ecx
77E1809C    833D 3892E477 0>cmp     dword ptr [77E49238], 0
77E180A3    0F85 940E0100   jnz     77E28F3D
77E180A9    6A 00           push    0
77E180AB    FF75 14         push    dword ptr [ebp+14]
77E180AE    FF75 10         push    dword ptr [ebp+10]
77E180B1    FF75 0C         push    dword ptr [ebp+C]
77E180B4    FF75 08         push    dword ptr [ebp+8]
####77E180B7    E8 04000000     call    MessageBoxExA
77E180BC    C9              leave
77E180BD    C2 1000         retn    10


我用F8执行到加#号的那一行就执行不动了,和源文件对比一下CALL USER32.MESSAGEBOXEXA是不是因为少了USER32,请各位帮忙看一下。
2006-4-5 11:00
0
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
116
wruser
GHPJJA
2006-4-11 10:44
0
雪    币: 217
活跃值: (61)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
117
00401072    /75 1B                        jnz short ncrackme.0040108F

把这句nop掉就爆破了
2006-5-21 17:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
118
我们要返回 crackme 的领空里,有几个方法

1. 不停接 F8 ,一步一步地执行直至程序遇上 retn ,这是返回指令,它会带我们回去
2. 按 Ctrl + F9 ,这样 OD 会不停执行,直至遇到 retn 停下
3. 按一下返回的 retn ,再按 F4 ,程序会执行到光标所在的地方
4. 打开 OD 的 call stack window,看看我们从那里飞来,便设一个断点在那地方,之后 F9 运行

我们按一下 F2 清除断点,再按一下 77E16569 (retn) 那行,按 F4 执行到那里,再按一下 F7 进入 retn。

00401050   . 817C24 08 1101>CMP DWORD PTR SS:[ESP+8],111
00401058   . 75 74          JNZ SHORT ncrackme.004010CE
0040105A   . 8B4424 0C      MOV EAX,DWORD PTR SS:[ESP+C]
0040105E   . 66:3D EA03     CMP AX,3EA
==================
按照以上的操作,总是不能到达这个地方,而是以下地方,请指教(1.10版好象也没有F4这个键,总之查调试菜单是没有)
004010A1   .  33C0          XOR EAX,EAX
004010A3   .  C2 1000       RETN 10
004010A6   >  66:3D EB03    CMP AX,3EB
004010AA   .  75 22         JNZ SHORT ncrackme.004010CE
004010AC   .  A1 C0564000   MOV EAX,DWORD PTR DS:[4056C0]
004010B1   .  85C0          TEST EAX,EAX
004010B3   .  74 19         JE SHORT ncrackme.004010CE
004010B5   .  8B15 B8564000 MOV EDX,DWORD PTR DS:[4056B8]
004010BB   .  6A 00         PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
004010BD   .  68 80504000   PUSH ncrackme.00405080                   ; |Title = "ncrackme"
004010C2   .  68 30504000   PUSH ncrackme.00405030                   ; |Text = "good function, i was cracked"
004010C7   .  52            PUSH EDX                                 ; |hOwner => 00260336 ('Newbie smallsize crackme - v1',class='myWindowClass')
004010C8   .  FF15 C0404000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
004010CE   >  33C0          XOR EAX,EAX
004010D0   .  C2 1000       RETN 10
004010D3      90            NOP
2006-6-7 10:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
119
楼主的偶还没看懂,但楼下有的更简的我终于懂通了!学习中....
2006-6-9 21:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
120
设下一个断点 :
bp MessageBoxA
输入这行后,当程序使用 MessageBoxA ,程序便会断下
现在,我们把程序正常运行 (按 F9),输入一个名字,我在里输入了 riijj ,在序号那行输入了  AAAABBBBCCCC
按下 "Register" ,这时候程序遇到断点,停在以下地方
77E16544 > 55               PUSH EBP   <---停在这里
77E16545   8BEC             MOV EBP,ESP
77E16547   51               PUSH ECX
77E16548   833D 1893E477 00 CMP DWORD PTR DS:[77E49318],0
77E1654F   0F85 EA220100    JNZ USER32.77E2883F
77E16555   6A 00            PUSH 0
77E16557   FF75 14          PUSH DWORD PTR SS:[EBP+14]
77E1655A   FF75 10          PUSH DWORD PTR SS:[EBP+10]
77E1655D   FF75 0C          PUSH DWORD PTR SS:[EBP+C]
77E16560   FF75 08          PUSH DWORD PTR SS:[EBP+8]
77E16563   E8 04000000      CALL USER32.MessageBoxExA
77E16568   C9               LEAVE
77E16569   C2 1000          RETN 10
77E1656C > 55               PUSH EBP
----------------------------------------------
我在这个步骤按f9
是跳到
0040109A  51             push    ecx
0040109B  FF15 C0404000  call    [<&USER32.MessageBoxA>]          004010A1  33C0           xor     eax、eax
004010A3  C2 1000        retn    10
---------------------------------------------------
跟楼主的有出入
这是为什么?
我所使用的OD是1.10版
2006-6-14 11:37
0
雪    币: 151
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
121
我是新手,首先感谢楼主写了这么好的文章。
昨天晚上用OD跟了两遍程序,发现用户名长度一定要大于等于3,但是当超过3的时候,没有找到第四个字符的值是如何计算的,后来分析得出,其实后的几个字符都是无所谓的,只要前三个字符对了,后的都随便添,比如说123456会对应一个注册码,同样的注册码对于123123写是正确的,但是不能为字母只能为数字,可能有些地方我还没搞清楚。
2006-6-23 18:31
0
雪    币: 196
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
122
不好意思,我根据楼主的方法不能跟踪,我的系统是WIN2000ADV

用OD载入后得到的地址与楼主分析不一样,还有就是在第一个断点拦下后也大概代码是一致的,但有点小的区别,这也许能够接受,但按照楼主的说法,当时在USER32领空里,我要跳出那个领空,在下一个RETN处按F4或者用CTRL+F9,结果这样操作后,错误处理已经完成了,无法继续跟踪。

以下是我第一次断下的代码内容:

77DF3D81 >  8BC0           mov eax,eax
77DF3D83    55             push ebp
77DF3D84    8BEC           mov ebp,esp
77DF3D86    51             push ecx
77DF3D87    833D 18D4E477 >cmp dword ptr ds:[77E4D418],0
77DF3D8E    0F85 877D0300  jnz USER32.77E2BB1B
77DF3D94    6A 00          push 0
77DF3D96    FF75 14        push dword ptr ss:[ebp+14]
77DF3D99    FF75 10        push dword ptr ss:[ebp+10]
77DF3D9C    FF75 0C        push dword ptr ss:[ebp+C]
77DF3D9F    FF75 08        push dword ptr ss:[ebp+8]
77DF3DA2    E8 09000000    call USER32.MessageBoxExA
77DF3DA7    C9             leave
77DF3DA8    C2 1000        retn 10
77DF3DAB    90             nop
77DF3DAC    90             nop
77DF3DAD    90             nop
77DF3DAE    90             nop
77DF3DAF    90             nop
77DF3DB0 >  8BC0           mov eax,eax
77DF3DB2    55             push ebp
77DF3DB3    8BEC           mov ebp,esp

当时处在USER32领空中
2006-7-2 11:02
0
雪    币: 196
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
123
以下是有错误的代码段:

00401274  |. FFD6           CALL ESI                          // 再用 GetDlgItemTextA ,得到序号
00401276  |. 0FBE4424 08    MOVSX EAX,BYTE PTR SS:[ESP+8]     // 把名字的第一个位,放入 EAX
0040127B  |. 0FBE4C24 09    MOVSX ECX,BYTE PTR SS:[ESP+9]     // 把名字的第二个位,放入 ECX
00401280  |. 99             CDQ                               // 把 EAX 扩展,成为 EDX:EAX 的 QWORD(64 位长)
00401281  |. F7F9           IDIV ECX                          // 把 EDX:EAX 除以 ECX,余数放在 EDX
00401283  |. 8BCA           MOV ECX,EDX                       
00401285  |. 83C8 FF        OR EAX,FFFFFFFF                   // EAX = 0xffffffff
00401288  |. 0FBE5424 0A    MOVSX EDX,BYTE PTR SS:[ESP+A]     // 把名字的第一个位,放入 EDX
0040128D  |. 0FAFCA         IMUL ECX,EDX                      // 把刚才的余数乘以 EDX
00401290  |. 41             INC ECX                           // ECX 增加 1
00401291  |. 33D2           XOR EDX,EDX                       // EDX = 0
00401293  |. F7F1           DIV ECX                           // 以 0xffffffff 除以 ECX

以下是错误所在:

00401288  |. 0FBE5424 0A    MOVSX EDX,BYTE PTR SS:[ESP+A]     // 把名字的第一个位,放入 EDX

这里的注释应该是把名字的第三位放入EDX
2006-7-2 12:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
124
好。自己试试
2006-7-13 10:06
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
125
我发现下 bpx MessageBoxA 的断点可直接断在程序领空
2006-7-17 14:05
0
游客
登录 | 注册 方可回帖
返回
//