首页
社区
课程
招聘
[原创]刚编写的一个cm,欢迎品尝^_^
发表于: 2010-3-18 16:31 9008

[原创]刚编写的一个cm,欢迎品尝^_^

2010-3-18 16:31
9008
vc6.0编译
没加壳
没任何anti措施

见附件 crackme.rar

附上源码
void GetSerial(HWND hDlg)
{
        char name[10],serial[13];
        if(0==GetDlgItemText(hDlg,IDC_EDIT1,name,7))
        {
                MessageBox(hDlg,"Name can not be empty.","Erorr",0x40);
                return;
        }
        if(0==GetDlgItemText(hDlg,IDC_EDIT2,serial,7))
        {
                MessageBox(hDlg,"Serial can not be empty.","Erorr",0x40);
                return;
        }
        if(strlen(name)==6&&strlen(serial)==6)
                CheckSerial(name,serial);
}
void Copy()
{
        char object[1];
        char* ShellCode="\x90"//填充
                "\x12\x45\xFA\x7F"//jmp esp
                "\x33\xC0\x50\x68\x65\x73\x73\x21\x68\x53\x75\x63\x63\x8B\xD4\x50"
                "\x68\x65\x72\x21\x20\x68\x68\x61\x63\x6B\x68\x6B\x65\x72\x2F\x68"
                "\x63\x72\x61\x63\x68\x65\x61\x74\x20\x68\x61\x20\x67\x72\x68\x61"
                "\x72\x65\x20\x68\x59\x6F\x75\x20\x8B\xCC\x50\x52\x51\x50\xB8\xA0"
                "\x50\x40\x40\xC1\xE0\x08\xC1\xE8\x08\xFF\x10\x33\xC0\x50\xB8\x2C"
                "\x50\x40\x40\xC1\xE0\x08\xC1\xE8\x08\xFF\x10";//注册成功提示信息
        strcpy(object,ShellCode);
}
void CheckSerial(char* name,char* serial)
{
        int i;
        for(i=0;i<=5;i++)
        {
                if((((int)name[i]*(int)name[i])%25+65)!=(int)serial[i]) return;
        }
        Copy();
}

上面shellcode中我直接call了手工查看的输入表地址
因此不具备通用性,如果你要在自己机器上调试,vc6.0 release默认设置,运气好的话会成功的

注册码计算本来就一行,的确比较弱,不过正好让刚开始学调试的增加点自信

本来打算将注册码。用户名,shellcode这三个进行一定的交互计算,应该会有点意思
不过太麻烦了

just for fun ^_^

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (24)
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
cxhcxh
BAQBAQ
2010-3-18 16:54
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
3
注册算法太弱了。。。
2010-3-18 17:02
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
4
2楼好闲。。
2010-3-18 17:05
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
还是比较简单的!!!
上传的附件:
2010-3-18 17:08
0
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
什么时候请吃饭啊
等得花儿也谢了
2010-3-18 17:11
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
7
其实你可以跟进现在停下来的那个call里看看
我比较费心机的在那里面
一个strcpy的溢出,msgbox和exit都在那里面
2010-3-18 17:16
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
呵呵暴力破解的哈!
luckbu
OOBYEO

|movsx   eax, byte ptr [ecx]这条指令是怎么回事哦?高手解答一下!怎么个扩展的啊
上传的附件:
2010-3-18 17:34
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
004011AE  |.  0FBE01        |movsx   eax, byte ptr [ecx]
004011B1  |.  83C2 41       |add     edx, 41
004011B4  |.  3BD0          |cmp     edx, eax
004011B6      75 0C         jnz     short 004011C4
004011B8  |.  47            |inc     edi

004011AE  |.  0FBE01        |movsx   eax, byte ptr [ecx]
004011B1  |.  83C2 41       |add     edx, 41
004011B4  |.  3BD0          |cmp     edx, eax
004011B6      90            nop
004011B7      90            nop
004011B8  |.  47            |inc     edi

把这里nop掉就,爆破成功。


进入下面的函数
0040117D  |.  C1E9 02       shr     ecx, 2
00401180  |.  F3:A5         rep     movs dword ptr es:[edi], dword ptr [esi]
00401182  |.  8BC8          mov     ecx, eax
00401184  |.  83E1 03       and     ecx, 3
00401187  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr [esi]

这里把返回地址什么的都改变了,之后跟进返回到别的地方。里面有messagebox 和exitprocess,这里直接退出了,如果想不退出可以在改回来吗? 这里的代码要怎么写才能有这样的效果?
上传的附件:
2010-3-18 17:38
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=introns;777835]004011AE  |.  0FBE01        |movsx   eax, byte ptr [ecx]
004011B1  |.  83C2 41       |add     edx, 41
004011B4  |.  3BD0          |cmp     edx, eax
...[/QUOTE]

跟进去之后 就发现跳到了user32.dll里
然后执行了句jmp esp
跳到栈顶
执行栈里的代码
就是msgbox和exit
strcpy函数溢出了,淹没了返回地址
执行了一段shellcode
2010-3-18 18:04
0
雪    币: 266
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
强烈建议新手练练,像我这样的菜鸟都能找到注册码。。。。
用户名取前6为,每位自乘余19h,将余数加41h变为ASICII就是密码
2010-3-18 18:37
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
int main()
{

        char  sz[6];
        int a;
        //int len;
        gets(sz);

        for (int i = 0; i < 6; i++)
        {
       
          a = sz[i];
          a*=a;
          a%=25;
          a+=65;

        sz[i]=a;
       
        }

        puts(sz);
return 0;
}
有点不规范哈!不想弄了,输六个就对了!
2010-3-18 20:32
0
雪    币: 136
活跃值: (1480)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
13
我是菜鸟很菜,终于发现算法了。。哈哈
2010-3-18 22:07
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
14
暴破的最终结果就是暴破了一辈子,也不会有任何进步,暴破了一辈子,也不知道注册算法,即使是非常简单的1+1=2型的算法,也看不懂……
2010-3-19 08:38
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
精辟!
2010-3-19 17:04
0
雪    币: 348
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
没壳 没算法 c个什么劲 ……
2010-3-19 17:07
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
17
如果对算法稍加改进于shellcode中,把strcpy函数变形,干脆自己写,然后再进行动态解码,就不是那么容易了……
2010-3-19 17:29
0
雪    币: 2194
活跃值: (1001)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18

呵呵
CM里都用上溢出技术
2010-3-19 19:47
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
19
本来打算将算法放shellcode里动态生成的,但是不定因素实在太多了,没实现
这个算半成品
2010-3-19 20:15
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
20
算法只有一行?


这不就是smc了嘛
2010-3-19 20:18
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
21
头一次听说smc刚google了下,果然麻烦
2010-3-19 20:48
0
雪    币: 247
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
也下回来看看吧……
2010-3-19 21:18
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
23
呵呵...!
2010-3-19 22:44
0
雪    币: 77
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
楼上大牛
2010-4-10 01:13
0
雪    币: 180
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
kanxue
YJAA0B
2010-4-10 11:52
0
游客
登录 | 注册 方可回帖
返回
//