首页
社区
课程
招聘
[原创]我的Crackme 3.0
发表于: 2008-7-30 16:06 9795

[原创]我的Crackme 3.0

2008-7-30 16:06
9795
程序名称:Crackme3.0
作者:美丽の破船
程序简介:
    程序没有ANTI-CODE,没有加壳,有点花指令!
    本程序只是简单的加了个CRC校验,再没有做其它的保护!

要求:
     分析算法,算出用户名对应的SN,尽量写出注册机!
     我没有做什么太多的防爆破,所以,如果你是新手,可以学着解除一下CRC!尽量不要爆破本程序,那样没有什么意思!

美丽の破船
2008年7月30日

程序下载: Checkme3.0By美丽の破船.rar

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (23)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
试试能不能爆破,没办法··菜鸟
2008-7-30 16:10
0
雪    币: 440
活跃值: (61)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3


对应的用户名的SN俺无法算出来....

贴个可用的用户名和SN

用户名:hflywolf
注册码:xenzoaru

发个注册机........
上传的附件:
2008-7-30 17:34
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ppt
4
貌似算法很简单
用户名:wtybaj
注册码:cpyvub

上传的附件:
  • 1.JPG (33.70kb,370次下载)
2008-7-30 18:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
用户名:scvyes
注册码:calnis

由注册码推用户名方便些!
2008-7-30 19:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
nop三个跳就能爆破了..菜鸟
求攻略
2008-7-30 22:33
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
name:wgtlfafq
sn:ccbszhxd

名字与注册码必须为字母,且个数相同,大小字没有关系

算法部分我来注释:
004016E0  XOR EDI, EDI                             ; EDI=0,CF=0   //自身xor运算结果为0,CF=0
004016E2  CDQ                                      ; 将EAX中的最高位符号扩展到EDX中
004016E3  SUB EAX, EDX                             ; EAX=0x8   //EAX=0x8-0x0
004016E5  MOV EBP, EAX                             ; EBP=0x8
004016E7  SAR EBP, 1                               ; EBP=0x4   //SAR EBP>>0x1 移出的数据进入标志位CF
004016E9  CMP EBP, EBX                             ; ZF=0   //EBP=0x4,EBX=0x0
004016EB  JLE SHORT 0040173E                       ; 不跳    //ZF=0;当比较结果是小于或等于时,才跳
004016ED  MOV CL, BYTE PTR SS:[ESP+EDI*2+11]       ; CL=0x53 ('S')   //SS段[12F553]   (ASCII字符串:"SZHXD")
004016F1  MOV AL, BYTE PTR SS:[ESP+EDI*2+10]       ; AL=0x43 ('C')   //SS段[12F550]   (ASCII字符串:"CCBSZHXD")
004016F5  SUB CL, 41                               ; CL=0x2   //CL=0x43-0x41    //把ascii文本大写字母变成十进制数字,A=0
004016F8  SUB AL, 41                               ; AL=0x2   //AL=0x43-0x41    //把ascii文本大写字母变成十进制数字,A=0
004016FA  MOVSX ESI, CL                            ; ESI=0x2;ESI多于CL的高位由符号填充
004016FD  MOVSX ECX, AL                            ; ECX=0x2;ECX多于AL的高位由符号填充
00401700  MOV EBX, 1A                              ; EBX=0x1A
00401705  LEA EDX, DWORD PTR DS:[ECX+ECX*8]        ; EDX=0x12
00401708  LEA EAX, DWORD PTR DS:[EDX+ESI*2]        ; EAX=0x16
0040170B  CDQ                                      ; 将EAX中的最高位符号扩展到EDX中
0040170C  IDIV EBX                                 ; EAX=0x0;EDX=0x16   //除法运算,商在EAX中,余数在EDX中
0040170E  MOVSX EAX, BYTE PTR SS:[ESP+EDI*2+D8]    ; EAX=0x57 ('W')   //SS段[12F618]   (ASCII字符串:"WGTLFAFQ")
00401716  SUB EAX, 41                              ; EAX=0x16   //EAX=0x57-0x41    //把ascii文本大写字母变成十进制数字,A=0
00401719  CMP EDX, EAX                             ; ZF=1   //EDX=0x16,EAX=0x16
0040171B  JNZ SHORT 0040174E                       ; 不跳    //ZF=1;当比较结果是不等于时,才跳
0040171D  LEA EAX, DWORD PTR DS:[ESI+ESI*2]        ; EAX=0x6
00401720  LEA ECX, DWORD PTR DS:[ECX+EAX*4]        ; ECX=0x1A
00401723  ADD EAX, ECX                             ; EAX=0x20   //EAX=0x6+0x1A
00401725  MOV ECX, EBX                             ; ECX=0x1A
00401727  CDQ                                      ; 将EAX中的最高位符号扩展到EDX中
00401728  IDIV ECX                                 ; EAX=0x1;EDX=0x6   //除法运算,商在EAX中,余数在EDX中
0040172A  MOVSX EAX, BYTE PTR SS:[ESP+EDI*2+D9]    ; EAX=0x47 ('G')   //SS段[12F619]   (ASCII字符串:"GTLFAFQ")
00401732  SUB EAX, 41                              ; EAX=0x6   //EAX=0x47-0x41    //把ascii文本大写字母变成十进制数字,A=0
00401735  CMP EDX, EAX                             ; ZF=1   //EDX=0x6,EAX=0x6
00401737  JNZ SHORT 0040174E                       ; 不跳    //ZF=1;当比较结果是不等于时,才跳
00401739  INC EDI                                  ; EDI=(0x0)++
0040173A  CMP EDI, EBP                             ; ZF=0   //EDI=0x1,EBP=0x4
0040173C  JL SHORT 004016ED                        ; 跳到004016ED  //ZF=0,SF!=OF
0040173E  POP EDI
0040173F  POP ESI
00401740  POP EBP
00401741  MOV EAX, 1
00401746  POP EBX
00401747  ADD ESP, 190
0040174D  RETN
0040174E  POP EDI
0040174F  POP ESI
00401750  POP EBP
00401751  XOR EAX, EAX
00401753  POP EBX
00401754  ADD ESP, 190
0040175A  RETN
2008-7-31 11:14
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
新人悄悄地问下, 这种程序如何下段。。。  
用 bp GetWindowTextA断下来的老是不对....
2008-8-6 16:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
新手试试- -
上传的附件:
  • 1.jpg (11.16kb,278次下载)
2008-8-6 21:58
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谁能给点入手的提示啊~ 谢谢了,不知道怎么拦截到啊....
555....
2008-8-7 16:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你试试GetDlgItemTextA
2008-8-7 19:02
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
这些都试过了,断不下来的。 只是知道入口是402020
消息也试了下,也断不下来  
2008-8-7 19:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
爆破男华丽的路过~~
2008-8-7 21:23
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
14
慢慢来,不要着急!
跟的方法有很多的!
比如截取相关的API,在比如找按钮的ID,进而在定位代码……
谁都是这样过来的!~~
再说了,我也是新手~所以我写的这个不难的~~~
加油,你会成功的!
2008-8-9 18:24
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
记得你的CrackMe很牛噢。。
2008-8-10 15:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
GetDlgItemTextA断不下来的
楼主使用的是mfc里面的UpdateData(TRUE),直接把edit数据更新到关联的string对象,然后判断后,再UpdateData(FALSE)刷出来显示结果;还是断UpdateData吧
2008-8-20 16:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
输入是合法字符后才能用GetDlgItemTextA 断到,否则只能断UpdateData,最起始的地方
2008-8-20 16:32
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
收着 有时间看看
2008-8-21 15:12
0
雪    币: 191
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
新手 现在断点都找不到,谁给个提示谢谢  事件和api的 GetDlgItemTextA,GetWindowTextA里面都找不到啊,我的必杀字符串搜索也不行.
2008-8-21 20:57
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
20
新手 现在断点都找不到,谁给个提示谢谢 事件和api的 GetDlgItemTextA,GetWindowTextA里面都找不到啊,我的必杀字符串搜索也不行.
我用的是MFC写的程序,不是用的WIN32API编程~~但是还是可以断到的!
至于字符串,我把它XOR操作了,如果你能看明白程序的话,可以再XOR回来,你的字符串搜索就有用了!
2008-8-24 11:23
0
雪    币: 175
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
爆破会气坏破船大哥的
2008-8-25 04:06
0
雪    币: 175
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
bp GetDlgItemTextA
2008-8-25 05:50
0
雪    币: 716
活跃值: (36)
能力值: ( LV12,RANK:271 )
在线值:
发帖
回帖
粉丝
23
实质就是解方程
(9(x - 0x41)+ 2(y - 0x41)) % 26 = a - 0x41
((x - 0x41) + 15(y- 0x41)) %  26 = b  - 0x41

用户名和key是两个字母为一组关联的。 其中a,b表示名字的第2n+1,2n +2个大写字母.
x,y为注册码的第2n+1,2n +2个大写字母.
所以要求用户名为偶数个字母。

下面是一个我写的注册码参考实现。
void foo1(char* name, char* key)//这里假定name, key都是可写的,且长度相等。
{
        int len = ::strlen(name);
        if(len % 2 == 1)
        {
                *(name + len - 1) = '\0';
        }
        ::_strupr(name);

        len /= 2;
        for(int i = 0; i < len; i++)
        {
                int k1, k2, n1 = *(name + i* 2 ) - 0x41, n2 = *(name + i * 2 + 1) - 0x41;
                for(char t1 = 0; t1 < 26; t1++)
                        for(char t2 = 0; t2 < 26; t2++)
                        {
                                if( ((9 * t1 + 2 * t2) % 26 == n1) && ((t1 + 15 * t2 ) % 26 == n2))
                                {
                                        *(key + i* 2 ) = t1 + 0x41;
                                        *(key + i* 2 +1) = t2 + 0x41;
                                        goto find;
                                }
                        }

find:
        ;
        }
}

至于断点,我开始也不知道下再那里。不过代码很小,所以我直接读了一遍,发现他是调用
00401670  |.  E8 4F090000   call    <jmp.&MFC42.#3098_CWnd::GetDlgItemTextA>
来获取数据的,然后尝试在这个函数上下断点,发现是可以断住的,以后再遇到VC6.0做的MFC程序就可以先试试这个函数。
2008-8-28 11:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
谁帮我搞定这个,破解万分感谢.4
对高手来说.这个肯定是十分简单的.4
http://www.netcoole.com/download/delphi2cs.zip
2008-8-31 01:06
0
游客
登录 | 注册 方可回帖
返回
//