首页
社区
课程
招聘
圣诞节到了,菜菜写一cm活跃气氛。。
发表于: 2010-12-24 17:54 7589

圣诞节到了,菜菜写一cm活跃气氛。。

2010-12-24 17:54
7589
目的:共同学习,也希望大大们能给出建议。。。
cm目的:希望弄出来的同学能跟帖(附一组序列号,密码即可哈),给我点鼓励。。。
######
无壳,无压缩
不需要爆破,会爆破永远没有进步
期待大家能写出注册机!!
######
Cme.zip

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 429
活跃值: (547)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没那闲心去弄算法。
2010-12-24 19:30
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
3
我错了。。。呵呵。。。
2010-12-25 09:39
0
雪    币: 434
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
跳过退出程序后 出错 进入异常处理链 最后 
1.eax=0
2.eax=1
3.未知
不是出错就是死循环   望高手解惑
2010-12-25 20:09
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
5
现提供一组:
00000000
BC@ANOLM
互相学习。。。菜菜刚来看雪。。。
2010-12-25 20:31
0
雪    币: 83
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
我直接从按钮点击开始把所有的call跟了一遍,
还好算法不太复杂,就是把序列号和密码都加密然后比较,
今天学校网速相当的慢,打开看雪论坛都用了十多分钟
#include <stdio.h>
#include <conio.h>
/******************************************
第一个加密函数,用于加密序列号
输入参数a:依次取序列号各位字母大写的ASCII编码
输出为ASCII编码
*******************************************/
int func1(int a)
{
        int result = 1;
        for(int i=0;i<27;i++)
        {
                result*=a;
                result=result%182;
        }
        return result;
}
/*********************************************
第二个加密函数,用于加密密码,由于是异或,
所以加密跟解密是一样的
输入和输出均为ASCII编码
*********************************************/
int func2(int b)
{
        int s;
        static int i=0;
        s=52+i;
        b=s^b;
        i++;
        return b;
}

int main()
{
        /*序列号和密码均为8位,这里随便取序列号为bbbbbbbb,对应ASCII编码为66*/
        printf("bbbbbbbb对应的密码为:\n");
        for(int i=0;i<8;i++)
        {
                int t=66;
                int asc=func2(func1(t));
                putchar(asc);
        }
        //输出结果密码为BC@ANOLM
        getch();
        return 0;
}
2010-12-25 22:35
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
7
不错哈。。。。不一定为8位。。大于8位的都可以的。。。你们学校网速还能打开看雪,我这边都打不开。。呵呵。。
2010-12-26 11:25
0
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
刚准备写写,发现注册已经被人写了。过几天看看
2010-12-27 14:24
0
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
没办法,只看过CCDebug的几篇Ollydbg的教程,目前只会爆破.....
2010-12-27 15:55
0
雪    币: 421
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
学习C写注册机。补全一下sltpgm兄的注册机
有的注册名好像注册不了的。晕!不是所有的都能注册!



#include <stdio.h>
#include <conio.h>
int func1(int a)
{
int result = 1;
int i;
for(i=0;i<27;i++)
{
result*=a;
result=result%182;
}
return result;
}
int func2(int b)
{
int s;
static int i=0;
s=52+i;
b=s^b;
i++;
return b;
}
int main()
{

int asc,i;
char a[9];
puts("Name must be 8 letters!");
gets(a);
printf("Code is: ");
for(i=0;i<8;i++)
{
asc=func2(func1(a-0x20));
putchar(asc);
}
getch();
return 0;
}


2010-12-28 13:43
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
11
不好意思  最近一直在考试。。没时间 细细看 只看了 它的那对 bbbbb。。。可以注册。。注册机没细看。。。
2010-12-28 18:19
0
雪    币: 83
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
明白fairynull的意思,
你的算法好像不能保证所有的ascii编码都是有效字符吧,就是说不是随便输入一个序列号都可以得到有效的密码的,比如41h对应字符a,77h就写不出来字符了
fairynull就添加了一个输入序列号的功能,我把算法都跟出来了,因为反正又不能对所有用户名有效所有就直接用bbbbbb了
既然有人回复就顺便说一下过程吧,
打开随便输入个密码点确定直接退出了,我开始以为是ExitProcess,后来才发现是用c语言的exit函数退出的
如果密码正确应该是弹出消息框吧,bpx MessageBoxA,只有一个,应该就是这里了
这样可以知道密码正确就弹出一个merry christmas了,然后call    <_mbscmp>就是比较部分了,
00401C55   .  75 49         jnz     short 00401CA0  就是关键跳了,nop掉就爆破了。。。

00401C49   .  E8 F0810000   call    <_mbscmp>                        ;  比较
00401C4E   .  83C4 08       add     esp, 8
00401C51   .  85C0          test    eax, eax
00401C53   .  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
00401C55   .  75 49         jnz     short 00401CA0                   ; |
00401C57   .  68 F8C04200   push    0042C0F8                         ; |good gift
00401C5C   .  68 E8C04200   push    0042C0E8                         ; |merry christmas
00401C61   .  6A 00         push    0                                ; |hOwner = NULL
00401C63   .  FF15 3C344200 call    dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA
爆破完成...
**************************************
再往前面就是关键算法部分了,注释当然是后来加上去的
00401C11   .  E8 9A000000   call    <序列号加密>                                 
00401C16   .  51            push    ecx
00401C17   .  8D56 6C       lea     edx, dword ptr [esi+6C]                  
00401C1A   .  8BCC          mov     ecx, esp
00401C1C   .  896424 14     mov     dword ptr [esp+14], esp
00401C20   .  52            push    edx
00401C21   .  C74424 24 000>mov     dword ptr [esp+24], 0
00401C29   .  E8 4E620100   call    <operator =>  
00401C2E   .  8D4424 0C     lea     eax, dword ptr [esp+C]
00401C32   .  8BCE          mov     ecx, esi
00401C34   .  50            push    eax
00401C35   .  E8 26010000   call    <密码加密>                     
00401C3A   .  8B4C24 08     mov     ecx, dword ptr [esp+8]
00401C3E   .  8B5424 0C     mov     edx, dword ptr [esp+C]
00401C42   .  51            push    ecx
00401C43   .  52            push    edx
00401C44   .  C64424 24 01  mov     byte ptr [esp+24], 1
00401C49   .  E8 F0810000   call    <_mbscmp>                                                 ;  加密后的比较

反正是小程序而且这是我第一次玩cm,就接着看看算法吧,从输入文本开始跟,可以发现获取了文本和长度,后来还有两三处验证了长度要8位以上,我当时调试是用的abcdef,不够8位,所以都直接修改0标志位了
0041D8EB  |.  56            push    esi                                                       ; /hWnd
0041D8EC  |.  FF15 10334200 call    dword ptr [<&USER32.GetWindowTextLengthA>]                ; \获取text长度
0041D8F2  |.  8D48 01       lea     ecx, dword ptr [eax+1]
0041D8F5  |.  51            push    ecx
0041D8F6  |.  8B4D 10       mov     ecx, dword ptr [ebp+10]
0041D8F9  |.  50            push    eax
0041D8FA >|.  E8 2CAAFFFF   call    0041832B                                                  ;  GetBufferSetLength
0041D8FF  |.  50            push    eax                                                       ; |Buffer
0041D900  |.  56            push    esi                                                       ; |hWnd
0041D901  |.  FF15 14334200 call    dword ptr [<&USER32.GetWindowTextA>]                      ; \GetWindowTextA

这里比较了长度,长度小于8位就exit,
00401CE0  |.  83F8 08       cmp     eax, 8                                                    ;  长度大于8
00401CE3  |.  7D 07         jge     short 00401CEC
00401CE5  |.  6A 00         push    0
00401CE7  |.  E8 5F800000   call    00409D4B                                                  ;  exit
00401CEC  |>  56            push    esi
00401CED  |.  33F6          xor     esi, esi
00401CEF  |>  8B4C24 20     mov     ecx, dword ptr [esp+20]
00401CF3  |.  68 B6000000   push    0B6
00401CF8  |.  6A 1B         push    1B
00401CFA  |.  8A040E        mov     al, byte ptr [esi+ecx]                                    ;  取一位字符
00401CFD  |.  8BCF          mov     ecx, edi
00401CFF  |.  0FBED0        movsx   edx, al
00401D02  |.  52            push    edx
00401D03  |.  E8 98FEFFFF   call    <func1 >                                            ;  运算

最后的call加密序列号的,跟进去是这样的,这个很简单,我就对照着翻译成了C语言,就是我写的func1
00401BA0 >/$  8B4C24 08     mov     ecx, dword ptr [esp+8]
00401BA4  |.  B8 01000000   mov     eax, 1
00401BA9  |.  85C9          test    ecx, ecx
00401BAB  |.  7E 17         jle     short 00401BC4
00401BAD  |.  56            push    esi
00401BAE  |.  8B7424 10     mov     esi, dword ptr [esp+10]
00401BB2  |.  57            push    edi
00401BB3  |.  8B7C24 0C     mov     edi, dword ptr [esp+C]
00401BB7  |>  0FAFC7        /imul    eax, edi
00401BBA  |.  99            |cdq
00401BBB  |.  F7FE          |idiv    esi
00401BBD  |.  49            |dec     ecx
00401BBE  |.  8BC2          |mov     eax, edx
00401BC0  |.^ 75 F5         \jnz     short 00401BB7
00401BC2  |.  5F            pop     edi
00401BC3  |.  5E            pop     esi
00401BC4  \>  C2 0C00       retn    0C

后面不远处又有看到了密码的加密,感觉算法也跟上面差不多,就是一个循环,C语言表示就是我写的func2
00401D97  |>  8B4C24 1C     mov     ecx, dword ptr [esp+1C]
00401D9B  |. |8AD3          mov     dl, bl
00401D9D  |. |80C2 34       add     dl, 34
00401DA0  |. |8A040B        mov     al, byte ptr [ebx+ecx]                                    ;  逐位取密码
00401DA3  |. |8D4C24 1C     lea     ecx, dword ptr [esp+1C]
00401DA7  |. |32D0          xor     dl, al                                                    ;  与34h+dl异或

2个加密算法都出来了,这样就破解完了,
******************************************
把绝大部分的call我都给分析出来了,
就00401DD8    |.  E8 2A630100   call    00418107

这个call没弄明白是什么,而且出现了多次,我觉得可能是个mfc的函数吧,可是在mfc的源码里面看了看都不像,大概作用是返回字符串的地址
00418107 <C>/$  56            push    esi
00418108    |.  8BF1          mov     esi, ecx
0041810A    |.  8B06          mov     eax, dword ptr [esi]
0041810C    |.  8D48 F4       lea     ecx, dword ptr [eax-C]
0041810F    |.  3B0D 7CC44200 cmp     ecx, dword ptr [42C47C]                                   ;  cmp ecx,0xffffff
00418115    |.  74 18         je      short 0041812F
00418117    |.  83C0 F4       add     eax, -0C
0041811A    |.  50            push    eax                                                       ; /pVar
0041811B    |.  FF15 2C324200 call    dword ptr [<&KERNEL32.InterlockedDecrement>]              ; \InterlockedDecrement
00418121    |.  85C0          test    eax, eax
00418123    |.  7F 0A         jg      short 0041812F
00418125    |.  8B0E          mov     ecx, dword ptr [esi]
00418127    |.  83E9 0C       sub     ecx, 0C
0041812A    |.  E8 C7FEFFFF   call    00417FF6
0041812F    |>  5E            pop     esi
00418130    \.  C3            retn
00418131    /$  A1 78C44200   mov     eax, dword ptr [42C478]
00418136    |.  53            push    ebx
00418137    |.  8B5C24 08     mov     ebx, dword ptr [esp+8]
0041813B    |.  56            push    esi
0041813C    |.  8BF1          mov     esi, ecx
0041813E    |.  57            push    edi
0041813F    |.  85DB          test    ebx, ebx
00418141    |.  8906          mov     dword ptr [esi], eax
00418143    |.  74 36         je      short 0041817B
00418145    |.  8BC3          mov     eax, ebx
00418147    |.  C1E8 10       shr     eax, 10
0041814A    |.  66:85C0       test    ax, ax
0041814D    |.  75 0B         jnz     short 0041815A
0041814F    |.  0FB7C3        movzx   eax, bx
00418152    |.  50            push    eax
00418153    |.  E8 1C300000   call    0041B174
00418158    |.  EB 21         jmp     short 0041817B
0041815A    |>  53            push    ebx                                                       ; /String
0041815B    |.  FF15 28324200 call    dword ptr [<&KERNEL32.lstrlenA>]                          ; \lstrlenA
00418161    |.  8BF8          mov     edi, eax
00418163    |.  85FF          test    edi, edi
00418165    |.  74 14         je      short 0041817B
00418167    |.  57            push    edi
00418168    |.  8BCE          mov     ecx, esi
0041816A    |.  E8 05FEFFFF   call    00417F74
0041816F    |.  57            push    edi
00418170    |.  53            push    ebx
00418171    |.  FF36          push    dword ptr [esi]
00418173    |.  E8 D822FFFF   call    0040A450
00418178    |.  83C4 0C       add     esp, 0C
0041817B    |>  8BC6          mov     eax, esi
0041817D    |.  5F            pop     edi
0041817E    |.  5E            pop     esi
0041817F    |.  5B            pop     ebx
00418180    \.  C2 0400       retn    4
2010-12-29 02:22
0
雪    币: 421
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
如楼上所说!谢谢楼上的C代码!
2010-12-29 10:49
0
雪    币: 292
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
呵呵,拿来练练手
2011-1-26 16:31
0
游客
登录 | 注册 方可回帖
返回
//