首页
社区
课程
招聘
[原创]CRACKME下载!
发表于: 2006-12-4 21:50 23650

[原创]CRACKME下载!

2006-12-4 21:50
23650
任务一:去掉NAG
任务二:跟出算法

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 1
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
最初由 iamcrackin 发布
任务一:去掉NAG
任务二:跟出算法

你他妈的从看雪论坛滚出去吧,你这个垃圾。
2006-12-4 22:22
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
楼上兄弟……

void tem(char *InPutBuf)
{
//处理输入的注册码
//注册码必须为数字。如果输入的注册码种有非数字的,过滤掉

        char *pSNIn,*pSNOut;
        pSNIn=pSNOut=InPutBuf;
        char tmp;
        while(*pSNIn)
        {
                if((*pSNIn >'9') || (*pSNIn <'0'))
                {
                        pSNIn++;
                        continue;
                }
                *pSNOut=*pSNIn-'0';
                pSNOut++;
                pSNIn++;
        }
}

void reg2(unsigned char *pSN)
{

        tem((char *)pSN);
        int SNLen=strlen((char *)pSN);
        if (SNLen==0)
                return;
        DWORD eax=0,ebx=0;
        for(int i=0;i<SNLen;i++)
        {
                eax = (eax << 3) + ((eax << 1) + pSN[i]);
        }

        if(eax==0x3039)
                printf("ss");//Registered
}
2006-12-4 23:30
0
雪    币: 488
活跃值: (2754)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4
Done!
No-Nag.

ps:2楼应该还在精神病院接受治疗的啊,怎么跑出来了?看雪兄先来封下号吧。。
上传的附件:
2006-12-5 06:42
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
郁闷  呵呵 你们2个就吵吧
2007-4-15 01:17
0
雪    币: 211
活跃值: (32)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这个的NAG要怎么去掉啊,,,高手交下
2007-4-15 11:26
0
雪    币: 211
活跃值: (32)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
BY     LEON

004013E8  /$  55            push    ebp                        
004013E9  |.  8BEC          mov     ebp, esp
004013EB  |.  56            push    esi
004013EC  |.  8B75 08       mov     esi, dword ptr [ebp+8]       //取注册码位数放进ESI
004013EF  |.  8BFE          mov     edi, esi       // ESI的值传递给edi
004013F1  |.  33C0          xor     eax, eax       // eax清0
004013F3  |>  8A06          /mov     al, byte ptr [esi]      // 取第1个注册码放进al
004013F5  |.  46            |inc     esi      esi+1
004013F6  |.  84C0          |test    al, al       //与自己做异或运算
004013F8  |.  75 09         |jnz     short 00401403   //不等于就跳到00401403
004013FA  |.  90            |nop
004013FB  |.  90            |nop
004013FC  |.  90            |nop
004013FD  |.  90            |nop
004013FE  |.  8807          |mov     byte ptr [edi], al
00401400  |.  5E            |pop     esi
00401401  |.  5D            |pop     ebp
00401402  |.  C3            |retn             //返回到 0040141D

00401403  |>  3C 39         |cmp     al, 39      // 比较和39所对应的ASCII码
00401405  |.^ 7F EC         |jg      short 004013F3    // 大于往上跳,取第2个注册码继续,依次循环。
00401407  |.  2C 30         |sub     al, 30           //减去30
00401409  |.^ 72 E8         |jb      short 004013F3    // 小于往上跳,取第2个注册码,依次循环
0040140B  |.  8807          |mov     byte ptr [edi], al        //把al存起来
0040140D  |.  47            |inc     edi   edi+1
0040140E  \.^ EB E3         \jmp     short 004013F3  直接跳到004013F3
00401410  /$  55            push    ebp      
00401411  |.  8BEC          mov     ebp, esp
00401413  |.  56            push    esi
00401414  |.  8B75 0C       mov     esi, dword ptr [ebp+C]
00401417  |.  56            push    esi                      ; /Arg1
00401418  |.  E8 CBFFFFFF   call    004013E8                   ; \nagoya.004013E8
0040141D  |.  83C4 04       add     esp, 4               esp+4
00401420  |.  56            push    esi                         ; /String  //压进了01,02,03,04,05,06等字符,就是注册码位数有几个,把第1个变成01,第2个成02,如注册码:123,压的字符就是01,02,03,注册码是:789456,压的注册码就是01,02,03,04,05,06  0x是根据注册码位数定的。
00401421  |.  E8 0B010000   call    <jmp.&KERNEL32.lstrlen>    ; \lstrlenA              // 再取注册码位数放进eax
00401426  |.  85C0          test    eax, eax          //与自己做异或运算,等于就往失败去了
00401428  |.  74 19         je      short 00401443   //如果跳就完了
           上面这段程序是要验证注册码为数字。不然跳到失败。

0040142A  |.  90            nop
0040142B  |.  90            nop
0040142C  |.  90            nop
0040142D  |.  90            nop
0040142E  |.  8BC8          mov     ecx, eax       //把假注册码位数放进ecx,做LOOP的计数器(前面00401421说了,eax=注册码位数)。
00401430  |.  33C0          xor     eax, eax        //eax清0
00401432  |.  33DB          xor     ebx, ebx          //ebp清0
00401434  |> /D1E0          /shl     eax, 1    //算术左移动1位   =MUL   eax,2  //相当于eax*2
00401436  |. |8BD8          |mov     ebx, eax       //把eax放入ebx
00401438  |. |D1E0          |shl     eax, 1        //算术左移动1位   =MUL   eax,2 //相当于eax*2
0040143A  |. |D1E0          |shl     eax, 1            //算术左移动1位   =MUL   AL,2 //相当于eax*2
0040143C  |. |021E          |add     bl, byte ptr [esi]    //bl加01,就是前面压进的字符一个一个加,ebx+1,第2次加02
0040143E  |. |03C3          |add     eax, ebx      //ebx+eax结果放进eax
00401440  |. |46            |inc     esi              esi+1
00401441  |.^\E2 F1         \loopd   short 00401434   //从00401434的地方开始循环每次ecx-1,到0停止,把本次的计算结果设为B
00401443  |>  8B75 08       mov     esi, dword ptr [ebp+8]      
00401446  |.  8906          mov     dword ptr [esi], eax      //这里运算的结果是1E240,把运算结果存起来
00401448  |.  5E            pop     esi
00401449  |.  5D            pop     ebp
0040144A  \.  C3            retn      //跳到00401247
注册码是:注册码是数字,然后按照注册码的位数前加0,变成0x的形式,把bl+0x的值给bl(ebx),ebx+eax的值给eax,循环(注册码有几个循环几次),把本次计算结果设成B,B和16位的3039(十进制的12345)比较,相等就向成功,不然就失败。
万能注册码是12345,这个程序根本没有对用户名进行计算。

00401247  |.  83C4 08       add     esp, 8                  //esp+8
0040124A  |.  A1 25214000   mov     eax, dword ptr [402125]
0040124F  |.  3D 39300000   cmp     eax, 3039    //比较是不是等于十进制的12345
00401254  |.  74 0B         je      short 00401261    //等于跳到成功
00401256  |.  90            nop
00401257  |.  90            nop
00401258  |.  90            nop
00401259  |.  90            nop
0040125A      E8 08020000   call    00401467         //不等于失败的对话框就出来了。
0040125F  |.^ EB 95         jmp     short 004011F6
00401261  |>  E8 E5010000   call    0040144B      //成功的对话框。
2007-4-16 12:52
0
雪    币: 211
活跃值: (32)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
4楼的去掉NAG后,固定注册码12345就不存在了...
2007-4-16 20:00
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
NAG 怎去除。
2007-4-24 16:41
0
雪    币: 191
活跃值: (58)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
OD一开就可以看到这个!这里创建了程序窗口。

0040109D  |.  6A 00         PUSH 0                                   ; /lParam = NULL
0040109F  |.  FF35 74204000 PUSH DWORD PTR DS:[402074]               ; |hInst = NULL
004010A5  |.  6A 00         PUSH 0                                   ; |hMenu = NULL
004010A7  |.  6A 00         PUSH 0                                   ; |hParent = NULL
004010A9  |.  68 00800000   PUSH 8000                                ; |Height = 8000 (32768.)
004010AE  |.  68 00800000   PUSH 8000                                ; |Width = 8000 (32768.)
004010B3  |.  6A 6E         PUSH 6E                                  ; |Y = 6E (110.)
004010B5  |.  68 B4000000   PUSH 0B4                                 ; |X = B4 (180.)
004010BA  |.  68 0000CF00   PUSH 0CF0000                             ; |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
004010BF  |.  68 84204000   PUSH nagoya.00402084                     ; |Exercise 2
004010C4  |.  68 8F204000   PUSH nagoya.0040208F                     ; |ASMCLASS32
004010C9  |.  6A 00         PUSH 0                                   ; |ExtStyle = 0
004010CB  |.  E8 E9030000   CALL <JMP.&USER32.CreateWindowExA>       ; \CreateWindowExA

看手册:http://www.pediy.com/tutorial/chap6/Chap6-1-2.htm 可以找到触发NAG窗口的程序

0040115F  |> \6A 00         PUSH 0                                   ; /lParam = NULL
00401161  |.  68 5E134000   PUSH nagoya.0040135E                     ; |DlgProc = nagoya.0040135E
00401166  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hOwner
00401169      68 B3204000   PUSH nagoya.004020B3                     ;  NagScreen
0040116E  |.  FF35 74204000 PUSH DWORD PTR DS:[402074]               ; |hInst = NULL
00401174  |.  E8 4C030000   CALL <JMP.&USER32.DialogBoxParamA>       ; \DialogBoxParamA

鼠标停到 0040115F  |> \6A 00          PUSH 0                                   ; /lParam = NULL

OD会提示你在 0040113D 调用了NAG显示,在这里做处理,使本应显示NAG窗口的位置,显示为NAG退出后的结果,也就是真是窗口,继续看NAG窗口那段代码。

0040115F  |> \6A 00          PUSH 0                                   ; /lParam = NULL
00401161  |.  68 5E134000    PUSH nagoya.0040135E                     ; |DlgProc = nagoya.0040135E
00401166  |.  FF75 08        PUSH DWORD PTR SS:[EBP+8]                ; |hOwner
00401169      68 B3204000    PUSH nagoya.004020B3                     ;  NagScreen
0040116E  |.  FF35 74204000  PUSH DWORD PTR DS:[402074]               ; |hInst = 00400000
00401174  |.  E8 4C030000    CALL <JMP.&USER32.DialogBoxParamA>       ; \DialogBoxParamA
00401179      83F8 02        CMP EAX,2                                ;  确定 被点击
0040117C      74 1F          JE SHORT nagoya.0040119D                 ;  跳往处理事件 0040119D

0040119D  |>  6A 00          PUSH 0                                   ; /ExitCode = 0
0040119F  |. |E8 6F030000    CALL <JMP.&USER32.PostQuitMessage>       ; \PostQuitMessage
004011A4  |. |B8 00000000    MOV EAX,0
004011A9  |. |EB 4B          JMP SHORT nagoya.004011F6                ;  NAG窗口关后将执行的命令。

在这个CrackME中干掉NAG就是要 0040113D 不触发NAG窗口而是直接去触发NAG窗口关闭后的动作,也就是改为:

0040113D     /0F84 B3000000  JE nagoya.004011F6

搞定。
2007-4-24 19:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Ollydbg载入
0040115F      6A 00         PUSH 0

把PUSH 0改为jmp 004013E1

可是原来code 为12345
改后name为12345了

没搞明白
2007-4-26 14:41
0
雪    币: 398
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2楼的估计是个疯子 呵呵
2007-4-28 11:39
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
要去nag改一步就可以:
0040113D  JE 004011F6         ;  以前的代码为je short 0040115f

在没去nag之前,注册时检测code,code必须为12345开头后面可以接其非1-9的字符,name不用检测
在没去nag之后,注册时检测name,name必须为12345开头后面可以接其非1-9的字符,code不用检测

算法都是一样,仔细的上面几位也解释了,主要如下:
0040142E  MOV ECX,EAX                       ;  ECX=EAX
00401430  XOR EAX,EAX                       ;  EAX=0,CF=0;(自身xor运算结果为0,CF=0)
00401432  XOR EBX,EBX                       ;  EBX=0,CF=0;(自身xor运算结果为0,CF=0)
00401434  /SHL EAX,1                        ;  SHL EAX<<0x1 //移出的数据进入标志位CF
00401436  |MOV EBX,EAX                      ;  EBX=EAX
00401438  |SHL EAX,1                        ;  SHL EAX<<0x1 //移出的数据进入标志位CF
0040143A  |SHL EAX,1                        ;  SHL EAX<<0x1 //移出的数据进入标志位CF
0040143C  |ADD BL,BYTE PTR DS:[ESI]
0040143E  |ADD EAX,EBX                      ;  EAX=EAX+EBX;
00401440  |INC ESI                          ;  ESI++
00401441  \LOOPD SHORT 00401434             ;  

简单表示为公式:y=10*y+key[i],根据
0040124F  CMP EAX,3039
00401254  JE SHORT 00401261         

我们知道,公式的结果y必须为0x3039(十进制12345),所以结果为为12345开头,后面可以接其非1-9的字符(因为后面的非1-9的字符程序会除掉)
2007-4-29 00:44
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
0040115F  |> \6A 00         PUSH 0                                   ; NOP
00401161  |.  68 5E134000   PUSH nagoya.0040135E                     ; NOP
00401166  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; NOP
00401169  |.  68 B3204000   PUSH nagoya.004020B3                     ; NOP
0040116E  |.  FF35 74204000 PUSH DWORD PTR DS:[402074]               ; NOP
00401174  |.  E8 4C030000   CALL <JMP.&USER32.DialogBoxParamA>       ; NOP
00401179  |.  83F8 02       CMP EAX,2                                  NOP
0040117C     /74 1F         JE SHORT nagoya.0040119D                   NOP掉就去NAG!哈哈~~~
0040117D      90            NOP
0040117E  |.  90            NOP
0040117F  |.  90            NOP
2007-5-6 09:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看不明白,学习中
2007-5-7 14:25
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
我要发 CM 啊,可是可恶的 20 贴,什么时候才到期啊
2007-5-7 14:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
无言的感谢!
2007-5-11 17:02
0
雪    币: 211
活跃值: (32)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
感谢10楼提供的方法
2007-5-13 10:55
0
雪    币: 200
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
0040113D  jz      short loc_40115F  nag消除

00401254  jz      short loc_401261  注册消除
2010-3-17 15:04
0
游客
登录 | 注册 方可回帖
返回
//