首页
社区
课程
招聘
[原创]happytown第38个crackeme分析
2007-5-4 18:14 7828

[原创]happytown第38个crackeme分析

2007-5-4 18:14
7828
这些日子有空的话一直在玩HAPPYTOWN的CRACKEME系列。虽然这个38个有人写了文章。但是我还是想写下此文,就当自己高兴也行。如果看雪觉得重复的话 删掉也行。
只是 我从HAPPYTOWN的第1个一直玩到第38个,除了第9个(被HAPPYTOWN标的难度吓的没敢入手)和第26个(椭圆曲线没有复习这方面知识,所以也还没下手)。其他的基本上我都自己独立分析出来了,不过倒是没写几个注册机,可能是懒吧:)
我想说的就是,这几十个CRACKME,我最喜欢的就是这个第38个。
所以 我呢,自己把心得写下来。
因为我是新手,那个HASH算法汇编代码提取,我估计还没这个功力,我在文中用了 较为巧妙的办法,也许能给大家带来帮助。

好了,进入正题。
IDA加载  导出MAP文件   OD加载MAP  只有几个函数认出来了
断到下面:

004010CC  |.  83F8 02       CMP EAX,2       ;用户名长度不能小于2
004010CF  |.  73 0C         JNB SHORT CrackMe_.004010DD
004010D1  |.  5F            POP EDI
004010D2  |.  5E            POP ESI
004010D3  |.  33C0          XOR EAX,EAX
004010D5  |.  5B            POP EBX
004010D6  |.  81C4 D4020000 ADD ESP,2D4
004010DC  |.  C3            RETN
004010DD  |>  8D8C24 500100>LEA ECX,DWORD PTR SS:[ESP+150]
004010E4  |.  68 C9000000   PUSH 0C9
004010E9  |.  51            PUSH ECX
004010EA  |.  68 EE030000   PUSH 3EE
004010EF  |.  56            PUSH ESI
004010F0  |.  FFD7          CALL EDI
004010F2  |.  83F8 02       CMP EAX,2     ;group长度不能小于2
004010F5  |.  73 0C         JNB SHORT CrackMe_.00401103
004010F7  |.  5F            POP EDI
004010F8  |.  5E            POP ESI
004010F9  |.  33C0          XOR EAX,EAX
004010FB  |.  5B            POP EBX
004010FC  |.  81C4 D4020000 ADD ESP,2D4
00401102  |.  C3            RETN
00401103  |>  8D9424 180200>LEA EDX,DWORD PTR SS:[ESP+218]
0040110A  |.  68 C9000000   PUSH 0C9
0040110F  |.  52            PUSH EDX
00401110  |.  68 EF030000   PUSH 3EF
00401115  |.  56            PUSH ESI
00401116  |.  FFD7          CALL EDI
00401118  |.  85C0          TEST EAX,EAX ; 密码不能为空
0040111A  |.  75 0A         JNZ SHORT CrackMe_.00401126
0040111C  |.  5F            POP EDI
0040111D  |.  5E            POP ESI
0040111E  |.  5B            POP EBX
0040111F  |.  81C4 D4020000 ADD ESP,2D4
00401125  |.  C3            RETN
00401126  |>  8DBC24 180200>LEA EDI,DWORD PTR SS:[ESP+218]
0040112D  |.  83C9 FF       OR ECX,FFFFFFFF
00401130  |.  33C0          XOR EAX,EAX
00401132  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
00401134  |.  F7D1          NOT ECX
00401136  |.  49            DEC ECX
00401137  |.  83F9 40       CMP ECX,40                               ;  密码长度要为64
0040113A  |.  74 0A         JE SHORT CrackMe_.00401146
0040113C  |.  5F            POP EDI
0040113D  |.  5E            POP ESI
0040113E  |.  5B            POP EBX
0040113F  |.  81C4 D4020000 ADD ESP,2D4
00401145  |.  C3            RETN
00401146  |>  8D4424 3C     LEA EAX,DWORD PTR SS:[ESP+3C]
0040114A  |.  55            PUSH EBP
0040114B  |.  50            PUSH EAX
0040114C  |.  E8 9F040000   CALL CrackMe_.004015F0  ;hash算法设置固定常数
00401151  |.  8DBC24 900000>LEA EDI,DWORD PTR SS:[ESP+90]
00401158  |.  83C9 FF       OR ECX,FFFFFFFF
0040115B  |.  33C0          XOR EAX,EAX
0040115D  |.  8D5424 44     LEA EDX,DWORD PTR SS:[ESP+44]
00401161  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
00401163  |.  F7D1          NOT ECX
00401165  |.  49            DEC ECX
00401166  |.  51            PUSH ECX
00401167  |.  8D8C24 940000>LEA ECX,DWORD PTR SS:[ESP+94]
0040116E  |.  51            PUSH ECX                  ;hash(kyo327)
0040116F  |.  52            PUSH EDX
00401170  |.  E8 BB040000   CALL CrackMe_.00401630  ;hash算法初始化
00401175  |.  8D4424 50     LEA EAX,DWORD PTR SS:[ESP+50]
00401179  |.  8D4C24 40     LEA ECX,DWORD PTR SS:[ESP+40]
0040117D  |.  50            PUSH EAX
0040117E  |.  51            PUSH ECX
0040117F  |.  E8 7C050000   CALL CrackMe_.00401700   ;hash计算
00401184  |.  8D5424 58     LEA EDX,DWORD PTR SS:[ESP+58]
00401188  |.  52            PUSH EDX
00401189  |.  E8 62040000   CALL CrackMe_.004015F0
0040118E  |.  8DBC24 700100>LEA EDI,DWORD PTR SS:[ESP+170]
00401195  |.  83C9 FF       OR ECX,FFFFFFFF
00401198  |.  33C0          XOR EAX,EAX
0040119A  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
0040119C  |.  F7D1          NOT ECX
0040119E  |.  49            DEC ECX
0040119F  |.  8D8424 700100>LEA EAX,DWORD PTR SS:[ESP+170]
004011A6  |.  51            PUSH ECX
004011A7  |.  8D4C24 60     LEA ECX,DWORD PTR SS:[ESP+60]
004011AB  |.  50            PUSH EAX
004011AC  |.  51            PUSH ECX
004011AD  |.  E8 7E040000   CALL CrackMe_.00401630
004011B2  |.  8D5424 68     LEA EDX,DWORD PTR SS:[ESP+68]
004011B6  |.  8D4424 48     LEA EAX,DWORD PTR SS:[ESP+48]
004011BA  |.  52            PUSH EDX
004011BB  |.  50            PUSH EAX
004011BC  |.  E8 3F050000   CALL CrackMe_.00401700
004011C1  |.  8D4C24 70     LEA ECX,DWORD PTR SS:[ESP+70]
004011C5  |.  51            PUSH ECX
004011C6  |.  E8 25040000   CALL CrackMe_.004015F0      ;hash(lyz)
004011CB  |.  8D9424 880100>LEA EDX,DWORD PTR SS:[ESP+188]
004011D2  |.  52            PUSH EDX
004011D3  |.  E8 98380000   CALL <CrackMe_.__strrev>   ;倒序字符串
004011D8  |.  8BF8          MOV EDI,EAX
004011DA  |.  83C9 FF       OR ECX,FFFFFFFF
004011DD  |.  33C0          XOR EAX,EAX
004011DF  |.  8D9424 C40000>LEA EDX,DWORD PTR SS:[ESP+C4]
004011E6  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
004011E8  |.  F7D1          NOT ECX
004011EA  |.  2BF9          SUB EDI,ECX
004011EC  |.  8BF7          MOV ESI,EDI
004011EE  |.  8BE9          MOV EBP,ECX
004011F0  |.  8BFA          MOV EDI,EDX
004011F2  |.  83C9 FF       OR ECX,FFFFFFFF
004011F5  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
004011F7  |.  8BCD          MOV ECX,EBP
004011F9  |.  4F            DEC EDI
004011FA  |.  C1E9 02       SHR ECX,2
004011FD  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
004011FF  |.  8BCD          MOV ECX,EBP
00401201  |.  83E1 03       AND ECX,3
00401204  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
00401206  |.  8DBC24 C40000>LEA EDI,DWORD PTR SS:[ESP+C4]
0040120D  |.  83C9 FF       OR ECX,FFFFFFFF
00401210  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
00401212  |.  F7D1          NOT ECX
00401214  |.  49            DEC ECX
00401215  |.  8D8424 C40000>LEA EAX,DWORD PTR SS:[ESP+C4]
0040121C  |.  51            PUSH ECX
0040121D  |.  8D4C24 7C     LEA ECX,DWORD PTR SS:[ESP+7C]
00401221  |.  50            PUSH EAX
00401222  |.  51            PUSH ECX
00401223  |.  E8 08040000   CALL CrackMe_.00401630
00401228  |.  83C4 44       ADD ESP,44
0040122B  |.  8D5424 40     LEA EDX,DWORD PTR SS:[ESP+40]
0040122F  |.  8D4424 10     LEA EAX,DWORD PTR SS:[ESP+10]
00401233  |.  52            PUSH EDX
00401234  |.  50            PUSH EAX
00401235  |.  E8 C6040000   CALL CrackMe_.00401700    ;hash(kyo327zyl)
0040123A  |.  8D4C24 18     LEA ECX,DWORD PTR SS:[ESP+18]
0040123E  |.  6A 06         PUSH 6
00401240  |.  8D5424 6C     LEA EDX,DWORD PTR SS:[ESP+6C]
00401244  |.  51            PUSH ECX
00401245  |.  52            PUSH EDX
00401246  |.  E8 25370000   CALL <CrackMe_._strncpy>
0040124B  |.  8D4424 2A     LEA EAX,DWORD PTR SS:[ESP+2A]
0040124F  |.  6A 06         PUSH 6
00401251  |.  8D4C24 7E     LEA ECX,DWORD PTR SS:[ESP+7E]
00401255  |.  50            PUSH EAX
00401256  |.  51            PUSH ECX
00401257  |.  E8 14370000   CALL <CrackMe_._strncpy>
0040125C  |.  8DBC24 3C0200>LEA EDI,DWORD PTR SS:[ESP+23C]
00401263  |.  83C9 FF       OR ECX,FFFFFFFF
00401266  |.  33C0          XOR EAX,EAX
00401268  |.  8D9424 8C0000>LEA EDX,DWORD PTR SS:[ESP+8C]
0040126F  |.  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
00401271  |.  F7D1          NOT ECX
00401273  |.  49            DEC ECX
00401274  |.  52            PUSH EDX
00401275  |.  8D8424 400200>LEA EAX,DWORD PTR SS:[ESP+240]
0040127C  |.  51            PUSH ECX
0040127D  |.  50            PUSH EAX
0040127E  |.  E8 5D020000   CALL CrackMe_.004014E0                   ;  这个CALL判断是否为16进制数
00401283  |.  83C4 2C       ADD ESP,2C
00401286  |.  85C0          TEST EAX,EAX
00401288  |.  5D            POP EBP
00401289  |.  75 0A         JNZ SHORT CrackMe_.00401295
0040128B  |.  5F            POP EDI
0040128C  |.  5E            POP ESI
0040128D  |.  5B            POP EBX
0040128E  |.  81C4 D4020000 ADD ESP,2D4
00401294  |.  C3            RETN
00401295  |>  33C0          XOR EAX,EAX
00401297  |>  8D70 01       /LEA ESI,DWORD PTR DS:[EAX+1]
0040129A  |.  25 01000080   |AND EAX,80000001
0040129F  |.  79 05         |JNS SHORT CrackMe_.004012A6
004012A1  |.  48            |DEC EAX
004012A2  |.  83C8 FE       |OR EAX,FFFFFFFE
004012A5  |.  40            |INC EAX
004012A6  |>  8BCE          |MOV ECX,ESI
004012A8  |.  81E1 01000080 |AND ECX,80000001
004012AE  |.  79 05         |JNS SHORT CrackMe_.004012B5
004012B0  |.  49            |DEC ECX
004012B1  |.  83C9 FE       |OR ECX,FFFFFFFE
004012B4  |.  41            |INC ECX
004012B5  |>  C1E1 04       |SHL ECX,4
004012B8  |.  8D540C 68     |LEA EDX,DWORD PTR SS:[ESP+ECX+68]
004012BC  |.  8D0C40        |LEA ECX,DWORD PTR DS:[EAX+EAX*2]
004012BF  |.  C1E0 04       |SHL EAX,4
004012C2  |.  52            |PUSH EDX
004012C3  |.  8D544C 60     |LEA EDX,DWORD PTR SS:[ESP+ECX*2+60]
004012C7  |.  8D4404 6C     |LEA EAX,DWORD PTR SS:[ESP+EAX+6C]
004012CB  |.  52            |PUSH EDX
004012CC  |.  50            |PUSH EAX
004012CD  |.  E8 4E000000   |CALL CrackMe_.00401320  
;处理注册码,的算法的关键CALL
004012D2  |.  8BC6          |MOV EAX,ESI
004012D4  |.  83C4 0C       |ADD ESP,0C
004012D7  |.  83F8 03       |CMP EAX,3
004012DA  |.^ 7C BB         \JL SHORT CrackMe_.00401297
004012DC  |.  B9 04000000   MOV ECX,4
004012E1  |.  8D7C24 2C     LEA EDI,DWORD PTR SS:[ESP+2C]
004012E5  |.  8D7424 68     LEA ESI,DWORD PTR SS:[ESP+68]
004012E9  |.  33D2          XOR EDX,EDX
004012EB  |.  F3:A7         REPE CMPS DWORD PTR ES:[EDI],DWORD PTR D>
004012ED  |.  74 0C         JE SHORT CrackMe_.004012FB
004012EF  |.  5F            POP EDI
004012F0  |.  5E            POP ESI
004012F1  |.  33C0          XOR EAX,EAX
004012F3  |.  5B            POP EBX
004012F4  |.  81C4 D4020000 ADD ESP,2D4
004012FA  |.  C3            RETN
004012FB  |>  B9 04000000   MOV ECX,4
00401300  |.  8D7C24 1C     LEA EDI,DWORD PTR SS:[ESP+1C]
00401304  |.  8D7424 78     LEA ESI,DWORD PTR SS:[ESP+78]
00401308  |.  33C0          XOR EAX,EAX
0040130A  |.  F3:A7         REPE CMPS DWORD PTR ES:[EDI],DWORD PTR D>
0040130C  |.  5F            POP EDI
0040130D  |.  5E            POP ESI
0040130E  |.  0F94C0        SETE AL
00401311  |.  5B            POP EBX
00401312  |.  81C4 D4020000 ADD ESP,2D4
00401318  \.  C3            RETN

上面我在几个主要地方做了注释。

下面代码是注册码算法的关键CALL
00401320  /$  83EC 50       SUB ESP,50
00401323  |.  53            PUSH EBX
00401324  |.  56            PUSH ESI
00401325  |.  57            PUSH EDI
00401326  |.  32D2          XOR DL,DL
00401328  |.  B9 07000000   MOV ECX,7
0040132D  |.  33C0          XOR EAX,EAX
0040132F  |.  8D7C24 1D     LEA EDI,DWORD PTR SS:[ESP+1D]
00401333  |.  885424 1C     MOV BYTE PTR SS:[ESP+1C],DL
00401337  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]
00401339  |.  66:AB         STOS WORD PTR ES:[EDI]
0040133B  |.  8B4C24 60     MOV ECX,DWORD PTR SS:[ESP+60]
0040133F  |.  885424 0C     MOV BYTE PTR SS:[ESP+C],DL
00401343  |.  AA            STOS BYTE PTR ES:[EDI]
00401344  |.  33C0          XOR EAX,EAX
00401346  |.  6A 10         PUSH 10
00401348  |.  894424 11     MOV DWORD PTR SS:[ESP+11],EAX
0040134C  |.  8D5424 20     LEA EDX,DWORD PTR SS:[ESP+20]
00401350  |.  894424 15     MOV DWORD PTR SS:[ESP+15],EAX
00401354  |.  51            PUSH ECX
00401355  |.  894424 1D     MOV DWORD PTR SS:[ESP+1D],EAX
00401359  |.  52            PUSH EDX
0040135A  |.  66:894424 25  MOV WORD PTR SS:[ESP+25],AX
0040135F  |.  884424 27     MOV BYTE PTR SS:[ESP+27],AL
00401363  |.  E8 08360000   CALL <CrackMe_._strncpy>                 
;  strncpy(edx,ecx,10)把密码的前32位字符COPY到EDX
00401368  |.  8B4424 70     MOV EAX,DWORD PTR SS:[ESP+70]
0040136C  |.  6A 06         PUSH 6
0040136E  |.  8D4C24 2C     LEA ECX,DWORD PTR SS:[ESP+2C]
00401372  |.  50            PUSH EAX
00401373  |.  51            PUSH ECX
00401374  |.  E8 27370000   CALL <CrackMe_._strncat>                 ;  连接字符串
00401379  |.  8D5424 54     LEA EDX,DWORD PTR SS:[ESP+54]
0040137D  |.  52            PUSH EDX
0040137E  |.  E8 6D020000   CALL CrackMe_.004015F0
00401383  |.  8D4424 38     LEA EAX,DWORD PTR SS:[ESP+38]
00401387  |.  6A 20         PUSH 20
00401389  |.  8D4C24 5C     LEA ECX,DWORD PTR SS:[ESP+5C]
0040138D  |.  50            PUSH EAX
0040138E  |.  51            PUSH ECX
0040138F  |.  E8 9C020000   CALL CrackMe_.00401630
00401394  |.  8D5424 64     LEA EDX,DWORD PTR SS:[ESP+64]
00401398  |.  8D4424 34     LEA EAX,DWORD PTR SS:[ESP+34]
0040139C  |.  52            PUSH EDX
0040139D  |.  50            PUSH EAX
0040139E  |.  E8 5D030000   CALL CrackMe_.00401700
004013A3  |.  8B8424 980000>MOV EAX,DWORD PTR SS:[ESP+98]
004013AA  |.  8D4C24 3C     LEA ECX,DWORD PTR SS:[ESP+3C]
004013AE  |.  83C4 30       ADD ESP,30
004013B1  |.  2BC8          SUB ECX,EAX
004013B3  |.  BE 10000000   MOV ESI,10
004013B8  |>  8A1401        /MOV DL,BYTE PTR DS:[ECX+EAX]
004013BB  |.  8A18          |MOV BL,BYTE PTR DS:[EAX]
004013BD  |.  32DA          |XOR BL,DL
004013BF  |.  8818          |MOV BYTE PTR DS:[EAX],BL
004013C1  |.  40            |INC EAX
004013C2  |.  4E            |DEC ESI
004013C3  |.^ 75 F3         \JNZ SHORT CrackMe_.004013B8
004013C5  |.  5F            POP EDI
004013C6  |.  5E            POP ESI
004013C7  |.  5B            POP EBX
004013C8  |.  83C4 50       ADD ESP,50
004013CB  \.  C3            RETN
我用文字说一下 整个验证过程

密码长度要为64
假设用户名为kyo327
group为lyz

密码必须为16进制数

hash算法
hash(kyo327)=BA D2 21 44 95 24 E5 D8 2E 78 65 CC 7D 6F 6C E9
hash(lyz)=A2 4D 0F BC A3 BD CC D6 E6 E8 2D 34 2B F4 09 C7
hash(kyo327zyl)=33 37 CA 56 13 04 4C 32 99 A5 5E 04 DF E0 74 8D

设密码为1234567890ABCDEF1234567890ABCDEF ABCDEF1234567890ABCDEF1234567890

strcpy  2个 下面的
33 37 CA 56 13 04         4C 32 99 A5 5E 04

关键CALL 00401320
三个参数  第三个是取密码第33位到64位的首地址
          第二个参数为33 37 CA 56 13 04
          第一个参数为取密码首地址
第一步先取密码的前32位 并连接字符串后为:
12 34 56 78 90 AB CD EF 12 34 56 78 90 AB CD EF 33 37 CA 56 13 04

把上面进行HASH运算
C0 49 D2 1C 04 48 28 68 40 DD 76 56 04 6F 71 DB
每两位和sn(33-64)的每两位做xor运算
c0 xor ab=6b
49 xor cd=84
……
db xor 90=4b
第一个循环后 变为6B843D0E301E50F8EB1099443039094B
接着循环
三个参数  第三个是取密码前32位的首地址
          第二个参数为4c3299a55e04
        第一个参数为取6B843D0E301E50F8EB1099443039094B的首地址
再次字符串连接后为
6B843D0E301E50F8EB1099443039094B4c3299a55e04
把上面的进行HASH运算得到
A4 8F 1E 8D AC 3A C6 62 EC AE 5B A7 3C 79 40 97
每两位和sn(1-32)的每两位做xor运算
A4 xor 12=b6
……
97 xor ef=78
最后得到B6 BB 48 F5 3C 91 0B 8D FE 9A 0D DF AC D2 8D 78
第3轮循环
        三个参数  第三个是取6B843D0E301E50F8EB1099443039094B的首地址
          第二个参数为33 37 CA 56 13 04
        第一个参数为取B6 BB 48 F5 3C 91 0B 8D FE 9A 0D DF AC D2 8D 78的首地址

再连接字符串后为
B6 BB 48 F5 3C 91 0B 8D FE 9A 0D DF AC D2 8D 78 33 37 CA 56 13 04

对上面进行HASH运算得到
92 39 AF 7C 8E DB 63 A8 B6 AC 0D 76 D6 C1 20 9B

然后再做xor运算
92 xor 6b=f9
……
9b xor 4b=d0
F9 BD 92 72 BE C5 33 50 5D BC 94 32 E6 F8 29 D0
循环完最后 密码变为
B6 BB 48 F5 3C 91 0B 8D FE 9A 0D DF AC D2 8D 78
F9 BD 92 72 BE C5 33 50 5D BC 94 32 E6 F8 29 D0

那么只要B6BB48F53C910B8DFE9A0DDFACD28D78=hash(kyo327)

F9BD9272BEC533505DBC9432E6F829D0=hash(lyz)即可注册成功

现在开始求逆运算:
列出3个方程即可

1-------hash(sn(1-32)+3337ca561304) xor sn(33-64)=hashA
2-------hash(hashA+4c3299a55e04) xor sn(1-32)=hash(kyo327)
3-------hash(hash(kyo327)+3337ca561304) xor hashA(1-32)=hash(lyz)
由3式可得
hashA=hash(hash(kyo327)+3337ca561304) xor hash(lyz)
把hashA代入2式
可算出sn(1-32)
再把sn(1-32)和hashA代入1式 可算出sn(33-64)
这样的就OK了
下面来计算:
hash(lyz)=A24D0FBCA3BDCCD6E6E82D342BF409C7
hash(kyo327)=BAD221449524E5D82E7865CC7D6F6CE9
hash(BAD221449524E5D82E7865CC7D6F6CE93337ca561304)=
为了算注册码  可以先把BAD221449524E5D82E7865CC7D6F6CE9作为注册码前32位
这样的话可以得到
hash(hash(kyo327)+3337ca561304)=C4576368C5CA6AA34C072A39D529F844
hashA=C4576368C5CA6AA34C072A39D529F844(1-32) xor hash(lyz)=661A6CD46677A675AAEF070DFEDDF183
sn(1-32)=hash(kyo327) xor hash(hashA+4c3299a55e04)
        =hash(kyo327) xor hash(661A6CD46677A675AAEF070DFEDDF1834c3299a55e04)
        =hash(kyo327) xor D7 2F 7E 23 C1 90 26 FD 85 8F 7A 6A 1D 50 1F 8B
        =6DFD5F6754B4C325ABF71FA6603F7362
这里我在求hash(661A6CD46677A675AAEF070DFEDDF1834c3299a55e04)
时,还是把密码的前32位设置成661A6CD46677A675AAEF070DFEDDF183
进入那个注册码算法关键CALL后
连接661A6CD46677A675AAEF070DFEDDF183和3337ca561304再求HASH
但是这个不符和我们要求的。我们应该是连接4c3299a55e04

所以我在这里改了内存,也就是改了那个关键CALL的参数。因此也能顺利得到这个字符长串的HASH值
代入1式

sn(33-64)=hash(6DFD5F6754B4C325ABF71FA6603F73623337ca561304) xor hashA(1-32)
         =02B62640436A8CE8062274C04B4227E9 xor hashA(1-32)
         =64AC4A94251D2A9DACCD73CDB59FD66A

那么sn(1-64)=6DFD5F6754B4C325ABF71FA6603F736264AC4A94251D2A9DACCD73CDB59FD66A

所以用户名为kyo327
group为lyz
密码为:
6DFD5F6754B4C325ABF71FA6603F736264AC4A94251D2A9DACCD73CDB59FD66A

这样的话  我没有提取汇编代码写出那个HASH算法的程序  就也得到了注册码。
关键一点就是我 用程序自己本身 去计算我需要的字符串的HASH值。对于象我一样的菜鸟,这未尝不是一个好办法。希望能给大家带来一点破解过程中的思路。

另外 写的比较乱 可能只有亲自分析过此CRACKEME的朋友才能看懂我的乱文吧。
当然文中可能会存在不托之处  还望高人指点!

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

收藏
免费 7
打赏
分享
最新回复 (5)
雪    币: 1946
活跃值: (238)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 8 2007-5-4 19:43
2
0
我倒没去想过是什么算法。能逆就行。
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
binbinbin 28 2007-5-4 20:39
3
0
哈哈。好像有人说过:真理是不怕重复的。

非常好,我特别喜欢加密算法的破文-----------------因为我都看不懂。嘿
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg 2007-5-4 23:03
4
0
看不懂,遛个记号,以后学习!
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
happytown 31 2007-5-8 14:35
5
0
这个CrackMe其实不难,主要是考察Luby-Rackoff算法,只是其中的散列函数用的是我自己写的一个128位的hash算法而已。
雪    币: 472
活跃值: (20)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
山村小子 4 2007-5-9 12:01
6
0
强,学习!!!
游客
登录 | 注册 方可回帖
返回