首页
社区
课程
招聘
[原创]CrackMe.HappyTown.VC.0042简单分析
发表于: 2007-7-30 20:47 6110

[原创]CrackMe.HappyTown.VC.0042简单分析

2007-7-30 20:47
6110
CrackMe.HappyTown.VC.0042简单分析
HappyTown的东东 我一般都不错过看下的 :)

HappyTown的程序一般没什么anti
那么可以断到这里
00401123  |.  83F8 03       CMP EAX,3                                ;  用户名长度不小于3
00401126  |.  894424 10     MOV DWORD PTR SS:[ESP+10],EAX
0040112A  |.  73 0D         JNB SHORT CrackMe_.00401139
0040112C  |.  5F            POP EDI
0040112D  |.  5E            POP ESI
0040112E  |.  5D            POP EBP
0040112F  |.  33C0          XOR EAX,EAX
00401131  |.  5B            POP EBX
00401132  |.  81C4 FC010000 ADD ESP,1FC
00401138  |.  C3            RET
00401139  |>  8B8C24 100200>MOV ECX,DWORD PTR SS:[ESP+210]
00401140  |.  8D8424 280100>LEA EAX,DWORD PTR SS:[ESP+128]
00401147  |.  6A 65         PUSH 65                                  ; /Count = 65 (101.)
00401149  |.  50            PUSH EAX                                 ; |Buffer
0040114A  |.  68 E9030000   PUSH 3E9                                 ; |ControlID = 3E9 (1001.)
0040114F  |.  51            PUSH ECX                                 ; |hWnd
00401150  |.  FF15 C8904000 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA
00401156  |.  85C0          TEST EAX,EAX                             ;sn不能为空
00401158  |.  77 0D         JA SHORT CrackMe_.00401167
0040115A  |.  5F            POP EDI
0040115B  |.  5E            POP ESI
0040115C  |.  5D            POP EBP
0040115D  |.  33C0          XOR EAX,EAX
0040115F  |.  5B            POP EBX
00401160  |.  81C4 FC010000 ADD ESP,1FC
00401166  |.  C3            RET
00401167  |>  8B4424 18     MOV EAX,DWORD PTR SS:[ESP+18]
0040116B  |.  8D9424 280100>LEA EDX,DWORD PTR SS:[ESP+128]
00401172  |.  52            PUSH EDX
00401173  |.  50            PUSH EAX
00401174  |.  C787 34020000>MOV DWORD PTR DS:[EDI+234],0A
0040117E  |.  E8 4D2D0000   CALL <CrackMe_._cinstr>                  ;  sn转化为16进制=hex(sn)
00401183  |.  8B4C24 1C     MOV ECX,DWORD PTR SS:[ESP+1C]
00401187  |.  C787 34020000>MOV DWORD PTR DS:[EDI+234],10
00401191  |.  8B7C24 20     MOV EDI,DWORD PTR SS:[ESP+20]
00401195  |.  57            PUSH EDI
00401196  |.  51            PUSH ECX
00401197  |.  57            PUSH EDI                                 ;  110BA2EE0*hex(sn)=x1
00401198  |.  E8 D31D0000   CALL <CrackMe_._multiply>                ;  edi=edi*ecx
0040119D  |.  55            PUSH EBP                                 ; |Arg3
0040119E  |.  55            PUSH EBP                                 ; |Arg2
0040119F  |.  57            PUSH EDI                                 ; |Arg1
004011A0  |.  E8 3B230000   CALL <CrackMe_._divide>                  ; \CrackMe_.004034E0
004011A5  |.  8B4C24 30     MOV ECX,DWORD PTR SS:[ESP+30]            ;  edi=x1 mod 140000063=x2
004011A9  |.  83C4 20       ADD ESP,20
004011AC  |.  85C9          TEST ECX,ECX
004011AE  |.  76 30         JBE SHORT CrackMe_.004011E0
004011B0  |.  8DAC24 C40000>LEA EBP,DWORD PTR SS:[ESP+C4]
004011B7  |.  B8 01000000   MOV EAX,1
004011BC  |.  BF 4A42F483   MOV EDI,83F4424A
004011C1  |.  4D            DEC EBP
004011C2  |>  33D2          /XOR EDX,EDX
004011C4  |.  8A1428        |MOV DL,BYTE PTR DS:[EAX+EBP]
004011C7  |.  0FAFD0        |IMUL EDX,EAX
004011CA  |.  42            |INC EDX
004011CB  |.  0FAFD6        |IMUL EDX,ESI
004011CE  |.  33D7          |XOR EDX,EDI
004011D0  |.  81EF B6BD0B7C |SUB EDI,7C0BBDB6
004011D6  |.  40            |INC EAX
004011D7  |.  8BF2          |MOV ESI,EDX
004011D9  |.  8D50 FF       |LEA EDX,DWORD PTR DS:[EAX-1]
004011DC  |.  3BD1          |CMP EDX,ECX
004011DE  |.^ 72 E2         \JB SHORT CrackMe_.004011C2
004011E0  |>  33C0          XOR EAX,EAX
004011E2  |>  8BCE          /MOV ECX,ESI
004011E4  |.  C1E9 1F       |SHR ECX,1F
004011E7  |.  80E1 01       |AND CL,1
004011EA  |.  884C04 24     |MOV BYTE PTR SS:[ESP+EAX+24],CL
004011EE  |.  D1E6          |SHL ESI,1
004011F0  |.  40            |INC EAX
004011F1  |.  83F8 20       |CMP EAX,20
004011F4  |.^ 72 EC         \JB SHORT CrackMe_.004011E2
004011F6  |.  33F6          XOR ESI,ESI
004011F8  |>  33D2          /XOR EDX,EDX
004011FA  |.  6A 00         |PUSH 0
004011FC  |.  8A5434 28     |MOV DL,BYTE PTR SS:[ESP+ESI+28]
00401200  |.  8BFA          |MOV EDI,EDX
00401202  |.  0FAF7CB4 48   |IMUL EDI,DWORD PTR SS:[ESP+ESI*4+48]
00401207  |.  897CB4 48     |MOV DWORD PTR SS:[ESP+ESI*4+48],EDI
0040120B  |.  E8 60060000   |CALL <CrackMe_._mirvar>
00401210  |.  8BE8          |MOV EBP,EAX
00401212  |.  55            |PUSH EBP
00401213  |.  57            |PUSH EDI
00401214  |.  89ACB4 980100>|MOV DWORD PTR SS:[ESP+ESI*4+198],EBP
0040121B  |.  E8 D0050000   |CALL CrackMe_.004017F0
00401220  |.  53            |PUSH EBX
00401221  |.  53            |PUSH EBX
00401222  |.  55            |PUSH EBP
00401223  |.  E8 B81A0000   |CALL <CrackMe_._add>
00401228  |.  83C4 18       |ADD ESP,18
0040122B  |.  46            |INC ESI
0040122C  |.  83FE 20       |CMP ESI,20
0040122F  |.^ 7C C7         \JL SHORT CrackMe_.004011F8
00401231  |.  8B7424 20     MOV ESI,DWORD PTR SS:[ESP+20]
00401235  |.  56            PUSH ESI
00401236  |.  56            PUSH ESI
00401237  |.  53            PUSH EBX
00401238  |.  E8 A3220000   CALL <CrackMe_._divide>
0040123D  |.  8B7C24 24     MOV EDI,DWORD PTR SS:[ESP+24]
00401241  |.  57            PUSH EDI
00401242  |.  53            PUSH EBX
00401243  |.  E8 48130000   CALL <CrackMe_._compare>                 ;这里有个比较,只有相等才能注册成功
00401248  |.  83C4 14       ADD ESP,14
0040124B  |.  85C0          TEST EAX,EAX
0040124D  |.  56            PUSH ESI
0040124E  |.  74 57         JE SHORT CrackMe_.004012A7               ;  跳转要实现
00401250  |.  E8 EB0F0000   CALL <CrackMe_._mirkill>
00401255  |.  8B4424 18     MOV EAX,DWORD PTR SS:[ESP+18]
00401259  |.  50            PUSH EAX
0040125A  |.  E8 E10F0000   CALL <CrackMe_._mirkill>
0040125F  |.  8B4C24 24     MOV ECX,DWORD PTR SS:[ESP+24]
00401263  |.  51            PUSH ECX
00401264  |.  E8 D70F0000   CALL <CrackMe_._mirkill>
00401269  |.  53            PUSH EBX
0040126A  |.  E8 D10F0000   CALL <CrackMe_._mirkill>
0040126F  |.  57            PUSH EDI
00401270  |.  E8 CB0F0000   CALL <CrackMe_._mirkill>
00401275  |.  83C4 14       ADD ESP,14
00401278  |.  8DB424 8C0100>LEA ESI,DWORD PTR SS:[ESP+18C]
0040127F  |.  BF 20000000   MOV EDI,20
00401284  |>  8B16          /MOV EDX,DWORD PTR DS:[ESI]
00401286  |.  52            |PUSH EDX
00401287  |.  E8 B40F0000   |CALL <CrackMe_._mirkill>
0040128C  |.  83C4 04       |ADD ESP,4
0040128F  |.  83C6 04       |ADD ESI,4
00401292  |.  4F            |DEC EDI
00401293  |.^ 75 EF         \JNZ SHORT CrackMe_.00401284
00401295  |.  E8 C60F0000   CALL CrackMe_.00402260
0040129A  |.  5F            POP EDI
0040129B  |.  5E            POP ESI
0040129C  |.  5D            POP EBP
0040129D  |.  33C0          XOR EAX,EAX
0040129F  |.  5B            POP EBX
004012A0  |.  81C4 FC010000 ADD ESP,1FC
004012A6  |.  C3            RET
004012A7  |>  E8 940F0000   CALL <CrackMe_._mirkill>
004012AC  |.  8B4424 18     MOV EAX,DWORD PTR SS:[ESP+18]
004012B0  |.  50            PUSH EAX
004012B1  |.  E8 8A0F0000   CALL <CrackMe_._mirkill>
004012B6  |.  8B4C24 24     MOV ECX,DWORD PTR SS:[ESP+24]
004012BA  |.  51            PUSH ECX
004012BB  |.  E8 800F0000   CALL <CrackMe_._mirkill>
004012C0  |.  53            PUSH EBX
004012C1  |.  E8 7A0F0000   CALL <CrackMe_._mirkill>
004012C6  |.  57            PUSH EDI
004012C7  |.  E8 740F0000   CALL <CrackMe_._mirkill>
004012CC  |.  83C4 14       ADD ESP,14
004012CF  |.  8DB424 8C0100>LEA ESI,DWORD PTR SS:[ESP+18C]
004012D6  |.  BF 20000000   MOV EDI,20
004012DB  |>  8B16          /MOV EDX,DWORD PTR DS:[ESI]
004012DD  |.  52            |PUSH EDX
004012DE  |.  E8 5D0F0000   |CALL <CrackMe_._mirkill>
004012E3  |.  83C4 04       |ADD ESP,4
004012E6  |.  83C6 04       |ADD ESI,4
004012E9  |.  4F            |DEC EDI
004012EA  |.^ 75 EF         \JNZ SHORT CrackMe_.004012DB
004012EC  |.  E8 6F0F0000   CALL CrackMe_.00402260
004012F1  |.  5F            POP EDI
004012F2  |.  5E            POP ESI
004012F3  |.  5D            POP EBP
004012F4  |.  B8 01000000   MOV EAX,1
004012F9  |.  5B            POP EBX
004012FA  |.  81C4 FC010000 ADD ESP,1FC
00401300  \.  C3            RET

这个crackeme很简单  也很明了  我不做过多说明了
直接给出注册过程

(hex(sn)*110BA2EE0(固定数)) mod 140000063(固定数)=f(user)

只要等式成立就OK了

至于f(user),我是懒得看了  反正是拿用户名来乘下 或者除下  然后再加只类 一大堆  
这个不用管 因为程序在后面会给出结果,我们只要知道f(user)是一个固定的数即可。

这样的话把上面的式子简化下 并转为10进制如下:
y=(5368709219*x+87271158)/4575604448

只要x ,y都为整数即可。

那么就可以转变为求二元一次不定方程的问题。

这个不定方程对于没学过初等数论的朋友来说也许难了点。不过看过相关知识的 就EASY了。
我用手工5分钟就算了出来。
对于用户名是kyo327的可求出sn通解如下:

y=sn=3057556534+5368709219t
t=1,2,3,4,……

所以
user=kyo327
sn=3057556534+5368709219*t(t为自然数)

至于f(user)的算法  如果不写注册机  就不用分析了。
我反正懒得分析了 有点 烦琐哦。哪为有空人士可以跟一下哦   我大概看了下 应该也不难。

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
2
沙发,支持一个.
2007-7-31 08:33
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
3
唉,还好我昨天出去玩,没看这个cm,要不只会浪费时间,哈哈哈哈!
本人学历还没到那算法水平,
支持先~~
2007-7-31 08:58
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
楼上的太虚伪了!~``````
2007-7-31 09:00
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
5
GetDlgItemTextA断点很难隐之,其有GetDlgItem在后
2007-7-31 09:38
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
6
GetDlgItemTextA断点很难隐之,其有GetDlgItem在后
2007-7-31 09:46
0
雪    币: 926
活跃值: (437)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
7
这个怎么没人来写注册机了?都懒啊?
最多也就是把  f(user)从汇编代码从提出来而已啊
2007-8-4 14:42
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
8
这个算法在思路上有漏洞,请参考原贴的说明:
http://bbs.pediy.com/showthread.php?t=48775
2007-8-6 11:13
0
雪    币: 926
活跃值: (437)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=happytown;342295]这个算法在思路上有漏洞,请参考原贴的说明:
http://bbs.pediy.com/showthread.php?t=48775[/QUOTE]

我这种是根据f(user)来推注册码
你所说的另外的思路是不是就是 根据f(sn) 来推用户名啊?
2007-8-6 12:36
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
10
你的这种算法思路很对。
另外一种是根据用户名来计算sn,这个算法是一种只能用来加密的公开密钥算法。你可以根据其中所用常数的特点来推断使用了那种算法。
2007-8-6 16:53
0
游客
登录 | 注册 方可回帖
返回