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

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

2004-11-26 11:57
218447
收藏
免费 7
支持
分享
最新回复 (267)
雪    币: 72
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
201
请问成功的各位,为什么我按照楼主的操作,总是会弹出失败的窗口,因为楼主说在77E16569   C2 1000          RETN 10处返回,但这时已经经过77E16563   E8 04000000      CALL USER32.MessageBoxExA了,请问成功实现的各位大侠是怎么跳过的?

本人WINDOWS XP2系统,OD 1.10

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
2009-5-22 10:58
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
202
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   ********---->>(((这里应该是名字第三位)))
2009-6-1 20:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
203
受教了,不错的文章 讲的很明白,谢谢楼主
2009-6-3 07:31
0
雪    币: 544
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
204
写得不错,挺详细的!!!
2009-6-3 20:58
0
雪    币: 155
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
205
谢谢楼主分享经验
2009-6-3 21:58
0
雪    币: 350
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
206
已经判断过了,所以会弹出失败窗口, 把失败窗口点掉, 继续往下,就返回了.
2009-6-10 21:38
0
雪    币: 177
活跃值: (278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
207
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
00401062   . 75 42          JNZ SHORT ncrackme.004010A6
00401064   . E8 C7010000    CALL ncrackme.00401230
00401069   . 85C0           TEST EAX,EAX
0040106B   . 6A 00          PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
0040106D   . 68 80504000    PUSH ncrackme.00405080                   ; |Title = "ncrackme"
00401072   . 75 1B          JNZ SHORT ncrackme.0040108F              ; |
00401074   . A1 B8564000    MOV EAX,DWORD PTR DS:[4056B8]            ; |
00401079   . 68 64504000    PUSH ncrackme.00405064                   ; |Text = "Registration successful."
0040107E   . 50             PUSH EAX                                 ; |hOwner => 001C0218 ('Newbie smallsize crackme -

v1',class='myWindowClass')
0040107F   . FF15 C0404000  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
00401085   . E8 A6020000    CALL ncrackme.00401330
0040108A   . 33C0           XOR EAX,EAX
0040108C   . C2 1000        RETN 10
0040108F   > 8B0D B8564000  MOV ECX,DWORD PTR DS:[4056B8]            ; |
00401095   . 68 50504000    PUSH ncrackme.00405050                   ; |Text = "Registration fail."
0040109A   . 51             PUSH ECX                                 ; |hOwner => 001C0218 ('Newbie smallsize crackme -

v1',class='myWindowClass')
0040109B   . FF15 C0404000  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
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

请问最上面几行是什么意思?
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
00401062   . 75 42          JNZ SHORT ncrackme.004010A6
我试过加断点,可是加了之后连输入界面都出不来,好像一直在循环,这是为什么
2009-7-8 16:00
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
208
004012B5  |.  83FE 0F       |cmp     esi, 0F                         ;  0F==15
最郁闷的就是这句,写了注册机怎么测试都不对搞了半天把0F当16了。。

附上注册机:
ps:(代码很乱)有翻译汇编的嫌疑,懒得改啦

#include <stdio.h>
#include <string.h>

long count(long * stranger)
{
        long k_stranger;
        (*stranger)=(*stranger)*0x343FD+0x269EC3;
        k_stranger=(*stranger);
        k_stranger = (k_stranger>>16)&0x7FFF;
        return k_stranger;
}

int keyGen(char * username)
{
        int a = 0;
        unsigned int b=0;
        char Registercode[20]={0};
       
        if(strlen(username)<3)
                printf("用户名需要大于3位");
        long stranger = 0xFFFFFFFF/((username[0]%username[1])*username[2]+1);

        while(a <15)
        {
           count(&stranger);
                a++;
        }
       
        while(b != strlen(username))
        {
                long x ,y;
                x = username >> 5;
                y=x+x*4;
                x=y*8+x;
                x=x+x*2;
                if(x>0)
                {
                        int c=x;
                        while(c)
                        {
                                x=count(&stranger);
                                c--;
                        }
                        x=count(&stranger);
                        x=x%0x1A +0x41;
                        Registercode = char(x) ;
               
                        b++;
                }
        }

        printf("\n%s",Registercode);
               
        return 0;       
               
}

int main(void)
{
        char username[20] ={0};
        printf("please Input UserName:\n");
        scanf("%s",username);
       
        keyGen(username);
        return 0;
}
2009-7-15 21:53
0
雪    币: 244
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
209
学习。一直没学算法,老是爆破,水平差,木有办法
2009-7-24 00:18
0
雪    币: 146
活跃值: (33)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
210
谢谢楼主,这是我写出的第一个注册机,很有意义,纪念一下:

逆向后源码:

DWORD Fun_()
{
        g_Data *= 0x343fd;
        g_Data += 0x269ec3;
        DWORD Temp = g_Data / 65536;
        Temp &= 0x7FFF;
        return Temp;
}

void CRegisterKeyDlg::OnBtnRegiser()
{
        // TODO: Add your control notification handler code here
        char Name[10],Psw[16],InputPsw[16] = "123456789";
       
        GetDlgItemText(IDC_EDIT_NAME, Name, 10);
        DWORD TempData = (*Name) % *(Name + 1);
        TempData = TempData * *(Name + 2) +1;
        g_Data = 0XFFFFFFFF / TempData;
        int index = 0;
        do
        {
                Psw[index] = Fun_() % 0x1a + 0x41;
                index++;
        }while(index < 0x0f);
        DWORD Sum=0;
        if(strlen(Name) != 0)
        {
                index = 0;
                do
                {
                        DWORD Count = 0x7b * (*(Name + index) / 0x20);
                        for(;Count > 0; Count--)
                        {
                                Fun_();
                        }
                        DWORD Temp = Fun_() % 0x1a + 0x41;
                        Psw[index] = Temp;
                        Temp -= *(InputPsw + index);
                        Sum += Temp;
                        index++;
                }while( index < strlen(Name));
        }
        Psw[15] = NULL;
        SetDlgItemText(IDC_EDIT_PSW, Psw);
}
2009-7-31 20:55
0
雪    币: 224
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
211
LZ幸苦了。。。
2009-8-13 15:56
0
雪    币: 289
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
212
难道临时的用户也可以到这里发帖了?看来一下午看会了,不过换种就不一定了,继续努力。
2009-8-13 17:37
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
213
感谢,又有一篇新手教程啦
2009-8-24 22:39
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
214
谢谢啦,这篇文章很适合像偶这样刚学破解的菜鸟。
2009-8-25 15:31
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
215
谢谢搂主,很详细,正在努力学习中
2009-9-2 22:22
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
216
支持LZ这种解说,很详细,我们这些菜鸟要好好学习!
2009-9-19 22:22
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
217
很好! 正适合现在的我
2009-10-24 10:18
0
雪    币: 324
活跃值: (26)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
218
2009-10-28 21:48
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
219
学习了 ,谢谢分享
2009-11-20 20:36
0
雪    币: 218
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
220
我正在学习。。。希望能过菜鸟这一关,呵呵,慢慢来吧!
2009-12-1 12:04
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
221
很详细的教程,学习了。多谢分享。
2009-12-1 22:14
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
222
老帖了,依然是好贴~~
2009-12-8 12:34
0
雪    币: 414
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
223
留个位置~哪天回来继续学习~
2009-12-30 19:03
0
雪    币: 34
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
224
我发现我还是不会看算法,转来转去 看的我头都晕了  还是爆破好啊
2010-1-6 17:03
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
225
不错,,支持。。。
2010-1-6 21:40
0
游客
登录 | 注册 方可回帖
返回
//