首页
社区
课程
招聘
[原创]新手向,首个CrackMe
发表于: 2009-4-16 00:23 7921

[原创]新手向,首个CrackMe

2009-4-16 00:23
7921
貌似还没有发过主题贴,最近写了个CrackMe,请大家提点提点。
没有壳没有anti-debug没有自检验(因为还不会 )
成功注册后有一个提示窗口和左下角会显示你的注册名

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 261
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
补充,这是我的
dzhsurf
[RGGU=M@<=GE<11?e7hde1/dYY)O_RNOYWNCCQ9I<8
设计加密算法真的真的很困难,现在这个,有些user是不存在对应的code的 = =
2009-4-16 00:25
0
雪    币: 319
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
算法太长了,俺看着看着头晕了,先爆一个。。。。。。。。
上传的附件:
  • 1.jpg (10.47kb,158次下载)
2009-4-16 08:34
0
雪    币: 261
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
左下角名字不对哦~貌似还有两个关键跳。
2009-4-16 23:13
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
5
算法搞得很繁复,其实一化简,也就很简单了
上传的附件:
2009-4-17 10:15
0
雪    币: 319
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
00401588   .  8B15 44204100 mov     edx, dword ptr [412044]
0040158E   .  83C4 08       add     esp, 8                               ;  在栈中抛去空闲空间,大小为8字节(如EAX为双字,4字节)
00401591   .  8BF8          mov     edi, eax                             ;  EDI=0x3B1EC8
00401593   .  56            push    esi                                  ; /0x7进栈
00401594   .  57            push    edi                                  ; |0x3B1EC8进栈
00401595   .  52            push    edx                                  ; |0x1505DC进栈
00401596   .  897C24 24     mov     dword ptr [esp+24], edi              ; |
0040159A   .  FF15 D4D04000 call    dword ptr [<&USER32.GetWindowTextA>] ; \GetWindowTextA
004015A0   .  33C0          xor     eax, eax                             ;  EAX=0,CF=0   //自身xor运算结果为0,CF=0
004015A2   .  85F6          test    esi, esi                             ;  ZF=0   //0x7&0x7=0x7
004015A4   .  7E 11         jle     short 004015B7                       ;  不跳    //ZF=0;当比较结果是小于或等于时,才跳
004015A6   >  8A4C24 1C     mov     cl, byte ptr [esp+1C]
004015AA   .  8A1C38        mov     bl, byte ptr [eax+edi]
004015AD   .  02D9          add     bl, cl                               ;  BL=0xFB   //BL=0x6B+0x90
004015AF   .  881C38        mov     byte ptr [eax+edi], bl
004015B2   .  40            inc     eax                                  ;  EAX=(0x0)++
004015B3   .  3BC6          cmp     eax, esi                             ;  ZF=0   //EAX=0x1,ESI=0x7
004015B5   .^ 7C EF         jl      short 004015A6                       ;  跳到004015A6  //ZF=0,SF!=OF
004015B7   >  55            push    ebp                                  ;  0x3B0800进栈
004015B8   .  E8 941F0000   call    00403551                             ;  程序内部调用函数 403551
004015BD   .  8B5424 34     mov     edx, dword ptr [esp+34]
004015C1   .  8B4424 30     mov     eax, dword ptr [esp+30]
004015C5   .  83C4 04       add     esp, 4                               ;  在栈中抛去空闲空间,大小为4字节(如EAX为双字,4字节)
004015C8   .  8BEA          mov     ebp, edx                             ;  EBP=0x3B1F98
004015CA   >  8A18          mov     bl, byte ptr [eax]
004015CC   .  8ACB          mov     cl, bl                               ;  CL=0x4E
004015CE   .  3A5D 00       cmp     bl, byte ptr [ebp]
004015D1   .  75 1C         jnz     short 004015EF                       ;  跳到004015EF  //ZF=0
004015D3   .  84C9          test    cl, cl
004015D5   .  74 14         je      short 004015EB
004015D7   .  8A58 01       mov     bl, byte ptr [eax+1]
004015DA   .  8ACB          mov     cl, bl
004015DC   .  3A5D 01       cmp     bl, byte ptr [ebp+1]
004015DF   .  75 0E         jnz     short 004015EF
004015E1   .  83C0 02       add     eax, 2
004015E4   .  83C5 02       add     ebp, 2
004015E7   .  84C9          test    cl, cl
004015E9   .^ 75 DF         jnz     short 004015CA
004015EB   >  33C0          xor     eax, eax
004015ED   .  EB 05         jmp     short 004015F4
004015EF   >  1BC0          sbb     eax, eax                             ;  EAX=0x0   //EAX=EAX-EAX-CF
004015F1   .  83D8 FF       sbb     eax, -1                              ;  EAX=0x1; //EAX=EAX+1-CF
004015F4   >  85C0          test    eax, eax                             ;  ZF=0   //0x1&0x1=0x1
004015F6      75 47         jnz     short 0040163F                       ;  跳到0040163F  //ZF=0
004015F8   .  52            push    edx
004015F9   .  E8 62FBFFFF   call    00401160
004015FE   .  83C4 04       add     esp, 4
00401601   .  33C9          xor     ecx, ecx
00401603   .  85F6          test    esi, esi
00401605      7E 0D         jle     short 00401614
00401607   >  8A1439        mov     dl, byte ptr [ecx+edi]
0040160A   .  2AD0          sub     dl, al
0040160C   .  881439        mov     byte ptr [ecx+edi], dl
0040160F   .  41            inc     ecx
00401610   .  3BCE          cmp     ecx, esi
00401612   .^ 7C F3         jl      short 00401607
00401614   >  8B15 3C204100 mov     edx, dword ptr [41203C]
0040161A   .  57            push    edi                                  ; /Text
0040161B   .  52            push    edx                                  ; |hWnd => 001A069C ('==============',class='Static',parent=004604D8)
0040161C   .  FF15 D8D04000 call    dword ptr [<&USER32.SetWindowTextA>] ; \SetWindowTextA
00401622   .  6A 00         push    0                                    ; /Style = MB_OK|MB_APPLMODAL
00401624   .  68 B8F04000   push    0040F0B8                             ; |tips
00401629   .  8B4424 2C     mov     eax, dword ptr [esp+2C]              ; |
0040162D   .  68 ACF04000   push    0040F0AC                             ; |good job!
00401632   .  50            push    eax                                  ; |hOwner
00401633   .  FF15 DCD04000 call    dword ptr [<&USER32.MessageBoxA>]    ; \MessageBoxA

真的很头晕。。。。。。。。
2009-4-17 11:48
0
雪    币: 261
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
楼上的都是2005年的老会员了,难倒还不懂什么是越爆越衰的道理吗?每次都以爆破为荣,在编程高手眼里你是最好整的,不怕你不暴一暴你的机子就马上挂掉,现在很多外挂都是这样的。暗庄特多,爆破只有一个关键点的地方。找去来不用3分钟,有意思吗?
2009-4-17 12:00
0
雪    币: 319
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
我也觉得没意思,关键是没人指导,虽然学了那么久了,但还是云里雾里,问人家人家也不回答,很郁闷。。。。。。。。。。。

虽然是2005年注册的,但那时候啥都看不懂,真正学习这个从去年年底才开始看汇编视频。
2009-4-17 12:40
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大侠能分析一下算法吗?
2009-4-17 12:52
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
10
我只是个菜鸟,不要这样称呼。
这是个典型的f(user)=f(code)结构,虽然设计得十分繁复,但是只要知道这一点,就行了。
对username经过一系列的变换会得到一个3Eh长度的数组,设为s,根据上面的公式,那么
f(code)=s,再对s进行逆推就能推出code了。
  作者虽然以后又对user 和 code进行再次运算,但这已经不重要了,直接忽略,因为只要第一次满足等式成立,那么后面的变换无论如何变换,都可以忽略了.......
2009-4-17 13:41
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
左下名字不对,也改对他。
上传的附件:
2009-4-17 14:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
哪位大侠能帮忙说明一下,右下角的那个东西是怎么出来的?那是个暗柱之类的吗?
2009-4-17 15:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
爆破的话还挺简单的,算法的就不懂啦.还请高人分析下.
2009-4-17 15:43
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
右下角哪有什么,是左下角吧。那个地方也有个比较,没办法改了他。改成自己的注册名。
2009-4-17 16:01
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
15
无所谓左下角的字串,只要流程的最开始F(user)=f(code)成立,后面的都不用管了!
2009-4-17 16:08
0
雪    币: 261
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
分析得很正确
原本是这么想的,后面有段验证的是当有人尝试暴破的时候会产生除0错误的,不过写着写着自己也彻底搞糊涂了,然后乱改代码另程序可以计算出正确代码就不管事了
2009-4-17 16:37
0
雪    币: 319
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
大侠你是咋看出这个来的。。。。。。。从哪里可以看出。
2009-4-17 16:52
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
18
  前面对于username的计算和对于code的计算各自对应了一个密串,从这里可以联想到这是一个等式,而后面进一步地对两个密串分别加密并在最后进行验证可以看出这是一个函数:
F(user)=f(code),所以只要前面等式成立,后面一切都可以忽略了。
  简化此CM后的注册机C++原代码如下,附注册机。

        const CString s1="ijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh";
        const CString s2="ponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA9876543210zyxwvutsrq";
        //s1, s2分别对应对用户名和注册码加密的密串
        CString str, EncUser, code;  //EncUser指对Username加密后的字串,code指正确的注册码
        int nLen, i, j, nindex, nCount=0;
        GetDlgItemText(IDC_EDIT1, str);
        //算法化简,fmv6是前面计算出来的固定字符串,所以计算过程亦省略,直接用明码。
        str = "fmv6" + str;
        nLen = str.GetLength();
        for(i=0; i<0x3F; i++)
        {
                EncUser += s1.GetAt((str.GetAt(i%nLen)+i)%0x3E);
        } //将此for循环中的代码可直接放入到下面的循环中去,亦能正确得解,但是可读性将降低。
        for(i=0; i<0x3F; i++)  //根据加密后的username串逆向出code串
        {
                nindex = s2.Find(EncUser.GetAt(i), 0);
                //在s2串中查找加密后的UserName串中每位字符的index
                for(j=0x30; j<=0x7A; j++) //从 0-z 中计算除以0x3E 余数=nindex的字符的值
                {
                        if (nindex == j%0x3E)
                        {
                                code += j-nCount++;
                                break;
                        }
                }
        }
        SetDlgItemText(IDC_EDIT2, code);
上传的附件:
2009-4-17 20:33
0
雪    币: 319
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
牛。。。。。。。。。。。。。。。。。。。谢谢。。。
2009-4-18 08:28
0
雪    币: 1596
活跃值: (30)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
20
LZ能不能给我一份源码!??
2130292@163.com
2009-4-18 12:23
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
21
已经写出来了啊,源码,随便建立1个MFC工程,复制到BUTTON按下的消息处理函数中去就行了。
2009-4-18 20:35
0
雪    币: 244
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
爆一爆啊爆一爆
2009-4-18 21:08
0
游客
登录 | 注册 方可回帖
返回
//