首页
社区
课程
招聘
HappyTowns 第17个 CrackMe 算法分析
发表于: 2007-4-9 22:11 6730

HappyTowns 第17个 CrackMe 算法分析

2007-4-9 22:11
6730

第一次写这东西  看到这个
HappyTowns 第17个 CrackMe 好象没有人给出全面的解答。  我 就分析了一下  不过我写不出注册机啊
大家别笑我:)

先断到下面:

004011C8  |.  8BF0          MOV ESI,EAX                              ;  用户名长度不能小于6
004011CA  |.  83FE 06       CMP ESI,6
004011CD  |.  0F8C 3B020000 JL CrackMe_.0040140E
004011D3  |.  83FE 0F       CMP ESI,0F                               ;  用户名长度不能大于15
004011D6  |.  0F8F 32020000 JG CrackMe_.0040140E
004011DC  |.  8D4C24 4C     LEA ECX,DWORD PTR SS:[ESP+4C]
004011E0  |.  56            PUSH ESI
004011E1  |.  51            PUSH ECX
004011E2  |.  E8 39020000   CALL CrackMe_.00401420                   ;  小写字母转换成大写
004011E7  |.  83C4 08       ADD ESP,8
004011EA  |.  85C0          TEST EAX,EAX
004011EC  |.  0F84 1C020000 JE CrackMe_.0040140E
004011F2  |.  33ED          XOR EBP,EBP
004011F4  |.  33C9          XOR ECX,ECX
004011F6  |.  3BF5          CMP ESI,EBP
004011F8  |.  7E 2F         JLE SHORT CrackMe_.00401229
004011FA  |>  33FF          /XOR EDI,EDI
004011FC  |.  3BCD          |CMP ECX,EBP
004011FE  |.  7E 24         |JLE SHORT CrackMe_.00401224
00401200  |>  8A543C 4C     |/MOV DL,BYTE PTR SS:[ESP+EDI+4C]
00401204  |.  8A440C 4C     ||MOV AL,BYTE PTR SS:[ESP+ECX+4C]
00401208  |.  3AD0          ||CMP DL,AL                              ;  用户名必须为a-z  A-Z之间字符
0040120A  |.  75 13         ||JNZ SHORT CrackMe_.0040121F
0040120C  |.  3BCE          ||CMP ECX,ESI
0040120E  |.  8BC1          ||MOV EAX,ECX
00401210  |.  7D 0D         ||JGE SHORT CrackMe_.0040121F
00401212  |>  8A5404 4D     ||/MOV DL,BYTE PTR SS:[ESP+EAX+4D]
00401216  |.  885404 4C     |||MOV BYTE PTR SS:[ESP+EAX+4C],DL
0040121A  |.  40            |||INC EAX
0040121B  |.  3BC6          |||CMP EAX,ESI
0040121D  |.^ 7C F3         ||\JL SHORT CrackMe_.00401212
0040121F  |>  47            ||INC EDI
00401220  |.  3BF9          ||CMP EDI,ECX
00401222  |.^ 7C DC         |\JL SHORT CrackMe_.00401200
00401224  |>  41            |INC ECX
00401225  |.  3BCE          |CMP ECX,ESI
00401227  |.^ 7C D1         \JL SHORT CrackMe_.004011FA
00401229  |>  8D4424 4C     LEA EAX,DWORD PTR SS:[ESP+4C]
0040122D  |.  50            PUSH EAX                                 ; /String
0040122E  |.  FF15 04504000 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \lstrlenA
00401234  |.  8BF0          MOV ESI,EAX
00401236  |.  83FE 06       CMP ESI,6
00401239  |.  0F8C CF010000 JL CrackMe_.0040140E
0040123F  |.  8D4C24 4C     LEA ECX,DWORD PTR SS:[ESP+4C]
00401243  |.  8D5424 20     LEA EDX,DWORD PTR SS:[ESP+20]
00401247  |.  51            PUSH ECX                                 ; /String2
00401248  |.  52            PUSH EDX                                 ; |String1
00401249  |.  FF15 00504000 CALL DWORD PTR DS:[<&KERNEL32.lstrcpyA>] ; \lstrcpyA
0040124F  |.  B3 41         MOV BL,41
00401251  |.  896C24 10     MOV DWORD PTR SS:[ESP+10],EBP
00401255  |.  8D7434 20     LEA ESI,DWORD PTR SS:[ESP+ESI+20]
00401259  |>  80FB 4A       /CMP BL,4A
0040125C  |.  75 0A         |JNZ SHORT CrackMe_.00401268
0040125E  |.  B3 49         |MOV BL,49
00401260  |.  C74424 10 010>|MOV DWORD PTR SS:[ESP+10],1
00401268  |>  0FBEC3        |MOVSX EAX,BL
0040126B  |.  8D4C24 20     |LEA ECX,DWORD PTR SS:[ESP+20]
0040126F  |.  50            |PUSH EAX
00401270  |.  51            |PUSH ECX
00401271  |.  E8 2A020000   |CALL CrackMe_.004014A0
00401276  |.  83C4 08       |ADD ESP,8
00401279  |.  85C0          |TEST EAX,EAX
0040127B  |.  75 03         |JNZ SHORT CrackMe_.00401280
0040127D  |.  881E          |MOV BYTE PTR DS:[ESI],BL
0040127F  |.  46            |INC ESI
00401280  |>  8A5424 10     |MOV DL,BYTE PTR SS:[ESP+10]
00401284  |.  896C24 10     |MOV DWORD PTR SS:[ESP+10],EBP
00401288  |.  FEC2          |INC DL
0040128A  |.  02DA          |ADD BL,DL
0040128C  |.  80FB 5B       |CMP BL,5B
0040128F  |.^ 75 C8         \JNZ SHORT CrackMe_.00401259
00401291  |.  8B8C24 E00100>MOV ECX,DWORD PTR SS:[ESP+1E0]
00401298  |.  8D8424 140100>LEA EAX,DWORD PTR SS:[ESP+114]
0040129F  |.  68 C9000000   PUSH 0C9                                 ; /Count = C9 (201.)
004012A4  |.  50            PUSH EAX                                 ; |Buffer
004012A5  |.  68 E9030000   PUSH 3E9                                 ; |ControlID = 3E9 (1001.)
004012AA  |.  51            PUSH ECX                                 ; |hWnd
004012AB  |.  FF15 AC504000 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA
004012B1  |.  83F8 0E       CMP EAX,0E                               ;  密码长度必须为14位
004012B4  |.  0F85 54010000 JNZ CrackMe_.0040140E
004012BA  |.  8D9424 140100>LEA EDX,DWORD PTR SS:[ESP+114]
004012C1  |.  50            PUSH EAX
004012C2  |.  52            PUSH EDX
004012C3  |.  E8 58010000   CALL CrackMe_.00401420                   ;  密码必须为a-z  A-Z之间字符
004012C8  |.  83C4 08       ADD ESP,8
004012CB  |.  85C0          TEST EAX,EAX
004012CD  |.  0F84 3B010000 JE CrackMe_.0040140E
004012D3  |.  8B5C24 10     MOV EBX,DWORD PTR SS:[ESP+10]
004012D7  |.  896C24 1C     MOV DWORD PTR SS:[ESP+1C],EBP
004012DB  |.  8B6C24 1C     MOV EBP,DWORD PTR SS:[ESP+1C]
004012DF  |.  8B7C24 1C     MOV EDI,DWORD PTR SS:[ESP+1C]
004012E3  |>  8B4424 1C     /MOV EAX,DWORD PTR SS:[ESP+1C]
004012E7  |.  8A9404 140100>|MOV DL,BYTE PTR SS:[ESP+EAX+114]
004012EE  |.  8A8C04 150100>|MOV CL,BYTE PTR SS:[ESP+EAX+115]
004012F5  |.  8DB404 150100>|LEA ESI,DWORD PTR SS:[ESP+EAX+115]
004012FC  |.  80FA 4A       |CMP DL,4A
004012FF  |.  884C24 17     |MOV BYTE PTR SS:[ESP+17],CL
00401303  |.  75 02         |JNZ SHORT CrackMe_.00401307
00401305  |.  B2 49         |MOV DL,49
00401307  |>  33C9          |XOR ECX,ECX
00401309  |.  8D7424 20     |LEA ESI,DWORD PTR SS:[ESP+20]
0040130D  |>  33C0          |/XOR EAX,EAX
0040130F  |>  381406        ||/CMP BYTE PTR DS:[ESI+EAX],DL
00401312  |.  75 0A         |||JNZ SHORT CrackMe_.0040131E
00401314  |.  8B5C24 10     |||MOV EBX,DWORD PTR SS:[ESP+10]
00401318  |.  8BE9          |||MOV EBP,ECX
0040131A  |.  894424 18     |||MOV DWORD PTR SS:[ESP+18],EAX
0040131E  |>  40            |||INC EAX
0040131F  |.  83F8 05       |||CMP EAX,5
00401322  |.^ 7C EB         ||\JL SHORT CrackMe_.0040130F
00401324  |.  41            ||INC ECX
00401325  |.  83C6 05       ||ADD ESI,5
00401328  |.  83F9 05       ||CMP ECX,5
0040132B  |.^ 7C E0         |\JL SHORT CrackMe_.0040130D
0040132D  |.  33F6          |XOR ESI,ESI
0040132F  |.  8D4C24 20     |LEA ECX,DWORD PTR SS:[ESP+20]
00401333  |>  33C0          |/XOR EAX,EAX
00401335  |>  8A5424 17     ||/MOV DL,BYTE PTR SS:[ESP+17]
00401339  |.  3811          |||CMP BYTE PTR DS:[ECX],DL
0040133B  |.  75 04         |||JNZ SHORT CrackMe_.00401341
0040133D  |.  8BFE          |||MOV EDI,ESI
0040133F  |.  8BD8          |||MOV EBX,EAX
00401341  |>  40            |||INC EAX
00401342  |.  41            |||INC ECX
00401343  |.  83F8 05       |||CMP EAX,5
00401346  |.^ 7C ED         ||\JL SHORT CrackMe_.00401335
00401348  |.  46            ||INC ESI
00401349  |.  83FE 05       ||CMP ESI,5
0040134C  |.^ 7C E5         |\JL SHORT CrackMe_.00401333
0040134E  |.  3BEF          |CMP EBP,EDI
00401350  |.  895C24 10     |MOV DWORD PTR SS:[ESP+10],EBX
00401354  |.  75 3A         |JNZ SHORT CrackMe_.00401390
00401356  |.  8B4424 18     |MOV EAX,DWORD PTR SS:[ESP+18]
0040135A  |.  85C0          |TEST EAX,EAX
0040135C  |.  75 0A         |JNZ SHORT CrackMe_.00401368
0040135E  |.  C74424 18 040>|MOV DWORD PTR SS:[ESP+18],4
00401366  |.  EB 04         |JMP SHORT CrackMe_.0040136C
00401368  |>  FF4C24 18     |DEC DWORD PTR SS:[ESP+18]
0040136C  |>  85DB          |TEST EBX,EBX
0040136E  |.  75 07         |JNZ SHORT CrackMe_.00401377
00401370  |.  BB 04000000   |MOV EBX,4
00401375  |.  EB 01         |JMP SHORT CrackMe_.00401378
00401377  |>  4B            |DEC EBX
00401378  |>  8B4424 18     |MOV EAX,DWORD PTR SS:[ESP+18]
0040137C  |.  8BD5          |MOV EDX,EBP
0040137E  |.  895C24 10     |MOV DWORD PTR SS:[ESP+10],EBX
00401382  |.  8D0CA8        |LEA ECX,DWORD PTR DS:[EAX+EBP*4]
00401385  |.  03D1          |ADD EDX,ECX
00401387  |.  8D0CBB        |LEA ECX,DWORD PTR DS:[EBX+EDI*4]
0040138A  |.  8A4414 20     |MOV AL,BYTE PTR SS:[ESP+EDX+20]
0040138E  |.  EB 46         |JMP SHORT CrackMe_.004013D6
00401390  |>  8B4C24 18     |MOV ECX,DWORD PTR SS:[ESP+18]
00401394  |.  3BCB          |CMP ECX,EBX
00401396  |.  75 30         |JNZ SHORT CrackMe_.004013C8
00401398  |.  85ED          |TEST EBP,EBP
0040139A  |.  75 07         |JNZ SHORT CrackMe_.004013A3
0040139C  |.  BD 04000000   |MOV EBP,4
004013A1  |.  EB 01         |JMP SHORT CrackMe_.004013A4
004013A3  |>  4D            |DEC EBP
004013A4  |>  85FF          |TEST EDI,EDI
004013A6  |.  75 07         |JNZ SHORT CrackMe_.004013AF
004013A8  |.  BF 04000000   |MOV EDI,4
004013AD  |.  EB 01         |JMP SHORT CrackMe_.004013B0
004013AF  |>  4F            |DEC EDI
004013B0  |>  8D04A9        |LEA EAX,DWORD PTR DS:[ECX+EBP*4]
004013B3  |.  8BCD          |MOV ECX,EBP
004013B5  |.  03C8          |ADD ECX,EAX
004013B7  |.  8D14BB        |LEA EDX,DWORD PTR DS:[EBX+EDI*4]
004013BA  |.  8A440C 20     |MOV AL,BYTE PTR SS:[ESP+ECX+20]
004013BE  |.  8BCF          |MOV ECX,EDI
004013C0  |.  03CA          |ADD ECX,EDX
004013C2  |.  8A4C0C 20     |MOV CL,BYTE PTR SS:[ESP+ECX+20]
004013C6  |.  EB 16         |JMP SHORT CrackMe_.004013DE
004013C8  |>  8D14AB        |LEA EDX,DWORD PTR DS:[EBX+EBP*4]
004013CB  |.  8BC5          |MOV EAX,EBP
004013CD  |.  03C2          |ADD EAX,EDX
004013CF  |.  8D0CB9        |LEA ECX,DWORD PTR DS:[ECX+EDI*4]
004013D2  |.  8A4404 20     |MOV AL,BYTE PTR SS:[ESP+EAX+20]
004013D6  |>  8BD7          |MOV EDX,EDI
004013D8  |.  03D1          |ADD EDX,ECX
004013DA  |.  8A4C14 20     |MOV CL,BYTE PTR SS:[ESP+EDX+20]
004013DE  |>  8B5424 1C     |MOV EDX,DWORD PTR SS:[ESP+1C]
004013E2  |.  3A4414 3C     |CMP AL,BYTE PTR SS:[ESP+EDX+3C]
004013E6  |.  75 26         |JNZ SHORT CrackMe_.0040140E
004013E8  |.  3A4C14 3D     |CMP CL,BYTE PTR SS:[ESP+EDX+3D]
004013EC  |.  75 20         |JNZ SHORT CrackMe_.0040140E
004013EE  |.  83C2 02       |ADD EDX,2
004013F1  |.  83FA 0E       |CMP EDX,0E
004013F4  |.  895424 1C     |MOV DWORD PTR SS:[ESP+1C],EDX
004013F8  |.^ 0F8C E5FEFFFF \JL CrackMe_.004012E3
004013FE  |.  5F            POP EDI
004013FF  |.  5E            POP ESI
00401400  |.  5D            POP EBP
00401401  |.  B8 01000000   MOV EAX,1
00401406  |.  5B            POP EBX
00401407  |.  81C4 CC010000 ADD ESP,1CC
0040140D  |.  C3            RETN
0040140E  |>  5F            POP EDI
0040140F  |.  5E            POP ESI
00401410  |.  5D            POP EBP
00401411  |.  33C0          XOR EAX,EAX
00401413  |.  5B            POP EBX
00401414  |.  81C4 CC010000 ADD ESP,1CC
0040141A  \.  C3            RETN

用户名长度要在6-15之间
用户名只能是a-z   A-Z之间的字符

密码必须长度为14
密码只能是a-z   A-Z之间的字符

输入的用户名每一个字符最好不要重复 因为前面做了验证 有重复的字母有可能会去掉一些。

例如:输入用户名为KYOFGH然后做一个运算 构造一个字符串为

KYOFGHABCDEILMNPQRSTUVWXZ      把26个字符其余的的字符在后面补齐(除了字母J)

把以上字符分为5组
KYOFG HABCD EILMN PQRST UVWXZ
  0     1     2     3     4

取密码第一位字符在上面的字符串中寻找
如果密码中含有J则让J=I
找到后 ebp=找到后的组数=z1   [esp+18]=找到后的第几个字符=z2

取密码第二位字符在上面的字符串中寻找
找到后 edi=找到后的组数=y1   ebx=[esp+10]=找到后的第几个字符=y2

比较密码前2位找到的组数是否相同
如果不同:则看找的第x个字符中的x是否相同:如果不同
则al=上面字符串中第(y2+z1*4+z1)个字符
cl=上面字符串中第(z2+y1*4+y1)个字符

如果组数不相同 第x个字符中的x相同。则看z1是否为0(不等0则减1,等0则变为4)
再看y1是否为0,(不等0则减1,等0则变为4)
则al=上面字符串中第(z2+z1*4+z1)个字符
cl=上面字符串中第(y2+y1*4+y1)个字符

如果密码前2位找到的组数相同:找的第x个字符中的x都减1
则al=上面字符串中第(z2-1+z1*4+z1)个字符
cl=上面字符串中第(y2-1+y1*4+y1)个字符

程序中有一字符串:CRACKINGFORFUN
分别取这个字符串2位 取7次 跟密码换算后比较
因为注册成功需要al=C    cl=R
所以,
al=第8个字符    cl=第17个字符

可分别解上面方程组看哪种适合得出pass1=b   pass2=s

(在这里我解一个给大家看)

(首先 y2+z1*4+z1=8
     z2+y1*4+y1=17 (这个方程要z1<>y1  z2<>y2)
并且y1 y2 z1 z2都属于(0,1,2,3,4)里面的值
那么解出来z1=1  z2=2  y1=3  y2=3
因为这个方程条件是z1<>y1  z2<>y2
所以解是成立的 则密码第一位就是第一组中的第2个字符 就是b

密码第二位就是第3组中的第3个字符 就是s)

再看密码第3位与第4位
al=A              cl=C
al=第6个字符    cl=第8个字符
可分别解上面方程组看哪种适合得出pass3=b   pass4=d
再看密码第5位与第6位
al=K               cl=I
al=第0个字符    cl=第11个字符
可分别解上面方程组看哪种适合得出pass5=y   pass6=e
再看密码第7位与第8位
al=N               cl=G
al=第14个字符    cl=第4个字符
(这个方程有点特殊 我也解一下)
首先还是
     y2+z1*4+z1=14
     z2+y1*4+y1=4 (这个方程要z1<>y1  z2<>y2)
解出来z1=2 z2=4  y1=0   y2=4
但是 方程条件为 这个方程要z1<>y1  z2<>y2  所以这个方程不成立
再看下面这个z2-1+z1*4+z1=14
            y2-1+y1*4+y1=4  (方程条件为z1=y1)
解出来z1=3 z2=0 y1=1   y2=0   因为条件是z1=y1所以也不成立

再看第3个方程
     z2+z1*4+z1=14
     y2+y1*4+y1=4    (方程条件为z1<>y1,z2=y2,则看z1是否为0(不等0则减1,等0则变为4)

再看y1是否为0,(不等0则减1,等0则变为4)
解出来 z1=2 z2=4  y1=0  y2=4
看来符合条件  那么z1=2+1=3   y1=0+1=1
所以   则密码第7位就是第3组中的第4个字符 就是t

密码第8位就是第1组中的第4个字符 就是d

可分别解上面方程组看哪种适合得出pass7=t   pass8=d

再看密码第9位与第10位
al=F               cl=O
al=第3个字符    cl=第2个字符
可分别解上面方程组看哪种适合得出pass9=g   pass10=f

再看密码第11位与第12位
al=R               cl=F
al=第17个字符    cl=第3个字符
可分别解上面方程组看哪种适合得出pass11=s   pass12=o

再看密码第13位与第14位
al=U               cl=N
al=第20个字符    cl=第14个字符
可分别解上面方程组看哪种适合得出pass13=z   pass14=e

所以用户名为:kyofgh密码为:bsbdyetdgfsoze

好了 基本上就是这样
我水平低  不知道有什么简便的算法  希望大家批评指点。


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

收藏
免费 7
支持
分享
最新回复 (3)
雪    币: 202
活跃值: (77)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
分析的好,楼主nb,顶一个
2007-4-10 15:29
0
雪    币: 184
活跃值: (47)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
呵呵,不错,支持下,学习收藏了!
2007-4-10 19:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请给出 CrackMe 的下载地址。
2007-4-17 11:33
0
游客
登录 | 注册 方可回帖
返回
//