首页
社区
课程
招聘
[原创]HappyTowns 第18个 CrackMe 算法分析加注册机
2007-4-10 20:35 6019

[原创]HappyTowns 第18个 CrackMe 算法分析加注册机

2007-4-10 20:35
6019
今天玩HappyTowns 第18个 CrackMe .做出了注册机.然后去对照以前有人写的分析
发现haapytown有如下评价
"据我所知,这个程序的注册机需计算一个矩阵的逆矩阵,可我在你的分析中没有看到任何关于这方面的描述。所以...D:  

兄弟,你最近表现很积极,不错,鼓励一下。:"
看了后我觉得这位兄弟的确不是真正的算法分析
于是我就写了此文  希望广大大牛们  批评指正
多余的就不多说了  代码中不必要的注释 我也省去了  反正大家都看的懂  省得说我写的是废话
呵呵:)
首先断在下面

0040118C  |.  8BF0          MOV ESI,EAX
0040118E  |.  83FE 04       CMP ESI,4                                ;  用户名长度不能小于4
00401191  |.  0F8C CA000000 JL CrackMe_.00401261
00401197  |.  8BCE          MOV ECX,ESI
00401199  |.  81E1 01000080 AND ECX,80000001
0040119F  |.  79 05         JNS SHORT CrackMe_.004011A6
004011A1  |.  49            DEC ECX
004011A2  |.  83C9 FE       OR ECX,FFFFFFFE
004011A5  |.  41            INC ECX
004011A6  |>  0F85 B5000000 JNZ CrackMe_.00401261                    ;  用户名长度要为偶数
004011AC  |.  8D9424 D80000>LEA EDX,DWORD PTR SS:[ESP+D8]
004011B3  |.  56            PUSH ESI
004011B4  |.  52            PUSH EDX
004011B5  |.  E8 B6000000   CALL CrackMe_.00401270                   ;  这个CALL是验证用户名字符必须要在A-Z和a-z之间
004011BA  |.  83C4 08       ADD ESP,8
004011BD  |.  85C0          TEST EAX,EAX
004011BF  |.  0F84 9C000000 JE CrackMe_.00401261
004011C5  |.  8D4424 10     LEA EAX,DWORD PTR SS:[ESP+10]
004011C9  |.  68 C9000000   PUSH 0C9
004011CE  |.  50            PUSH EAX
004011CF  |.  68 E9030000   PUSH 3E9
004011D4  |.  57            PUSH EDI
004011D5  |.  FFD5          CALL EBP
004011D7  |.  3BC6          CMP EAX,ESI                              ;  密码长度要和用户名长度相等
004011D9  |.  0F85 82000000 JNZ CrackMe_.00401261
004011DF  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
004011E3  |.  50            PUSH EAX
004011E4  |.  51            PUSH ECX
004011E5  |.  E8 86000000   CALL CrackMe_.00401270                   ;  这个CALL是验证密码字符必须要在A-Z和a-z之间
004011EA  |.  83C4 08       ADD ESP,8
004011ED  |.  85C0          TEST EAX,EAX
004011EF  |.  74 70         JE SHORT CrackMe_.00401261
004011F1  |.  8BC6          MOV EAX,ESI
004011F3  |.  33FF          XOR EDI,EDI
004011F5  |.  99            CDQ
004011F6  |.  2BC2          SUB EAX,EDX
004011F8  |.  8BE8          MOV EBP,EAX
004011FA  |.  D1FD          SAR EBP,1                                ;   用户名长度除以2做循环
004011FC  |.  3BEB          CMP EBP,EBX
004011FE  |.  7E 51         JLE SHORT CrackMe_.00401251
00401200  |>  8A4C7C 11     /MOV CL,BYTE PTR SS:[ESP+EDI*2+11]
00401204  |.  8A447C 10     |MOV AL,BYTE PTR SS:[ESP+EDI*2+10]
00401208  |.  80E9 41       |SUB CL,41
0040120B  |.  2C 41         |SUB AL,41
0040120D  |.  0FBEF1        |MOVSX ESI,CL
00401210  |.  0FBEC8        |MOVSX ECX,AL
00401213  |.  BB 1A000000   |MOV EBX,1A
00401218  |.  8D14C9        |LEA EDX,DWORD PTR DS:[ECX+ECX*8]
0040121B  |.  8D0472        |LEA EAX,DWORD PTR DS:[EDX+ESI*2]
0040121E  |.  99            |CDQ
0040121F  |.  F7FB          |IDIV EBX
00401221  |.  0FBE847C D800>|MOVSX EAX,BYTE PTR SS:[ESP+EDI*2+D8]
00401229  |.  83E8 41       |SUB EAX,41
0040122C  |.  3BD0          |CMP EDX,EAX
0040122E  |.  75 31         |JNZ SHORT CrackMe_.00401261
00401230  |.  8D0476        |LEA EAX,DWORD PTR DS:[ESI+ESI*2]
00401233  |.  8D0C81        |LEA ECX,DWORD PTR DS:[ECX+EAX*4]
00401236  |.  03C1          |ADD EAX,ECX
00401238  |.  8BCB          |MOV ECX,EBX
0040123A  |.  99            |CDQ
0040123B  |.  F7F9          |IDIV ECX
0040123D  |.  0FBE847C D900>|MOVSX EAX,BYTE PTR SS:[ESP+EDI*2+D9]
00401245  |.  83E8 41       |SUB EAX,41
00401248  |.  3BD0          |CMP EDX,EAX
0040124A  |.  75 15         |JNZ SHORT CrackMe_.00401261
0040124C  |.  47            |INC EDI
0040124D  |.  3BFD          |CMP EDI,EBP
0040124F  |.^ 7C AF         \JL SHORT CrackMe_.00401200
00401251  |>  5F            POP EDI
00401252  |.  5E            POP ESI
00401253  |.  5D            POP EBP
00401254  |.  B8 01000000   MOV EAX,1
00401259  |.  5B            POP EBX
0040125A  |.  81C4 90010000 ADD ESP,190
00401260  |.  C3            RETN
00401261  |>  5F            POP EDI
00401262  |.  5E            POP ESI
00401263  |.  5D            POP EBP
00401264  |.  33C0          XOR EAX,EAX
00401266  |.  5B            POP EBX
00401267  |.  81C4 90010000 ADD ESP,190
0040126D  \.  C3            RETN
0040126E      90            NOP
0040126F      90            NOP
00401270  /$  53            PUSH EBX
00401271  |.  8B5C24 0C     MOV EBX,DWORD PTR SS:[ESP+C]
00401275  |.  56            PUSH ESI
00401276  |.  33F6          XOR ESI,ESI
00401278  |.  85DB          TEST EBX,EBX
0040127A  |.  57            PUSH EDI
0040127B  |.  7E 4D         JLE SHORT CrackMe_.004012CA
0040127D  |.  8B7C24 10     MOV EDI,DWORD PTR SS:[ESP+10]
00401281  |>  833D E0624000>/CMP DWORD PTR DS:[4062E0],1
00401288  |.  7E 14         |JLE SHORT CrackMe_.0040129E
0040128A  |.  0FBE043E      |MOVSX EAX,BYTE PTR DS:[ESI+EDI]
0040128E  |.  68 03010000   |PUSH 103
00401293  |.  50            |PUSH EAX
00401294  |.  E8 13010000   |CALL CrackMe_.004013AC
00401299  |.  83C4 08       |ADD ESP,8
0040129C  |.  EB 13         |JMP SHORT CrackMe_.004012B1
0040129E  |>  0FBE0C3E      |MOVSX ECX,BYTE PTR DS:[ESI+EDI]
004012A2  |.  8B15 D4604000 |MOV EDX,DWORD PTR DS:[4060D4]           ;  CrackMe_.004060DE
004012A8  |.  66:8B044A     |MOV AX,WORD PTR DS:[EDX+ECX*2]
004012AC  |.  25 03010000   |AND EAX,103
004012B1  |>  85C0          |TEST EAX,EAX
004012B3  |.  74 1E         |JE SHORT CrackMe_.004012D3
004012B5  |.  0FBE043E      |MOVSX EAX,BYTE PTR DS:[ESI+EDI]
004012B9  |.  50            |PUSH EAX
004012BA  |.  E8 21000000   |CALL CrackMe_.004012E0
004012BF  |.  83C4 04       |ADD ESP,4
004012C2  |.  88043E        |MOV BYTE PTR DS:[ESI+EDI],AL
004012C5  |.  46            |INC ESI
004012C6  |.  3BF3          |CMP ESI,EBX
004012C8  |.^ 7C B7         \JL SHORT CrackMe_.00401281
004012CA  |>  5F            POP EDI
004012CB  |.  5E            POP ESI
004012CC  |.  B8 01000000   MOV EAX,1
004012D1  |.  5B            POP EBX
004012D2  |.  C3            RETN
004012D3  |>  5F            POP EDI
004012D4  |.  5E            POP ESI
004012D5  |.  33C0          XOR EAX,EAX
004012D7  |.  5B            POP EBX
004012D8  \.  C3            RETN

用户名长度不能小于4
用户名长度要为偶数
用户名字符必须要在A-Z和a-z之间
密码长度要和用户名长度相等
密码字符必须要在A-Z和a-z之间

算法如下
密码转换为大写  用户名也转为大写
pass1(就是密码第一位)   user1(就是用户名第一位)
(pass1-41)*9+(pass2-41)*2=x
x mod 1a=y
(user1-41)与y比较 相等则OK

(pass2-41)*3*4+(pass1-41)+(pass2-41)*3=x1
x1 mod 1a=y1
(user2-41)与y1比较相等则OK

以下同 循环比较第3位第4位第5位第6位等等
全部通过验证就OK
然后逆推一下
假设用户名为kyol    k=6b   y=79
4b-41=[(pass1-41)*9+(pass2-41)*2] mod 1a
59-41=[(pass2-41)*3*4+(pass1-41)+(pass2-41)*3] mod 1a
因为都转换为了大写  再减41刚好等于在26个字符中的位置  因此上面方程可以转换为这样 (16进制也转为10进制,这样好看一些)
10=(pass1*9+pass2*2) mod 26
24=(pass1+pass2*15) mod 26  pass1=8   pass2=8
则pass1=49 为 i pass2=49 为  i

下面解第3位与第4位
o为第14个   l为第11个  
14=(pass3*9+pass4*2) mod 26
11=(pass3+pass4*15) mod 26   pass3=2   pass4=11
则pass3=c       pass4=l

所以 用户名为:kyol   密码为:iicl

为了写注册机 我算出了 上面方程的通解
如下:
pass2=(((9*user2-user1)+26*((9*user2-user1) mod 3))/3) mod 26
pass1=(user2-15*pass2) mod 26

根据这个通解 可写出如下注册机  VB写的  代码如下

Private Sub Command1_Click()
Dim tmp As Long
tmp = Len(Text1.Text)
If tmp < 4 Then
MsgBox ("用户名长度不能小于4")
Exit Sub
End If

tmp1 = tmp Mod 2
If tmp1 <> 0 Then
MsgBox ("用户名长度必须为偶数")
Exit Sub
End If

For i = 1 To tmp
tmp3 = Mid(Text1.Text, i, 1)
If (Asc(tmp3) < 97 And Asc(tmp3) > 90) Or (Asc(tmp3) > 122) Or (Asc(tmp3) < 65) Then
MsgBox ("用户名必须为a-z或者A-Z之间的字符")
Exit Sub
Exit For
End If
Next i

For ii = 1 To tmp
tmp4 = Asc(Mid(Text1.Text, ii, 1))
If tmp4 > 96 Then
tmp5 = tmp5 + Chr(tmp4 - 32)
Else
tmp5 = tmp5 + Chr(tmp4)
End If
Next ii

For p = 1 To tmp Step 2
        Y1 = Asc(Mid(tmp5, p, 1)) - 65
        Y2 = Asc(Mid(tmp5, p + 1, 1)) - 65
        X2 = ((9 * Y2 - Y1 + 26 * ((9 * Y2 - Y1) Mod 3)) / 3) Mod 26
        X1 = (Y2 - 15 * X2) Mod 26
        If X1 < 0 Then
            X1 = X1 + 26
        End If

        If X2 < 0 Then
            X2 = X2 + 26
        End If

        tmp6 = tmp6 + Chr(X1 + 97)
        tmp6 = tmp6 + Chr(X2 + 97)
    Next p
    Text2.Text = tmp6

End Sub

另外  在这里 谢谢 "不懂算法" 大牛,  是他帮我搞出了通解  才能写出注册机!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 7
打赏
分享
最新回复 (5)
雪    币: 926
活跃值: (367)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
humourkyo 12 2007-4-11 11:44
2
0
希望HappyTown斑竹  出来检查一下  看我这个是不是真正的算法注册机!
这篇文章花了我1天的时间的,特别是最后那个通解的算法  我觉得还是算不错的!
望大家批评指正!!!
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
happytown 31 2007-4-11 19:23
3
0
呵呵,你的分析很正确,这个是Hill加密算法,属古典类。
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg 2007-4-11 20:22
4
0
凡是happytown老大的都留个脚印,期待以后尽量看懂!感谢!
雪    币: 214
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
仙剑太郎 2 2007-4-13 17:56
5
0
不错..学习中..
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nuke 2007-4-13 21:30
6
0
比我分析的好啊
游客
登录 | 注册 方可回帖
返回